[PATCH] arm: spinlock: const qualify read-only functions.

Ian Coolidge icoolidge at google.com
Sat Oct 31 10:26:06 PDT 2015


On Thu, Oct 29, 2015 at 5:27 PM, Ian Coolidge <icoolidge at google.com> wrote:
> This allows assert_spin_locked() to be used against
> spinlocks that are const qualified.
>
> For example:
>
> struct instance_t {
>         int data;
>         spinlock_t lock;
> };
>
> /*
>  * foo does not mutate instance.
>  * foo must be called while the lock is held.
>  */
> int foo(const instance_t *instance) {
>         assert_spin_locked(&instance->lock);
>
>         /* Code that assumes the lock is held */
>
>         return 0;
> }
>
> Signed-off-by: Ian Coolidge <icoolidge at google.com>
> ---
>  arch/arm/include/asm/spinlock.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/include/asm/spinlock.h b/arch/arm/include/asm/spinlock.h
> index 0fa4184..274ceb1 100644
> --- a/arch/arm/include/asm/spinlock.h
> +++ b/arch/arm/include/asm/spinlock.h
> @@ -118,12 +118,12 @@ static inline int arch_spin_value_unlocked(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;
> --
> 2.6.0.rc2.230.g3dd15c0
>

Arnd,

Please see this patch for an updated version. I should have noted it
is PATCH v2 and replied to the old thread, sorry about that.
Anyways, I provided an example of a const spinlock. Here, in that
example, the spinlock is not const itself, but it is part of a
structure that may be const.
I believe the example is a good one.

Also, with regards to your feedback, I don't think the length of the
function body is a good argument against promising not to mutate it.

Thanks for taking a look,
Ian



More information about the linux-arm-kernel mailing list