I'm interested in finding out if anyone on this list has a lab sort of setup
with bge gear. Where the following diff could be benchmarked, the idea being a router
or firewall like setup. I'd like to see if this diff actually has any noticeable
difference in transmit performance or if it translates out to a micro-optimization
and there is very little difference, if any at all.
Please try it out anyway, let me know how it goes and if you do test the diff
then provide me with a dmesg too.
Correct a performance bug from Bill Paul's original FreeBSD bge(4) driver:
Each call to the FreeBSD bge_start() routine the transmit producer
pointer index from the chip mailbox register BGE_MBX_TX_HOST_PROD0_LO.
The local copy of that value is then updated by bge_encap() as
bge_encap() encapsulates packets in the Tx ring. If bge_encap()
succeds in encpuslating one or more packets, bge_start() tells the
chip to start sending the newly-encinitiates writes the new value back
to the chip mailbox register.
However, comparison of the Linux drivers (Broadcom-supplied and
open-source tg3.c) and to the OpenSolaris driver confirms that
register BGE_MBX_TX_HOST_PROD0_LO is write-only to software.
Thus, we can just keep a copy in the softc, and eliminate the
(expensive) PCI register write on each call to bge_start().