Ticketing spinlocks - How to get to the owner who locked the spinlock?
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 Regards, Manty
Hello Manty, On Tue, Jan 27, 2015 at 11:27 AM, manty kuma <mantykuma@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@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
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? On Tue, Jan 27, 2015 at 3:12 PM, Arun KS <getarunks@gmail.com> wrote:
Hello Manty,
On Tue, Jan 27, 2015 at 11:27 AM, manty kuma <mantykuma@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@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Hello you can try to print running task backtrack information in kernel/lockdep.c Regards Sanjeev Sharma On Tue, Jan 27, 2015 at 11:27 AM, manty kuma <mantykuma@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
Regards, Manty
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Thank you Sanjeev, But as of now i am not sure on how to reproduce the issue. So i have to deal with the dump. Regards, Manty On Tue, Jan 27, 2015 at 3:17 PM, sanjeev sharma <sanjeevsharmaengg@gmail.com
wrote:
Hello
you can try to print running task backtrack information in kernel/lockdep.c
Regards Sanjeev Sharma
On Tue, Jan 27, 2015 at 11:27 AM, manty kuma <mantykuma@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
Regards, Manty
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
participants (3)
-
Arun KS -
manty kuma -
sanjeev sharma