[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH] arch/spinlock: Add spin_lock_irq variants
Spin_lock_irq* variants are used for synchronizing data that might be accessed from within an interrupt handler. Added (void)(lock) to each of the spin_lock macros to force the compiler to check the existence of the lock. The DEFINE_SPINLOCK() macro now defines the variable, and thus it can be used as `static DEFINE_SPINLOCK(x)`. Signed-off-by: Cristian Banu <cristb@xxxxxxxxx> --- include/uk/arch/spinlock.h | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/include/uk/arch/spinlock.h b/include/uk/arch/spinlock.h index b7a7501e3bfb..fc9c63fcb936 100644 --- a/include/uk/arch/spinlock.h +++ b/include/uk/arch/spinlock.h @@ -26,6 +26,8 @@ #ifndef __UKARCH_SPINLOCK_H__ #define __UKARCH_SPINLOCK_H__ +#include <uk/plat/lcpu.h> + #ifdef __cplusplus extern "C" { #endif @@ -36,14 +38,38 @@ typedef struct {} spinlock_t; #error "Define your spinlock operations!" #else -#define ukarch_spin_lock_init(lock) do {} while (0) -#define ukarch_spin_is_locked(lock) do {} while (0) -#define ukarch_spin_lock(lock) do {} while (0) -#define ukarch_spin_trylock(lock) do {} while (0) -#define ukarch_spin_unlock(lock) do {} while (0) +#define ukarch_spin_lock_init(lock) (void)(lock) +#define ukarch_spin_is_locked(lock) (void)(lock) +#define ukarch_spin_lock(lock) (void)(lock) +#define ukarch_spin_trylock(lock) (void)(lock) +#define ukarch_spin_unlock(lock) (void)(lock) + +#define ukarch_spin_lock_irq(lock) \ + do { \ + (void)(lock); \ + ukplat_lcpu_disable_irq(); \ + } while (0) + +#define ukarch_spin_unlock_irq(lock) \ + do { \ + (void)(lock); \ + ukplat_lcpu_enable_irq(); \ + } while (0) + +#define ukarch_spin_lock_irqsave(lock, flags) \ + do { \ + (void)(lock); \ + flags = ukplat_lcpu_save_irqf(); \ + } while (0) + +#define ukarch_spin_unlock_irqrestore(lock, flags) \ + do { \ + (void)(lock); \ + ukplat_lcpu_restore_irqf(flags); \ + } while (0) /* Defines a preinitialized spin_lock in unlocked state */ -#define DEFINE_SPINLOCK(lock) do {} while (0) +#define DEFINE_SPINLOCK(lock) spinlock_t lock = {} #endif -- 2.11.0 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |