de2104x: prevent interrupt before the interrupt handler is registered

de_init_hw enables the irq thus it must be issued after request_irq.

Signed-off-by: Martin Michlmayr <tbm@cyrius.com>
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>

authored by Francois Romieu and committed by Romieu Francois 3f735b76 6218cf44

+11 -13
+11 -13
drivers/net/tulip/de2104x.c
··· 1362 1362 { 1363 1363 struct de_private *de = dev->priv; 1364 1364 int rc; 1365 - unsigned long flags; 1366 1365 1367 1366 if (netif_msg_ifup(de)) 1368 1367 printk(KERN_DEBUG "%s: enabling interface\n", dev->name); ··· 1375 1376 return rc; 1376 1377 } 1377 1378 1378 - rc = de_init_hw(de); 1379 - if (rc) { 1380 - printk(KERN_ERR "%s: h/w init failure, err=%d\n", 1381 - dev->name, rc); 1382 - goto err_out_free; 1383 - } 1379 + dw32(IntrMask, 0); 1384 1380 1385 1381 rc = request_irq(dev->irq, de_interrupt, SA_SHIRQ, dev->name, dev); 1386 1382 if (rc) { 1387 1383 printk(KERN_ERR "%s: IRQ %d request failure, err=%d\n", 1388 1384 dev->name, dev->irq, rc); 1389 - goto err_out_hw; 1385 + goto err_out_free; 1386 + } 1387 + 1388 + rc = de_init_hw(de); 1389 + if (rc) { 1390 + printk(KERN_ERR "%s: h/w init failure, err=%d\n", 1391 + dev->name, rc); 1392 + goto err_out_free_irq; 1390 1393 } 1391 1394 1392 1395 netif_start_queue(dev); ··· 1396 1395 1397 1396 return 0; 1398 1397 1399 - err_out_hw: 1400 - spin_lock_irqsave(&de->lock, flags); 1401 - de_stop_hw(de); 1402 - spin_unlock_irqrestore(&de->lock, flags); 1403 - 1398 + err_out_free_irq: 1399 + free_irq(dev->irq, dev); 1404 1400 err_out_free: 1405 1401 de_free_rings(de); 1406 1402 return rc;