Hi Magnus, This looks good to me. Acked-by: Steen Hegelund <Steen.Hegelund@xxxxxxxxxxxxx> BR Steen On Tue, 2023-01-17 at 10:25 +0100, Magnus Karlsson wrote: > [Some people who received this message don't often get email from magnus.karlsson@xxxxxxxxx. Learn > why this is important at https://aka.ms/LearnAboutSenderIdentification ] > > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > From: Magnus Karlsson <magnus.karlsson@xxxxxxxxx> > > Make sure that xdp_do_flush() is always executed before > napi_complete_done(). This is important for two reasons. First, a > redirect to an XSKMAP assumes that a call to xdp_do_redirect() from > napi context X on CPU Y will be follwed by a xdp_do_flush() from the > same napi context and CPU. This is not guaranteed if the > napi_complete_done() is executed before xdp_do_flush(), as it tells > the napi logic that it is fine to schedule napi context X on another > CPU. Details from a production system triggering this bug using the > veth driver can be found following the first link below. > > The second reason is that the XDP_REDIRECT logic in itself relies on > being inside a single NAPI instance through to the xdp_do_flush() call > for RCU protection of all in-kernel data structures. Details can be > found in the second link below. > > Fixes: a825b611c7c1 ("net: lan966x: Add support for XDP_REDIRECT") > Signed-off-by: Magnus Karlsson <magnus.karlsson@xxxxxxxxx> > Link: https://lore.kernel.org/r/20221220185903.1105011-1-sbohrer@xxxxxxxxxxxxxx > Link: https://lore.kernel.org/all/20210624160609.292325-1-toke@xxxxxxxxxx/ > --- > drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c > b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c > index 5314c064ceae..55b484b10562 100644 > --- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c > +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c > @@ -608,12 +608,12 @@ static int lan966x_fdma_napi_poll(struct napi_struct *napi, int weight) > lan966x_fdma_rx_reload(rx); > } > > - if (counter < weight && napi_complete_done(napi, counter)) > - lan_wr(0xff, lan966x, FDMA_INTR_DB_ENA); > - > if (redirect) > xdp_do_flush(); > > + if (counter < weight && napi_complete_done(napi, counter)) > + lan_wr(0xff, lan966x, FDMA_INTR_DB_ENA); > + > return counter; > } > > -- > 2.34.1 >