Johannes Schlatow a6a856cb70 dde_ipxe: fix allocation errors under high TX load
Under high TX load, 'irq_handler()' is rarely executed but packets
are still received since 'netdev_poll()' is called for every TX packet.

'netdev_poll()' not only handles completed transmissions but also
puts the IO buffers of received packets into the RX queue and refills the RX
ring by allocating more IO buffers. However, the IO buffers can only be freed
after they have been dequeued and passed to the 'rx_callback()'. Since
this was only done by 'irq_handler()', we exhaust the slab allocator
under high TX load.

A fix for this is to process the RX queue not only in the IRQ handler
but also when transmitting packets.

genodelabs/genode#4555
2022-08-10 13:33:03 +02:00
..
2022-05-25 12:23:04 +02:00

This repository contains the Device Driver Environment for the
"donator OS" iPXE available from http://ipxe.org/.

For building DDE iPXE, you first need to fetch and patch the original
sources. The 'prepare_port' tool automates this task. Just issue:

! ./tool/ports/prepare_port dde_ipxe

Now, you need to include the DDE iPXE repository into your Genode
build process. Just add the path to this directory to the
'REPOSITORIES' declaration of the 'etc/build.conf' file within your
build directory, for example

! REPOSITORIES += $(GENODE_DIR)/repos/dde_ipxe

After successful build the DDE iPXE based ethernet driver is located
at 'bin/nic_drv'.

The driver optionally reports the following information under the
label "devices" if requested in the config as depicted.

! <config> <report mac_address="true"/> </config>

! <devices> <nic mac_address="02:00:00:00:00:01"/> </devices>