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