Ticketing spinlocks - How to get to the owner who locked the spinlock?
Arun KS
getarunks at gmail.com
Tue Jan 27 01:25:47 EST 2015
Hi Manty,
On Tue, Jan 27, 2015 at 11:52 AM, manty kuma <mantykuma at gmail.com> 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> wrote:
>>
>> Hello Manty,
>>
>> On Tue, Jan 27, 2015 at 11:27 AM, manty kuma <mantykuma at gmail.com> 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
>> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>> >
>
>
More information about the Kernelnewbies
mailing list