On Thu, 24 Jan 2013 17:22:45 +0800
Yuanhan Liu <yuanhan....@linux.intel.com> wrote:

> Use spin_[un]lock instead of arch_spin_[un]lock in mutex-debug.h so
> that we can collect the lock statistics of spin_lock_mutex from
> /proc/lock_stat.
> 
> ...
>
> --- a/kernel/mutex-debug.h
> +++ b/kernel/mutex-debug.h
> @@ -43,13 +43,13 @@ static inline void mutex_clear_owner(struct mutex *lock)
>                                                       \
>               DEBUG_LOCKS_WARN_ON(in_interrupt());    \
>               local_irq_save(flags);                  \
> -             arch_spin_lock(&(lock)->rlock.raw_lock);\
> +             spin_lock(lock);                        \
>               DEBUG_LOCKS_WARN_ON(l->magic != l);     \
>       } while (0)
>  
>  #define spin_unlock_mutex(lock, flags)                               \
>       do {                                                    \
> -             arch_spin_unlock(&(lock)->rlock.raw_lock);      \
> +             spin_unlock(lock);                              \
>               local_irq_restore(flags);                       \
>               preempt_check_resched();                        \
>       } while (0)

>From my reading of the c2f21ce2e3128 changelog, this patch might screw
up the -rt kernel:

    locking: Implement new raw_spinlock
    
    Now that the raw_spin name space is freed up, we can implement
    raw_spinlock and the related functions which are used to annotate the
    locks which are not converted to sleeping spinlocks in preempt-rt.
    
    A side effect is that only such locks can be used with the low level
    lock fsunctions which circumvent lockdep.
    
    For !rt spin_* functions are mapped to the raw_spin* implementations.


Also, I believe your patch permits this cleanup:

--- a/kernel/mutex-debug.h~mutex-use-spin_lock-instead-of-arch_spin_lock-fix
+++ a/kernel/mutex-debug.h
@@ -42,14 +42,12 @@ static inline void mutex_clear_owner(str
                struct mutex *l = container_of(lock, struct mutex, wait_lock); \
                                                        \
                DEBUG_LOCKS_WARN_ON(in_interrupt());    \
-               local_irq_save(flags);                  \
-               spin_lock(lock);                        \
+               spin_lock_irqsave(lock, flags);         \
                DEBUG_LOCKS_WARN_ON(l->magic != l);     \
        } while (0)
 
 #define spin_unlock_mutex(lock, flags)                         \
        do {                                                    \
-               spin_unlock(lock);                              \
-               local_irq_restore(flags);                       \
+               spin_unlock_irqrestore(lock, flags);            \
                preempt_check_resched();                        \
        } while (0)

But we should hear from the -rt guys (at least!) before proceeding with
this, please.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to