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.milet...@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 );
_______________________________________________
gPXE-devel mailing list
gPXE-devel@etherboot.org
http://etherboot.org/mailman/listinfo/gpxe-devel

Reply via email to