Подробности

[В начало]

Проблема в реализации № L0010

Краткое описание

drivers/net/irda/ali-ircc.c: Двойная блокировка spin_lock_irqsave

Подробное описание

ali_ircc_sir_change_speed() всегда вызывается с захваченным self->lock, поэтому захват спинлока внутри функции ведёт к блокировке. Граф вызовов выглядит следующим образом:

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);

Компонент

linux-kernel 2.6.31

Принято

http://lkml.org/lkml/2009/10/8/113
https://lkml.org/lkml/2015/9/11/613
commit

Статус

Исправлено в ядре 4.3-rc3

Список трасс

Трасса ошибок 1

[В начало]