36 lines
1.2 KiB
Diff
36 lines
1.2 KiB
Diff
From: Ben Hutchings <ben@decadent.org.uk>
|
|
Subject: [PATCH] via-velocity: Give RX descriptors to the NIC later on open or MTU change
|
|
|
|
velocity_open() calls velocity_give_many_rx_descs(), which gives RX
|
|
descriptors to the NIC, before installing an interrupt handler or
|
|
calling velocity_init_registers(). I think this is very unsafe and it
|
|
appears to explain the bug report <http://bugs.debian.org/508527>.
|
|
|
|
On MTU change, velocity_give_many_rx_descs() is again called before
|
|
velocity_init_registers(). I'm not sure whether this is unsafe but
|
|
it does look wrong.
|
|
|
|
Therefore, move the calls to velocity_give_many_rx_descs() after
|
|
request_irq() and velocity_init_registers().
|
|
|
|
--- a/drivers/net/via-velocity.c
|
|
+++ b/drivers/net/via-velocity.c
|
|
@@ -2237,8 +2237,6 @@ static int velocity_open(struct net_device *dev)
|
|
/* Ensure chip is running */
|
|
pci_set_power_state(vptr->pdev, PCI_D0);
|
|
|
|
- velocity_give_many_rx_descs(vptr);
|
|
-
|
|
velocity_init_registers(vptr, VELOCITY_INIT_COLD);
|
|
|
|
ret = request_irq(vptr->pdev->irq, velocity_intr, IRQF_SHARED,
|
|
@@ -2250,6 +2248,8 @@ static int velocity_open(struct net_device *dev)
|
|
goto out;
|
|
}
|
|
|
|
+ velocity_give_many_rx_descs(vptr);
|
|
+
|
|
mac_enable_int(vptr->mac_regs);
|
|
netif_start_queue(dev);
|
|
napi_enable(&vptr->napi);
|