linux-stable/drivers/net/irda
Alexey Khoroshilov e8684c8877 irda: ali-ircc: Fix deadlock in ali_ircc_sir_change_speed()
ali_ircc_sir_change_speed() is always called with self->lock held,
so acquiring the lock inside it leads to unavoidable deadlock.

Call graph:
ali_ircc_sir_change_speed() is called from ali_ircc_change_speed()
  ali_ircc_fir_hard_xmit() under spin_lock_irqsave(&self->lock, flags);
  ali_ircc_sir_hard_xmit() under spin_lock_irqsave(&self->lock, flags);
  ali_ircc_net_ioctl() under spin_lock_irqsave(&self->lock, flags);
  ali_ircc_dma_xmit_complete()
    ali_ircc_fir_interrupt()
      ali_ircc_interrupt() under spin_lock(&self->lock);
  ali_ircc_sir_write_wakeup()
    ali_ircc_sir_interrupt()
      ali_ircc_interrupt() under spin_lock(&self->lock);

The patch removes spin_lock/unlock from ali_ircc_sir_change_speed().

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-09-11 16:18:33 -07:00
..
act200l-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
actisys-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
ali-ircc.c irda: ali-ircc: Fix deadlock in ali_ircc_sir_change_speed() 2015-09-11 16:18:33 -07:00
ali-ircc.h irda: ali-ircc: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
au1k_ir.c irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
bfin_sir.c
bfin_sir.h
donauboe.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
donauboe.h
esi-sir.c
girbil-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
irda-usb.c irda: irda-usb: use msecs_to_jiffies for conversions 2015-05-25 17:39:21 -04:00
irda-usb.h irda: irda-usb: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
irtty-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
irtty-sir.h
Kconfig drivers/net/irda/Kconfig: Let SH_IRDA depend on HAS_IOMEM 2014-10-03 15:52:04 -07:00
kingsun-sir.c irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
ks959-sir.c irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
ksdazzle-sir.c
litelink-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
ma600-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
Makefile
mcp2120-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
mcs7780.c irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
mcs7780.h irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
nsc-ircc.c irda: nsc-ircc: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
nsc-ircc.h irda: nsc-ircc: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
old_belkin-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
pxaficp_ir.c net: irda: drop owner assignment from platform_drivers 2014-10-20 16:21:15 +02:00
sa1100_ir.c arm: sa1100: move irda header to linux/platform_data 2014-12-30 18:44:07 -05:00
sh_irda.c
sh_sir.c
sir-dev.h
sir_dev.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
sir_dongle.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
smsc-ircc2.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
smsc-ircc2.h
smsc-sio.h
stir4200.c irda: stir4200: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
tekram-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
toim3232-sir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
via-ircc.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
via-ircc.h irda: Removed all unused timeval variables 2015-01-11 21:39:40 -05:00
vlsi_ir.c irda: vlsi_ir: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
vlsi_ir.h irda: vlsi_ir: Replace timeval with ktime_t 2015-01-11 21:39:40 -05:00
w83977af.h
w83977af_ir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
w83977af_ir.h