On Thursday, April 13, 2023 5:46 AM, Stanislav Fomichev <sdf@xxxxxxxxxx> wrote: >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! stmmac_get_rx_hwtstamp() is used in other places where return value is not needed. Additional if statement checking on return value will add cost, but ignoring return value will hit "unused result" warning. I think it will be more make sense if I directly retrieve the timestamp value in stmmac_xdp_rx_timestamp(), instead of reuse stmmac_get_rx_hwtstamp(). Let me send out v4 for review. Thanks & Regards Siang > >> Thanks, >> Jake