diff options
| author | Osama Abboud <osamaabb@amazon.com> | 2024-08-07 06:24:21 +0000 |
|---|---|---|
| committer | Osama Abboud <osamaabb@FreeBSD.org> | 2024-10-31 14:54:11 +0000 |
| commit | 8b43095ad8cdddfd0cdb11bb6e14aea60e607b5d (patch) | |
| tree | 7c82718324c96b723baa0355d6c2974c0248a23d | |
| parent | b0830d2b6bbc76fcbfe937f674e06e14933ad3ef (diff) | |
ena: Clear NS_MOREFRAG flag for last netmap slot
When processing packets within the rx-flow
ena_netmap_rx_load_desc doesn't know the number of descriptors, so it
sets NS_MOREFRAG to all the slots to indicate that there are more
fragments for this packet.
The code calls ena_netmap_rx_load_desc() for every descriptor in
this packet to map the relevant buffer into the netmap shared memory.
After ena_netmap_rx_load_desc() calls, we need to unset the NS_MOREFRAG
for the last fragment to indicate that this is the last fragment,
so we explicitly turn off NS_MOREFRAG flag.
Current code overrides all other flags and sets NS_BUF_CHANGED.
This patch unsets the relevant flag only.
Approved by: cperciva (mentor)
Sponsored by: Amazon, Inc.
(cherry picked from commit 2f17afd19a3534dc1755c52edb0c2f70ea0eb1e4)
| -rw-r--r-- | sys/dev/ena/ena_netmap.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/dev/ena/ena_netmap.c b/sys/dev/ena/ena_netmap.c index eef8021b8569..8a220373ec3f 100644 --- a/sys/dev/ena/ena_netmap.c +++ b/sys/dev/ena/ena_netmap.c @@ -964,7 +964,7 @@ ena_netmap_rx_frame(struct ena_netmap_ctx *ctx) * It just set flag NS_MOREFRAG to all slots, then here flag of * last slot is cleared. */ - ctx->slots[nm_prev(ctx->nm_i, ctx->lim)].flags = NS_BUF_CHANGED; + ctx->slots[nm_prev(ctx->nm_i, ctx->lim)].flags &= ~NS_MOREFRAG; if (rc != 0) { goto rx_clear_desc; |
