On Wed, Apr 12, 2023 at 1:56 PM Jacob Keller <jacob.e.keller@xxxxxxxxx> wrote: > > > > On 4/12/2023 10:00 AM, Stanislav Fomichev wrote: > > On 04/12, Song Yoong Siang wrote: > >> Add receive hardware timestamp metadata support via kfunc to XDP receive > >> packets. > >> > >> Suggested-by: Stanislav Fomichev <sdf@xxxxxxxxxx> > >> Signed-off-by: Song Yoong Siang <yoong.siang.song@xxxxxxxxx> > >> --- > >> drivers/net/ethernet/stmicro/stmmac/stmmac.h | 3 +++ > >> .../net/ethernet/stmicro/stmmac/stmmac_main.c | 26 ++++++++++++++++++- > >> 2 files changed, 28 insertions(+), 1 deletion(-) > >> > >> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h > >> index ac8ccf851708..826ac0ec88c6 100644 > >> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h > >> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h > >> @@ -94,6 +94,9 @@ struct stmmac_rx_buffer { > >> > >> struct stmmac_xdp_buff { > >> struct xdp_buff xdp; > >> + struct stmmac_priv *priv; > >> + struct dma_desc *p; > >> + struct dma_desc *np; > >> }; > >> > >> struct stmmac_rx_queue { > >> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > >> index f7bbdf04d20c..ed660927b628 100644 > >> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > >> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > >> @@ -5315,10 +5315,15 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue) > >> > >> xdp_init_buff(&ctx.xdp, buf_sz, &rx_q->xdp_rxq); > >> xdp_prepare_buff(&ctx.xdp, page_address(buf->page), > >> - buf->page_offset, buf1_len, false); > >> + buf->page_offset, buf1_len, true); > >> > >> pre_len = ctx.xdp.data_end - ctx.xdp.data_hard_start - > >> buf->page_offset; > >> + > >> + ctx.priv = priv; > >> + ctx.p = p; > >> + ctx.np = np; > >> + > >> skb = stmmac_xdp_run_prog(priv, &ctx.xdp); > >> /* Due xdp_adjust_tail: DMA sync for_device > >> * cover max len CPU touch > >> @@ -7071,6 +7076,23 @@ void stmmac_fpe_handshake(struct stmmac_priv *priv, bool enable) > >> } > >> } > >> > >> +static int stmmac_xdp_rx_timestamp(const struct xdp_md *_ctx, u64 *timestamp) > >> +{ > >> + const struct stmmac_xdp_buff *ctx = (void *)_ctx; > >> + > >> + *timestamp = 0; > >> + stmmac_get_rx_hwtstamp(ctx->priv, ctx->p, ctx->np, timestamp); > >> + > > > > [..] > > > >> + if (*timestamp) > > > > Nit: does it make sense to change stmmac_get_rx_hwtstamp to return bool > > to indicate success/failure? Then you can do: > > > > if (!stmmac_get_rx_hwtstamp()) > > reutrn -ENODATA; > > I would make it return the -ENODATA directly since typically bool > true/false functions have names like "stmmac_has_rx_hwtstamp" or similar > name that infers you're answering a true/false question. > > That might also let you avoid zeroing the timestamp value first? SGTM! > Thanks, > Jake