[PATCH 0/6] examples/l3fwd-power: fix Rx interrupt mode for shared FD PMDs
Maxime Leroy
maxime at leroys.fr
Tue Aug 25 10:07:23 CEST 2026
Hi Anatoly, hi Sivaprasad,
On Mon, Jul 20, 2026 at 10:00 AM Maxime Leroy <maxime at leroys.fr> wrote:
>
> l3fwd-power's Rx interrupt (one-shot) mode was written around NICs whose
> interrupt fd is assigned per queue at setup, stays fixed and is
> level-triggered, as on MSI-X hardware. PMDs that do not fit that model
> never sleep on interrupts: they either fail to arm, watch an unbound fd,
> or miss the wake, and the 10 ms poll timeout hides all of it.
>
> dpaa2 is the motivating example: it delivers Rx interrupts through one
> QBMan portal per lcore, so the queues of a lcore share a single fd that
> is bound when the interrupt is enabled, not at queue setup; the
> notification is edge-triggered on an empty to non-empty transition; and
> arming a queue that already holds traffic returns -EAGAIN with the queue
> left unarmed.
>
> This series makes the interrupt and legacy loops handle those cases
> while leaving MSI-X NICs unchanged:
>
> 1/6 factor the duplicated arm/sleep/disarm block into a helper.
> 2/6 check the arm return: on -EAGAIN poll and retry, on any other
> error drop interrupt mode for the lcore instead of sleeping on
> unarmed queues.
> 3/6 register the fd in the epoll set after arming, not before, so a
> fd bound at enable time is watched only once it exists.
> 4/6 accept -EEXIST when several queues share one fd.
> 5/6 recheck the queues before sleeping so a packet that arrived during
> the arm window is not missed under edge-triggered interrupts.
> 6/6 block indefinitely instead of on a 10 ms timeout, and wake the
> workers through an eventfd on exit, so a broken interrupt path no
> longer hides behind periodic polling.
>
> Maxime Leroy (6):
> examples/l3fwd-power: factor out Rx interrupt sleep path
> examples/l3fwd-power: check Rx interrupt enable errors
> examples/l3fwd-power: enable Rx interrupt before epoll add
> examples/l3fwd-power: accept shared Rx interrupt FD
> examples/l3fwd-power: recheck Rx queues before sleeping
> examples/l3fwd-power: block until Rx interrupt or exit
>
> examples/l3fwd-power/main.c | 184 +++++++++++++++++++++++++++++-------
> 1 file changed, 150 insertions(+), 34 deletions(-)
>
> --
> 2.43.0
>
Gentle ping on this series.
Thanks,
Maxime
More information about the dev
mailing list