via-velocity: Give RX descriptors to the NIC later on open or MTU change
Subsystems (2)
PATCH 1/1 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().
---
This is untested; I don't have this hardware.
Ben.
drivers/net/via-velocity.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/net/via-velocity.c +4 -4
@@ -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);
@@ -2339,10 +2339,10 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu) dev->mtu = new_mtu; -velocity_give_many_rx_descs (vptr); -velocity_init_registers (vptr,VELOCITY_INIT_COLD ); +velocity_give_many_rx_descs (vptr); +mac_enable_int (vptr->mac_regs);netif_start_queue (dev);
Signature · 1 line
1.6.5.4
David Miller
maintainerFrom: Ben Hutchings <[email protected]>
Date: Tue, 15 Dec 2009 02:05:09 +0000
Quoted 9 lines
velocity_open()callsvelocity_give_many_rx_descs(), which gives RX descriptors to the NIC, before installing an interrupt handler or callingvelocity_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 beforevelocity_init_registers(). I'm not sure whether this is unsafe but it does look wrong.
Quoted 6 lines
Therefore, move the calls to
velocity_give_many_rx_descs()afterrequest_irq()andvelocity_init_registers().Signed-off-by Ben Hutchings <[email protected]>---
This is untested; I don't have this hardware.
Although this patch looks fine to me, I don't want to apply it until someone tests it.
Jan Ceuleers
Tested-byQuoted 12 lines · David Miller
Quoted 12 lines
velocity_open()callsvelocity_give_many_rx_descs(), which gives RX descriptors to the NIC, before installing an interrupt handler or callingvelocity_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 beforevelocity_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()afterrequest_irq()andvelocity_init_registers().
Quoted 6 lines
Quoted 3 lines
Signed-off-by Ben Hutchings <[email protected]>---
This is untested; I don't have this hardware.Although this patch looks fine to me, I don't want to apply it until someone tests it.
I have successfully booted a 2.6.32.2 kernel with this patch applied on top on a PXE-booting machine with nfsroot. If you consider that to be a sufficient test then please feel free to add my
Otherwise, please let me know which other tests you would like me to carry out.
Note though that I am unable to reproduce the original bug on my system.
Cheers, Jan
Quoted 1 line · Jan Ceuleers
I have successfully booted a 2.6.32.2 kernel with this patch applied on top on a PXE-booting machine with nfsroot.
Obviously this was on a machine with a Via Velocity NIC.
Jan
David Miller
maintainerFrom: Jan Ceuleers <[email protected]>
Date: Mon, 28 Dec 2009 10:36:03 +0100
Quoted 4 lines
Quoted 1 line · Jan Ceuleers
I have successfully booted a 2.6.32.2 kernel with this patch applied on top on a PXE-booting machine with nfsroot.
Obviously this was on a machine with a Via Velocity NIC.
Fair enough, applied to net-2.6, thanks.