greybus: don't use spin_lock_irq()
authorViresh Kumar <viresh.kumar@linaro.org>
Thu, 23 Jun 2016 17:53:06 +0000 (23:23 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Thu, 23 Jun 2016 21:15:21 +0000 (14:15 -0700)
commit5e2b63915cb6f1e86f9515342cfcfb28cd82c5b0
tree787126e74acfc014b8c86297b45d25487658a005
parent05e3095563670ab9188eab2c38808e9fd1f3a99d
greybus: don't use spin_lock_irq()

spin_[un]lock_irq() routines should be used carefully as they things can
go wrong, if they are mixed with spin_lock_irqsave() or other variants.

The main problem is that spin_[un]lock_irq() routines doesn't check if
the IRQs are already disabled/enabled on the local CPU and so
spin_unlock_irq() will forcefully enable interrupts for example.

This may not work well, if some other code was relying on interrupts
being disabled.

Use spin_lock_irqsave() and spin_unlock_restore() instead.

This patch doesn't claim that it fixes the JIRA completely, but
the issue was harder to reproduce for some iterations after this, which
was quite easy to reproduce earlier on.

Tested on EVT 2.0 with lots of debug patches to kernel and greybus.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/connection.c
drivers/staging/greybus/es2.c
drivers/staging/greybus/uart.c