Netdev List
 help / color / mirror / Atom feed
* [PATCH net-next v1] idpf: export RX hardware timestamping information to XDP
@ 2025-11-22 14:08 Mina Almasry
  2025-11-24  8:33 ` [Intel-wired-lan] " Loktionov, Aleksandr
  2025-12-17 14:33 ` Alexander Lobakin
  0 siblings, 2 replies; 8+ messages in thread
From: Mina Almasry @ 2025-11-22 14:08 UTC (permalink / raw)
  To: netdev, bpf, linux-kernel
  Cc: YiFei Zhu, Alexei Starovoitov, Daniel Borkmann, David S. Miller,
	Jakub Kicinski, Jesper Dangaard Brouer, John Fastabend,
	Stanislav Fomichev, Tony Nguyen, Przemek Kitszel, Andrew Lunn,
	Eric Dumazet, Paolo Abeni, Alexander Lobakin, Richard Cochran,
	intel-wired-lan, Mina Almasry

From: YiFei Zhu <zhuyifei@google.com>

The logic is similar to idpf_rx_hwtstamp, but the data is exported
as a BPF kfunc instead of appended to an skb.

A idpf_queue_has(PTP, rxq) condition is added to check the queue
supports PTP similar to idpf_rx_process_skb_fields.

Cc: intel-wired-lan@lists.osuosl.org

Signed-off-by: YiFei Zhu <zhuyifei@google.com>
Signed-off-by: Mina Almasry <almasrymina@google.com>
---
 drivers/net/ethernet/intel/idpf/xdp.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/net/ethernet/intel/idpf/xdp.c b/drivers/net/ethernet/intel/idpf/xdp.c
index 21ce25b0567f..850389ca66b6 100644
--- a/drivers/net/ethernet/intel/idpf/xdp.c
+++ b/drivers/net/ethernet/intel/idpf/xdp.c
@@ -2,6 +2,7 @@
 /* Copyright (C) 2025 Intel Corporation */
 
 #include "idpf.h"
+#include "idpf_ptp.h"
 #include "idpf_virtchnl.h"
 #include "xdp.h"
 #include "xsk.h"
@@ -369,6 +370,31 @@ int idpf_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames,
 				       idpf_xdp_tx_finalize);
 }
 
+static int idpf_xdpmo_rx_timestamp(const struct xdp_md *ctx, u64 *timestamp)
+{
+	const struct virtchnl2_rx_flex_desc_adv_nic_3 *rx_desc;
+	const struct libeth_xdp_buff *xdp = (typeof(xdp))ctx;
+	const struct idpf_rx_queue *rxq;
+	u64 cached_time, ts_ns;
+	u32 ts_high;
+
+	rx_desc = xdp->desc;
+	rxq = libeth_xdp_buff_to_rq(xdp, typeof(*rxq), xdp_rxq);
+
+	if (!idpf_queue_has(PTP, rxq))
+		return -ENODATA;
+	if (!(rx_desc->ts_low & VIRTCHNL2_RX_FLEX_TSTAMP_VALID))
+		return -ENODATA;
+
+	cached_time = READ_ONCE(rxq->cached_phc_time);
+
+	ts_high = le32_to_cpu(rx_desc->ts_high);
+	ts_ns = idpf_ptp_tstamp_extend_32b_to_64b(cached_time, ts_high);
+
+	*timestamp = ts_ns;
+	return 0;
+}
+
 static int idpf_xdpmo_rx_hash(const struct xdp_md *ctx, u32 *hash,
 			      enum xdp_rss_hash_type *rss_type)
 {
@@ -392,6 +418,7 @@ static int idpf_xdpmo_rx_hash(const struct xdp_md *ctx, u32 *hash,
 }
 
 static const struct xdp_metadata_ops idpf_xdpmo = {
+	.xmo_rx_timestamp	= idpf_xdpmo_rx_timestamp,
 	.xmo_rx_hash		= idpf_xdpmo_rx_hash,
 };
 

base-commit: e05021a829b834fecbd42b173e55382416571b2c
-- 
2.52.0.rc2.455.g230fcf2819-goog


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-12-17 14:37 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-22 14:08 [PATCH net-next v1] idpf: export RX hardware timestamping information to XDP Mina Almasry
2025-11-24  8:33 ` [Intel-wired-lan] " Loktionov, Aleksandr
2025-11-24 10:51   ` YiFei Zhu
2025-11-24 11:37     ` Loktionov, Aleksandr
2025-12-01  1:27   ` Mina Almasry
2025-12-01  7:29     ` Loktionov, Aleksandr
2025-12-17 14:33 ` Alexander Lobakin
2025-12-17 14:35   ` Alexander Lobakin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox