Ticketing spinlocks - How to get to the owner who locked the spinlock?

manty kuma mantykuma at gmail.com
Tue Jan 27 01:53:13 EST 2015


7 swappers and one process with name doe:handler

In pawapper processes aswell, when i see the backtrace i see some
 mem aborts but couldnot get to the place which is holding the lock

On Tuesday, January 27, 2015, Arun KS <getarunks at gmail.com> wrote:

> Hi Manty,
>
> On Tue, Jan 27, 2015 at 11:52 AM, manty kuma <mantykuma at gmail.com
> <javascript:;>> wrote:
> > Dear Arun,
> >
> > typedef struct raw_spinlock {
> >     arch_spinlock_t raw_lock;
> > #ifdef CONFIG_GENERIC_LOCKBREAK
> >     unsigned int break_lock;
> > #endif
> > #ifdef CONFIG_DEBUG_SPINLOCK
> >     unsigned int magic, owner_cpu;
> >     void *owner;
> > #endif
> > #ifdef CONFIG_DEBUG_LOCK_ALLOC
> >     struct lockdep_map dep_map;
> > #endif
> > } raw_spinlock_t;
> >
> >
> > Unfortunately, CONFIG_DEBUG_SPINLOCK is disabled on my sw. So i do not
> have
> > this information. :(
> >
> > Any other way?
> What is the output from your runq command?
>
>
> Thanks,
> Arun
> >
> > On Tue, Jan 27, 2015 at 3:12 PM, Arun KS <getarunks at gmail.com
> <javascript:;>> wrote:
> >>
> >> Hello Manty,
> >>
> >> On Tue, Jan 27, 2015 at 11:27 AM, manty kuma <mantykuma at gmail.com
> <javascript:;>> wrote:
> >> >
> >> > Hi All,
> >> >
> >> > Currently I am looking into an issue which is holding the printk
> >> > lock(logbuf_lock)
> >> >
> >> > logbuf_lock = {
> >> >   raw_lock = {
> >> >     owner = 0,
> >> >     next = 4
> >> >   }
> >> > }
> >> >
> >> > I read about ticketing spinlocks to understand the above output. I
> >> > understood that 4 cpu's are waiting for the lock while someone
> already has
> >> > it.
> >> >
> >> > I would like to know who has it? Is there a way I can know which
> process
> >> > is acquiring a given spinlock? Is the information not stored in it?
> >> >
> >> > I am using crash tool to analyse the dump
> >>
> >>
> >> crash> raw_spinlock_t
> >> typedef struct raw_spinlock {
> >>     arch_spinlock_t raw_lock;
> >>     unsigned int magic;
> >>     unsigned int owner_cpu;
> >>     void *owner;
> >> } raw_spinlock_t;
> >> SIZE: 16
> >>
> >> The owner field points to task holding the lock, if locked.
> >>
> >> Here is what i have in one of my dumps,
> >> crash> logbuf_lock
> >> logbuf_lock = $6 = {
> >>   raw_lock = {
> >>     {
> >>       slock = 464001960,
> >>       tickets = {
> >>         owner = 7080,
> >>         next = 7080
> >>       }
> >>     }
> >>   },
> >>   magic = 3735899821,
> >>   owner_cpu = 4294967295,
> >>   owner = 0xffffffff
> >> }
> >>
> >> since lock is not acquired, it shows 0xFFFFFFFF.
> >> Otherwise point to a task_struct *.
> >>
> >> thanks,
> >> Arun
> >>
> >> >
> >> >
> >> > Regards,
> >> > Manty
> >> >
> >> > _______________________________________________
> >> > Kernelnewbies mailing list
> >> > Kernelnewbies at kernelnewbies.org <javascript:;>
> >> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> >> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20150127/f927423a/attachment-0001.html 


More information about the Kernelnewbies mailing list