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