Processing the NET_RX_SOFTIRQ: net_rx_action
net_rx_action is the bottom-half function used to process
incoming frames. Its execution is triggered whenever a driver notifies the kernel about
the presence of input frames. Figure
10-5 shows the flow of control through the function.
Frames can wait in two places for net_rx_action to
process them:
- A shared CPU-specific queue
Non-NAPI devices' interrupt handlers, which call
netif_rx, place frames into thesoftnet_data->input_pkt_queueof the CPU on which the interrupt handlers run.- Device memory
The
pollmethod used by NAPI drivers extracts frames directly from the device (or the device driver receive rings).
The section "Old Versus New Driver
Interfaces" showed how the kernel is notified about the need to run net_rx_action in both cases.

Figure 10-5. net_rx_action function
The job of net_rx_action is pretty simple: to
browse the poll_list list of devices that have
something in their ingress queue and invoke for each one the associated poll virtual function until one of the following conditions is
met:
There are no more devices in the list.
net_rx_actionhas run for too long and therefore it is supposed to release the CPU so that it does not become a CPU hog.The number of frames already dequeued and processed has reached a given upper bound limit (
budget).budgetis initialized at the beginning of the function tonetdev_max_backlog, which is ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access