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

Arun KS getarunks at gmail.com
Tue Jan 27 01:12:48 EST 2015


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