ice: Make ptype internal to descriptor info processing
authorLarysa Zaremba <larysa.zaremba@intel.com>
Tue, 5 Dec 2023 21:08:32 +0000 (22:08 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 14 Dec 2023 00:16:40 +0000 (16:16 -0800)
Currently, rx_ptype variable is used only as an argument
to ice_process_skb_fields() and is computed
just before the function call.

Therefore, there is no reason to pass this value as an argument.
Instead, remove this argument and compute the value directly inside
ice_process_skb_fields() function.

Also, separate its calculation into a short function, so the code
can later be reused in .xmo_() callbacks.

Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
Link: https://lore.kernel.org/r/20231205210847.28460-4-larysa.zaremba@intel.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
drivers/net/ethernet/intel/ice/ice_txrx.c
drivers/net/ethernet/intel/ice/ice_txrx_lib.c
drivers/net/ethernet/intel/ice/ice_txrx_lib.h
drivers/net/ethernet/intel/ice/ice_xsk.c

index 9e97ea8630686720bca3903cc3f6ae86c6807316..6afe4cf1de8a9ec146e718c920fd0e47c559b4a2 100644 (file)
@@ -1181,7 +1181,6 @@ int ice_clean_rx_irq(struct ice_rx_ring *rx_ring, int budget)
                unsigned int size;
                u16 stat_err_bits;
                u16 vlan_tag = 0;
-               u16 rx_ptype;
 
                /* get the Rx desc from Rx ring based on 'next_to_clean' */
                rx_desc = ICE_RX_DESC(rx_ring, ntc);
@@ -1286,10 +1285,7 @@ construct_skb:
                total_rx_bytes += skb->len;
 
                /* populate checksum, VLAN, and protocol */
-               rx_ptype = le16_to_cpu(rx_desc->wb.ptype_flex_flags0) &
-                       ICE_RX_FLEX_DESC_PTYPE_M;
-
-               ice_process_skb_fields(rx_ring, rx_desc, skb, rx_ptype);
+               ice_process_skb_fields(rx_ring, rx_desc, skb);
 
                ice_trace(clean_rx_irq_indicate, rx_ring, rx_desc, skb);
                /* send completed skb up the stack */
index 02d70a96a5a4585290e511b8f1bd6f2f42c14f11..8904b22bfba72cb0b4084c131a03abb58f467ec4 100644 (file)
@@ -202,12 +202,21 @@ ice_ptp_rx_hwts_to_skb(struct ice_rx_ring *rx_ring,
        skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(ts_ns);
 }
 
+/**
+ * ice_get_ptype - Read HW packet type from the descriptor
+ * @rx_desc: RX descriptor
+ */
+static u16 ice_get_ptype(const union ice_32b_rx_flex_desc *rx_desc)
+{
+       return le16_to_cpu(rx_desc->wb.ptype_flex_flags0) &
+              ICE_RX_FLEX_DESC_PTYPE_M;
+}
+
 /**
  * ice_process_skb_fields - Populate skb header fields from Rx descriptor
  * @rx_ring: Rx descriptor ring packet is being transacted on
  * @rx_desc: pointer to the EOP Rx descriptor
  * @skb: pointer to current skb being populated
- * @ptype: the packet type decoded by hardware
  *
  * This function checks the ring, descriptor, and packet information in
  * order to populate the hash, checksum, VLAN, protocol, and
@@ -216,8 +225,10 @@ ice_ptp_rx_hwts_to_skb(struct ice_rx_ring *rx_ring,
 void
 ice_process_skb_fields(struct ice_rx_ring *rx_ring,
                       union ice_32b_rx_flex_desc *rx_desc,
-                      struct sk_buff *skb, u16 ptype)
+                      struct sk_buff *skb)
 {
+       u16 ptype = ice_get_ptype(rx_desc);
+
        ice_rx_hash_to_skb(rx_ring, rx_desc, skb, ptype);
 
        /* modifies the skb - consumes the enet header */
index 115969ecdf7b97bbe0603cbb542bac152f28f5f2..e1d49e1235b3df04a32f5f6127648427a0691653 100644 (file)
@@ -148,7 +148,7 @@ void ice_release_rx_desc(struct ice_rx_ring *rx_ring, u16 val);
 void
 ice_process_skb_fields(struct ice_rx_ring *rx_ring,
                       union ice_32b_rx_flex_desc *rx_desc,
-                      struct sk_buff *skb, u16 ptype);
+                      struct sk_buff *skb);
 void
 ice_receive_skb(struct ice_rx_ring *rx_ring, struct sk_buff *skb, u16 vlan_tag);
 #endif /* !_ICE_TXRX_LIB_H_ */
index 99954508184f9d6d8aa51235ace5af76ae4e9ac6..906e383e864a06d1cee08fe07a19c5e045409fb7 100644 (file)
@@ -864,7 +864,6 @@ int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget)
                struct sk_buff *skb;
                u16 stat_err_bits;
                u16 vlan_tag = 0;
-               u16 rx_ptype;
 
                rx_desc = ICE_RX_DESC(rx_ring, ntc);
 
@@ -944,10 +943,7 @@ construct_skb:
 
                vlan_tag = ice_get_vlan_tag_from_rx_desc(rx_desc);
 
-               rx_ptype = le16_to_cpu(rx_desc->wb.ptype_flex_flags0) &
-                                      ICE_RX_FLEX_DESC_PTYPE_M;
-
-               ice_process_skb_fields(rx_ring, rx_desc, skb, rx_ptype);
+               ice_process_skb_fields(rx_ring, rx_desc, skb);
                ice_receive_skb(rx_ring, skb, vlan_tag);
        }