]> www.infradead.org Git - users/hch/configfs.git/commitdiff
bnxt_en: Add is_ts_pkt field to struct bnxt_sw_tx_bd
authorMichael Chan <michael.chan@broadcom.com>
Fri, 28 Jun 2024 19:29:57 +0000 (12:29 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 1 Jul 2024 10:23:20 +0000 (11:23 +0100)
Remove the unused is_gso field and add the is_ts_pkt field to struct
bnxt_sw_tx_bd.  This field will mark the TX BD that has requested
HW TX timestamp.  The field needs to be cleared if the timestamp packet
is later aborted.  This field will be useful when processing the
new TX timestamp completion from the hardware in the next patches.

Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h

index 1bd0c597325263a4ae622b81e45c864c98d248a5..af064dcc61424c1a4b5fc48bdf652afc11af2e93 100644 (file)
@@ -522,6 +522,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
                                if (vlan_tag_flags)
                                        ptp->tx_hdr_off += VLAN_HLEN;
                                lflags |= cpu_to_le32(TX_BD_FLAGS_STAMP);
+                               tx_buf->is_ts_pkt = 1;
                                skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
                        } else {
                                atomic_inc(&bp->ptp_cfg->tx_avail);
@@ -758,6 +759,7 @@ tx_free:
        dev_kfree_skb_any(skb);
 tx_kick_pending:
        if (BNXT_TX_PTP_IS_SET(lflags)) {
+               txr->tx_buf_ring[txr->tx_prod].is_ts_pkt = 0;
                atomic64_inc(&bp->ptp_cfg->stats.ts_err);
                atomic_inc(&bp->ptp_cfg->tx_avail);
        }
@@ -781,6 +783,7 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
        while (RING_TX(bp, cons) != hw_cons) {
                struct bnxt_sw_tx_bd *tx_buf;
                struct sk_buff *skb;
+               bool is_ts_pkt;
                int j, last;
 
                tx_buf = &txr->tx_buf_ring[RING_TX(bp, cons)];
@@ -800,6 +803,8 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
                        tx_buf->is_push = 0;
                        goto next_tx_int;
                }
+               is_ts_pkt = tx_buf->is_ts_pkt;
+               tx_buf->is_ts_pkt = 0;
 
                dma_unmap_single(&pdev->dev, dma_unmap_addr(tx_buf, mapping),
                                 skb_headlen(skb), DMA_TO_DEVICE);
@@ -814,7 +819,7 @@ static void __bnxt_tx_int(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
                                skb_frag_size(&skb_shinfo(skb)->frags[j]),
                                DMA_TO_DEVICE);
                }
-               if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {
+               if (unlikely(is_ts_pkt)) {
                        if (BNXT_CHIP_P5(bp)) {
                                /* PTP worker takes ownership of the skb */
                                if (!bnxt_get_tx_ts_p5(bp, skb)) {
index d3ad73d4c00a856f358204eaf7a0b1a3cb94bc21..00976e8a1e6a5b739656a0c57e8ea0b42030f4e2 100644 (file)
@@ -874,7 +874,7 @@ struct bnxt_sw_tx_bd {
        DEFINE_DMA_UNMAP_ADDR(mapping);
        DEFINE_DMA_UNMAP_LEN(len);
        struct page             *page;
-       u8                      is_gso;
+       u8                      is_ts_pkt;
        u8                      is_push;
        u8                      action;
        unsigned short          nr_frags;