linux/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 irda: remove deprecated IRQF_DISABLED 2013-10-07 15:53:52 -04:00
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 irda: Fix FSF address in file headers 2013-12-06 12:37:55 -05:00
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 drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
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 net: irda: ep7211-sir: Remove driver 2014-02-06 19:54:48 -08:00
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 irda: sh_irda: use devm_request_irq() 2014-01-09 22:57:13 -05:00
sh_sir.c irda: sh_sir: Use cpufreq_for_each_valid_entry macro for iteration 2014-04-30 00:06:54 +02:00
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
sir-dev.h irda: Remove extern from function prototypes 2013-09-24 12:54:17 -07:00
smsc-ircc2.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
smsc-ircc2.h irda: Fix FSF address in file headers 2013-12-06 12:37:55 -05:00
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_ir.c irda: Convert IRDA_DEBUG to pr_debug 2014-11-12 13:56:41 -05:00
w83977af_ir.h
w83977af.h