• Samuel Ortiz's avatar
    NFC: Queue pn533 commands · 5d50b364
    Samuel Ortiz authored
    Instead of returning EBUSY when getting a command while another one is
    running, we queue them. Upon completion of the pending command, the next
    one is processed.
    Besides the fact that it simplifies the pn533 locking scheme, it also
    comes with the nice side effect of fixing the following warning:
    
    [   82.274297] =====================================
    [   82.274297] [ BUG: bad unlock balance detected! ]
    [   82.274298] 3.5.0-rc1+ #1 Not tainted
    [   82.274299] -------------------------------------
    [   82.274300] kworker/u:1/16 is trying to release lock (&dev->cmd_lock) at:
    [   82.274305] [<ffffffff8144f246>] mutex_unlock+0x9/0xb
    [   82.274305] but there are no more locks to release!
    [   82.274306]
    [   82.274306] other info that might help us debug this:
    [   82.274306] 2 locks held by kworker/u:1/16:
    [   82.274311]  #0:  (pn533){.+.+..}, at: [<ffffffff8103a67d>]
    +process_one_work+0x145/0x2e2
    [   82.274314]  #1:  ((&dev->cmd_work)){+.+...}, at: [<ffffffff8103a67d>]
    +process_one_work+0x145/0x2e2
    [   82.274314]
    [   82.274314] stack backtrace:
    [   82.274315] Pid: 16, comm: kworker/u:1 Not tainted 3.5.0-rc1+ #1
    [   82.274315] Call Trace:
    [   82.274317]  [<ffffffff8144f246>] ? mutex_unlock+0x9/0xb
    [   82.274321]  [<ffffffff81059841>] print_unlock_inbalance_bug+0xda/0xe4
    [   82.274323]  [<ffffffff8105c74c>] lock_release_non_nested+0xb2/0x232
    [   82.274325]  [<ffffffff8105a61e>] ? mark_held_locks+0x6d/0x95
    [   82.274326]  [<ffffffff8144f246>] ? mutex_unlock+0x9/0xb
    [   82.274328]  [<ffffffff81451105>] ? _raw_spin_unlock_irqrestore+0x40/0x5c
    [   82.274329]  [<ffffffff8144f246>] ? mutex_unlock+0x9/0xb
    [   82.274330]  [<ffffffff8105ca42>] lock_release+0x176/0x1ac
    [   82.274333]  [<ffffffff8123de14>] ? pn533_send_complete+0xa8/0xa8
    [   82.274334]  [<ffffffff8144f1d6>] __mutex_unlock_slowpath+0xb0/0x117
    [   82.274336]  [<ffffffff8144f246>] mutex_unlock+0x9/0xb
    [   82.274337]  [<ffffffff8123de65>] pn533_wq_cmd_complete+0x51/0x55
    [   82.274338]  [<ffffffff8103a6db>] process_one_work+0x1a3/0x2e2
    [   82.274340]  [<ffffffff8103a67d>] ? process_one_work+0x145/0x2e2
    [   82.274341]  [<ffffffff8103b119>] worker_thread+0xcf/0x153
    [   82.274343]  [<ffffffff8103b04a>] ? manage_workers.isra.22+0x16b/0x16b
    [   82.274344]  [<ffffffff8103b04a>] ? manage_workers.isra.22+0x16b/0x16b
    [   82.274346]  [<ffffffff8103eb11>] kthread+0x95/0x9d
    [   82.274348]  [<ffffffff81452ef4>] kernel_thread_helper+0x4/0x10
    [   82.274351]  [<ffffffff81046561>] ? finish_task_switch+0x45/0xc3
    [   82.274352]  [<ffffffff814514f0>] ? retint_restore_args+0x13/0x13
    [   82.274353]  [<ffffffff8103ea7c>] ? __init_kthread_worker+0x55/0x55
    [   82.274354]  [<ffffffff81452ef0>] ? gs_change+0x13/0x13
    Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
    5d50b364
pn533.c 58.5 KB