lkml.org 
[lkml]   [2013]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 2/2] mutex: use spin_[un]lock instead of arch_spin_[un]lock
    On Thu, 24 Jan 2013 17:22:45 +0800
    Yuanhan Liu <yuanhan.liu@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.



    \
     
     \ /
      Last update: 2013-01-25 01:41    [W:2.254 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site