Skip to contentSkip to conversation

arm: spinlock: const qualify read-only functions

PATCH New Ian Coolidge 2 participants 3 messages Oct 29, 2015 – Oct 31, 2015

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

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
index 0fa4184..3512d2d 100644
@@ -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
#1 lore raw

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
index c85e96d..72a7f33 100644
@@ -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
#2 lore raw

PATCH 1/1 arm: spinlock: const qualify read-only functions

In reply to Ian Coolidge
Quoted 13 lines · Ian Coolidge

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 +0 -0
index 0fa4184..3512d2d 100644

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.