Подробности
[В начало]
Проблема в реализации № L0020
Краткое описание
drivers/net/3c505.c: Двойная блокировка spin_lock_irqsave
Подробное описание
Драйвер drivers/net/3c505.c. Двойная блокировка. Первая блокировка spin_lock_irqsave устанавливается на adapter->lock в строке 1075 в функции netdev_tx_t elp_start_xmi: drivers/net/3c505.c:
1070 static netdev_tx_t elp_start_xmit(struct sk_buff *skb, struct net_device
*dev)
1071 {
1072 unsigned long flags;
1073 elp_device *adapter = netdev_priv(dev);
1074
1075 spin_lock_irqsave(&adapter->lock, flags);
1076 check_3c505_dma(dev);
...
А вторая внутри check_3c505_dma в строке 301:
Путь до второго spin_lock_irqsave из
elp_start_xmit:
293 static inline void check_3c505_dma(struct net_device *dev)
294 {
295 elp_device *adapter = netdev_priv(dev);
296 if (adapter->dmaing && time_after(jiffies, adapter-
>current_dma.start_time + 10)) {
297 unsigned long flags, f;
298 pr_err("%s: DMA %s timed out, %d bytes left
", dev-
>name,
299 adapter->current_dma.direction ? "download" :
"upload",
300 get_dma_residue(dev->dma));
301 spin_lock_irqsave(&adapter->lock, flags);
Компонент
linux-kernel 2.6.35-rc1
Принято
https://lkml.org/lkml/2010/6/17/408
Статус
Признано ошибкой
[В начало]
»