[gPXE-devel] [PATCH][forcedeth] Exit poll() as early as possible if no work to do
Thomas Miletich
thomas.miletich at gmail.com
Thu Nov 11 16:15:35 EST 2010
I got my hands on an old nforce mainboard with a 10de:0066 forcedeth
LoM today. Chainloading pxelinux from gPXE and loading linux over tftp
was very slow(around 0.25-0.5MByte/s).
While trying to find the cause I made the following change. It
resolves the problem for me; transfers are back at ~10MByte/sec in my
100MBit test setup now.
I think the if () should be placed where it is now, so we exit ASAP in
poll(). Anyway, I don't understand why this resolved the speed issue I
was seeing. If anyone has any ideas, please let me know.
Thomas Miletich
Patch:
[forcedeth] Exit poll() as early as possible if no work to do
Signed-off-by: Thomas Miletich<thomas.miletich at gmail.com>
---
src/drivers/net/forcedeth.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/drivers/net/forcedeth.c b/src/drivers/net/forcedeth.c
index 64d363c..21cb0c1 100644
--- a/src/drivers/net/forcedeth.c
+++ b/src/drivers/net/forcedeth.c
@@ -990,6 +990,10 @@ forcedeth_poll ( struct net_device *netdev )
status = readl ( ioaddr + NvRegIrqStatus ) & NVREG_IRQSTAT_MASK;
+ /* Return when no interrupts have been triggered */
+ if ( ! status )
+ return;
+
/* Clear interrupts */
writel ( NVREG_IRQSTAT_MASK, ioaddr + NvRegIrqStatus );
@@ -1000,10 +1004,6 @@ forcedeth_poll ( struct net_device *netdev )
if ( ( status & NVREG_IRQ_LINK ) || ! ( netdev_link_ok ( netdev ) ) )
forcedeth_link_status ( netdev );
- /* Return when no interrupts have been triggered */
- if ( ! status )
- return;
-
/* Process transmitted packets */
nv_process_tx_packets ( netdev );
More information about the gPXE-devel
mailing list