pkarashchenko commented on code in PR #10776: URL: https://github.com/apache/nuttx/pull/10776#discussion_r1343031216
########## sched/semaphore/spinlock.c: ########## @@ -24,6 +24,10 @@ #include <nuttx/config.h> +#ifdef CONFIG_RW_SPINLOCK +#include <stdatomic.h> Review Comment: ```suggestion # include <stdatomic.h> ``` ########## include/nuttx/spinlock.h: ########## @@ -449,4 +454,120 @@ void spin_unlock_irqrestore_wo_note(FAR spinlock_t *lock, irqstate_t flags); # define spin_unlock_irqrestore_wo_note(l, f) up_irq_restore(f) #endif +#if defined(CONFIG_RW_SPINLOCK) + +/**************************************************************************** + * Name: check_bit + * + * Description: + * Check offset is set or not. + * + * Input Parameters: + * lock - A lock instance. + * offset - from right to left. + * + * Returned Value: + * bool + * + * Assumptions: + * No. + ****************************************************************************/ + +inline bool check_bit(spinlock_t lock, uint8_t offset) +{ + return lock & (1 << offset); +} + +/**************************************************************************** + * Name: rw_read_spin_lock + * + * Description: + * If this CPU does not already hold the spinlock, then loop until the + * spinlock is successfully locked. + * + * This implementation is non-reentrant and set a bit of lock. + * + * The priority of reader is higher than writter if a reader hold the + * lock, a new reader can get its lock but writer can't get this lock. + * + * Input Parameters: + * lock - A reference to the spinlock object to lock. + * + * Returned Value: + * None. When the function returns, the spinlock was successfully locked + * by this CPU. + * + * Assumptions: + * Not running at the interrupt level. + * + ****************************************************************************/ + +void rw_read_spin_lock(FAR volatile rw_spinlock_t *lock); Review Comment: I think it is better to built-in `volatile` into `rw_spinlock_t`, but that is up to discussion. ########## include/nuttx/spinlock.h: ########## @@ -51,6 +51,11 @@ typedef uint8_t spinlock_t; #include <arch/spinlock.h> +#if defined(CONFIG_RW_SPINLOCK) +typedef uint32_t rw_spinlock_t; +#include <stdatomic.h> Review Comment: ```suggestion # include <stdatomic.h> ``` ########## include/nuttx/spinlock.h: ########## @@ -449,4 +454,120 @@ void spin_unlock_irqrestore_wo_note(FAR spinlock_t *lock, irqstate_t flags); # define spin_unlock_irqrestore_wo_note(l, f) up_irq_restore(f) #endif +#if defined(CONFIG_RW_SPINLOCK) + +/**************************************************************************** + * Name: check_bit + * + * Description: + * Check offset is set or not. + * + * Input Parameters: + * lock - A lock instance. + * offset - from right to left. + * + * Returned Value: + * bool + * + * Assumptions: + * No. + ****************************************************************************/ + +inline bool check_bit(spinlock_t lock, uint8_t offset) Review Comment: Can this be a macro? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org