From 2f529f9b558ca1c1bd74be7437a84e4711743404 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 01 Nov 2024 02:11:33 +0000 Subject: [PATCH] add xenomai --- kernel/include/linux/spinlock.h | 96 ++++++++++++++++++++++++++++++++---------------- 1 files changed, 64 insertions(+), 32 deletions(-) diff --git a/kernel/include/linux/spinlock.h b/kernel/include/linux/spinlock.h index 7989784..311854f 100644 --- a/kernel/include/linux/spinlock.h +++ b/kernel/include/linux/spinlock.h @@ -97,21 +97,27 @@ struct lock_class_key *key, short inner); # define raw_spin_lock_init(lock) \ + LOCK_ALTERNATIVES(lock, spin_lock_init, \ do { \ static struct lock_class_key __key; \ \ - __raw_spin_lock_init((lock), #lock, &__key, LD_WAIT_SPIN); \ -} while (0) + __raw_spin_lock_init(__RAWLOCK(lock), #lock, &__key, LD_WAIT_SPIN); \ +} while (0)) #else # define raw_spin_lock_init(lock) \ - do { *(lock) = __RAW_SPIN_LOCK_UNLOCKED(lock); } while (0) + LOCK_ALTERNATIVES(lock, spin_lock_init, \ + do { *(__RAWLOCK(lock)) = __RAW_SPIN_LOCK_UNLOCKED(__RAWLOCK(lock)); } while (0)) #endif -#define raw_spin_is_locked(lock) arch_spin_is_locked(&(lock)->raw_lock) +#define raw_spin_is_locked(lock) \ + LOCK_ALTERNATIVES_RET(lock, spin_is_locked, \ + arch_spin_is_locked(&(__RAWLOCK(lock))->raw_lock)) #ifdef arch_spin_is_contended -#define raw_spin_is_contended(lock) arch_spin_is_contended(&(lock)->raw_lock) +#define raw_spin_is_contended(lock) \ + LOCK_ALTERNATIVES_RET(lock, spin_is_contended, \ + arch_spin_is_contended(&(__RAWLOCK(lock))->raw_lock)) #else #define raw_spin_is_contended(lock) (((void)(lock), 0)) #endif /*arch_spin_is_contended*/ @@ -220,13 +226,19 @@ * various methods are defined as nops in the case they are not * required. */ -#define raw_spin_trylock(lock) __cond_lock(lock, _raw_spin_trylock(lock)) +#define raw_spin_trylock(lock) \ + __cond_lock(lock, \ + LOCK_ALTERNATIVES_RET(lock, \ + spin_trylock, _raw_spin_trylock(__RAWLOCK(lock)))) -#define raw_spin_lock(lock) _raw_spin_lock(lock) +#define raw_spin_lock(lock) \ + LOCK_ALTERNATIVES(lock, spin_lock, _raw_spin_lock(__RAWLOCK(lock))) #ifdef CONFIG_DEBUG_LOCK_ALLOC + # define raw_spin_lock_nested(lock, subclass) \ - _raw_spin_lock_nested(lock, subclass) + LOCK_ALTERNATIVES(lock, spin_lock_nested, \ + _raw_spin_lock_nested(__RAWLOCK(lock), subclass), subclass) # define raw_spin_lock_nest_lock(lock, nest_lock) \ do { \ @@ -239,18 +251,20 @@ * warns about set-but-not-used variables when building with * CONFIG_DEBUG_LOCK_ALLOC=n and with W=1. */ -# define raw_spin_lock_nested(lock, subclass) \ - _raw_spin_lock(((void)(subclass), (lock))) +# define raw_spin_lock_nested(lock, subclass) \ + LOCK_ALTERNATIVES(lock, spin_lock_nested, \ + _raw_spin_lock(((void)(subclass), __RAWLOCK(lock))), subclass) # define raw_spin_lock_nest_lock(lock, nest_lock) _raw_spin_lock(lock) #endif #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) -#define raw_spin_lock_irqsave(lock, flags) \ - do { \ - typecheck(unsigned long, flags); \ - flags = _raw_spin_lock_irqsave(lock); \ - } while (0) +#define raw_spin_lock_irqsave(lock, flags) \ + LOCK_ALTERNATIVES(lock, spin_lock_irqsave, \ + do { \ + typecheck(unsigned long, flags); \ + flags = _raw_spin_lock_irqsave(__RAWLOCK(lock)); \ + } while (0), flags) #ifdef CONFIG_DEBUG_LOCK_ALLOC #define raw_spin_lock_irqsave_nested(lock, flags, subclass) \ @@ -268,45 +282,55 @@ #else -#define raw_spin_lock_irqsave(lock, flags) \ - do { \ - typecheck(unsigned long, flags); \ - _raw_spin_lock_irqsave(lock, flags); \ - } while (0) +#define raw_spin_lock_irqsave(lock, flags) \ + LOCK_ALTERNATIVES(lock, spin_lock_irqsave, \ + do { \ + typecheck(unsigned long, flags); \ + _raw_spin_lock_irqsave(__RAWLOCK(lock), flags); \ + } while (0), flags) #define raw_spin_lock_irqsave_nested(lock, flags, subclass) \ raw_spin_lock_irqsave(lock, flags) #endif -#define raw_spin_lock_irq(lock) _raw_spin_lock_irq(lock) +#define raw_spin_lock_irq(lock) \ + LOCK_ALTERNATIVES(lock, spin_lock_irq, \ + _raw_spin_lock_irq(__RAWLOCK(lock))) #define raw_spin_lock_bh(lock) _raw_spin_lock_bh(lock) -#define raw_spin_unlock(lock) _raw_spin_unlock(lock) -#define raw_spin_unlock_irq(lock) _raw_spin_unlock_irq(lock) +#define raw_spin_unlock(lock) \ + LOCK_ALTERNATIVES(lock, spin_unlock, \ + _raw_spin_unlock(__RAWLOCK(lock))) +#define raw_spin_unlock_irq(lock) \ + LOCK_ALTERNATIVES(lock, spin_unlock_irq, \ + _raw_spin_unlock_irq(__RAWLOCK(lock))) -#define raw_spin_unlock_irqrestore(lock, flags) \ - do { \ - typecheck(unsigned long, flags); \ - _raw_spin_unlock_irqrestore(lock, flags); \ - } while (0) +#define raw_spin_unlock_irqrestore(lock, flags) \ + LOCK_ALTERNATIVES(lock, spin_unlock_irqrestore, \ + do { \ + typecheck(unsigned long, flags); \ + _raw_spin_unlock_irqrestore(__RAWLOCK(lock), flags); \ + } while (0), flags) #define raw_spin_unlock_bh(lock) _raw_spin_unlock_bh(lock) #define raw_spin_trylock_bh(lock) \ __cond_lock(lock, _raw_spin_trylock_bh(lock)) #define raw_spin_trylock_irq(lock) \ + LOCK_ALTERNATIVES_RET(lock, spin_trylock_irq, \ ({ \ local_irq_disable(); \ - raw_spin_trylock(lock) ? \ + raw_spin_trylock(__RAWLOCK(lock)) ? \ 1 : ({ local_irq_enable(); 0; }); \ -}) +})) #define raw_spin_trylock_irqsave(lock, flags) \ + LOCK_ALTERNATIVES_RET(lock, spin_trylock_irqsave, \ ({ \ local_irq_save(flags); \ - raw_spin_trylock(lock) ? \ + raw_spin_trylock(__RAWLOCK(lock)) ? \ 1 : ({ local_irq_restore(flags); 0; }); \ -}) +}), flags) /* Include rwlock functions */ #include <linux/rwlock.h> @@ -320,12 +344,20 @@ # include <linux/spinlock_api_up.h> #endif +/* Pull the lock types specific to the IRQ pipeline. */ +#ifdef CONFIG_IRQ_PIPELINE +#include <linux/spinlock_pipeline.h> +#else +static inline void check_spinlock_context(void) { } +#endif + /* * Map the spin_lock functions to the raw variants for PREEMPT_RT=n */ static __always_inline raw_spinlock_t *spinlock_check(spinlock_t *lock) { + check_spinlock_context(); return &lock->rlock; } -- Gitblit v1.6.2