[ipxe-devel] [gPXE-devel] [PATCH][forcedeth] Exit poll() as early as possible if no work to do
Michael Brown
mbrown at fensystems.co.uk
Thu Nov 11 21:31:46 UTC 2010
On Thursday 11 Nov 2010 21:15:35 Thomas Miletich wrote:
> 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.
Question: does this affect the ability to autonegotiate? The code block
/* Link change interrupt occured. Call always if link is down,
* to give auto-neg a chance to finish */
if ( ( status & NVREG_IRQ_LINK ) || ! ( netdev_link_ok ( netdev ) ) )
forcedeth_link_status ( netdev );
suggests that we don't see an NVREG_IRQ_LINK interrupt status while the link
is down, and your patch would cause forcedeth_poll() to exit before testing
netdev_link_ok().
forcedeth_link_status() gets called explicitly in probe(). I would therefore
expect that with your patch we may work only if the link is up at the time
probe() is called.
Could you try starting iPXE+your patch with the link down (e.g. cable
unplugged), open the net device, plug in the cable, and see if ifstat reports
link-up?
Thanks,
Michael
More information about the ipxe-devel
mailing list