arm: spinlock: const qualify read-only functions
Subsystems (3)
PATCH 1/1 arm: spinlock: const qualify read-only functions
This allows assert_spin_locked() to be used against spinlocks that are const qualified.
--- arch/arm/include/asm/spinlock.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/arm/include/asm/spinlock.h +3 -3
@@ -113,17 +113,17 @@ static inline void arch_spin_unlock(arch_spinlock_t *lock)dsb_sev (); } -static inline int arch_spin_value_unlocked (arch_spinlock_t lock) +static inline int arch_spin_value_unlocked (const arch_spinlock_t lock) {return lock.tickets.owner == lock.tickets.next; } -static inline int arch_spin_is_locked (arch_spinlock_t *lock) +static inline int arch_spin_is_locked (const arch_spinlock_t *lock) {return !arch_spin_value_unlocked (READ_ONCE (*lock)); } -static inline int arch_spin_is_contended (arch_spinlock_t *lock) +static inline int arch_spin_is_contended (const arch_spinlock_t *lock) {struct __raw_tickets tickets =READ_ONCE (lock->tickets);return (tickets.next - tickets.owner) >1 ;
Signature · 1 line
2.6.0.rc2.230.g3dd15c0
PATCH 1/1 arm64: spinlock: const qualify read-only functions
This allows assert_spin_locked() to be used against spinlocks that are const qualified.
--- arch/arm64/include/asm/spinlock.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/arm64/include/asm/spinlock.h +3 -3
@@ -122,17 +122,17 @@ static inline void arch_spin_unlock(arch_spinlock_t *lock) : "memory"); } -static inline int arch_spin_value_unlocked (arch_spinlock_t lock) +static inline int arch_spin_value_unlocked (const arch_spinlock_t lock) {return lock.owner == lock.next; } -static inline int arch_spin_is_locked (arch_spinlock_t *lock) +static inline int arch_spin_is_locked (const arch_spinlock_t *lock) {return !arch_spin_value_unlocked (READ_ONCE (*lock)); } -static inline int arch_spin_is_contended (arch_spinlock_t *lock) +static inline int arch_spin_is_contended (const arch_spinlock_t *lock) {arch_spinlock_t lockval =READ_ONCE (*lock);return (lockval.next - lockval.owner) >1 ;
Signature · 1 line
2.6.0.rc2.230.g3dd15c0
PATCH 1/1 arm: spinlock: const qualify read-only functions
In reply to Ian CoolidgeQuoted 13 lines · Ian Coolidge
This allows
assert_spin_locked()to be used against spinlocks that are const qualified.Signed-off-by Ian Coolidge <[email protected]>--- arch/arm/include/asm/spinlock.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)arch/arm/include/asm/spinlock.h +0
-0
arch/arm/include/asm/spinlock.h static inline void arch_spin_unlock(arch_spinlock_t *lock) · line 116
Quoted 5 lines
arch/arm/include/asm/spinlock.h +1
-1@@ -113,17 +113,17 @@ static inline void arch_spin_unlock(arch_spinlock_t *lock)dsb_sev (); } -static inline int arch_spin_value_unlocked (arch_spinlock_t lock) +static inline int arch_spin_value_unlocked (const arch_spinlock_t lock)
In this case, 'lock' is passed by value, so there is really no point in constifying it.
Quoted 5 lines
arch/arm/include/asm/spinlock.h +0
-1{return lock.tickets.owner == lock.tickets.next; } -static inline int arch_spin_is_locked (arch_spinlock_t *lock)
arch/arm/include/asm/spinlock.h static inline void arch_spin_unlock(arch_spinlock_t *lock) · line 129
Quoted 10 lines
arch/arm/include/asm/spinlock.h +2
-1+static inline int arch_spin_is_locked (const arch_spinlock_t *lock) {return !arch_spin_value_unlocked (READ_ONCE (*lock)); } -static inline int arch_spin_is_contended (arch_spinlock_t *lock) +static inline int arch_spin_is_contended (const arch_spinlock_t *lock) {struct __raw_tickets tickets =READ_ONCE (lock->tickets);return (tickets.next - tickets.owner) >1 ;
For these remaining cases, the 'const' only enforces that these functions may not change the state of the lock. I think this is of limited value for single-line static inline functions such as these.
Could you explain your use case? Do you have code that only has access to constified references to arch_spinlock_t instances?
Signature · 1 line
Ard.