Skip to contentSkip to conversation

via-velocity: Give RX descriptors to the NIC later on open or MTU change

PATCH In review Ben Hutchings 3 participants 5 messages Dec 15, 2009 – Jan 4, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
index 4ceb441..c93f58f 100644
@@ -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
maintainer
#1 lore raw

From: Ben Hutchings <[email protected]>
Date: Tue, 15 Dec 2009 02:05:09 +0000

Quoted 9 lines

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.

Quoted 6 lines

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.

Although this patch looks fine to me, I don't want to apply it until someone tests it.

Tested-by
#2 lore raw
Quoted 12 lines · David Miller
Quoted 12 lines

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().

Quoted 6 lines
Quoted 3 lines

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

#3 lore raw
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

maintainer
#4 lore raw

From: 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.