Commit 23ec9749 authored by David Arinzon's avatar David Arinzon Committed by Jakub Kicinski

net: ena: Introduce total_tx_size field in ena_tx_buffer struct

To avoid de-referencing skb or xdp_frame when we poll for TX completion
(where they might not be in the cache), save the total TX packet size in
the ena_tx_buffer object representing the packet.

Also the 'print_once' field's type was changed from u32 to u8 to allow
adding the 'total_tx_size' without changing the total size of the
struct.
Signed-off-by: default avatarShay Agroskin <shayagr@amazon.com>
Signed-off-by: default avatarDavid Arinzon <darinzon@amazon.com>
Link: https://lore.kernel.org/r/20240101190855.18739-5-darinzon@amazon.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 009b3876
...@@ -130,6 +130,7 @@ int ena_xmit_common(struct ena_adapter *adapter, ...@@ -130,6 +130,7 @@ int ena_xmit_common(struct ena_adapter *adapter,
u64_stats_update_end(&ring->syncp); u64_stats_update_end(&ring->syncp);
tx_info->tx_descs = nb_hw_desc; tx_info->tx_descs = nb_hw_desc;
tx_info->total_tx_size = bytes;
tx_info->last_jiffies = jiffies; tx_info->last_jiffies = jiffies;
tx_info->print_once = 0; tx_info->print_once = 0;
...@@ -842,7 +843,7 @@ static int ena_clean_tx_irq(struct ena_ring *tx_ring, u32 budget) ...@@ -842,7 +843,7 @@ static int ena_clean_tx_irq(struct ena_ring *tx_ring, u32 budget)
"tx_poll: q %d skb %p completed\n", tx_ring->qid, "tx_poll: q %d skb %p completed\n", tx_ring->qid,
skb); skb);
tx_bytes += skb->len; tx_bytes += tx_info->total_tx_size;
dev_kfree_skb(skb); dev_kfree_skb(skb);
tx_pkts++; tx_pkts++;
total_done += tx_info->tx_descs; total_done += tx_info->tx_descs;
......
...@@ -145,12 +145,14 @@ struct ena_tx_buffer { ...@@ -145,12 +145,14 @@ struct ena_tx_buffer {
/* num of buffers used by this skb */ /* num of buffers used by this skb */
u32 num_of_bufs; u32 num_of_bufs;
/* Total size of all buffers in bytes */
u32 total_tx_size;
/* Indicate if bufs[0] map the linear data of the skb. */ /* Indicate if bufs[0] map the linear data of the skb. */
u8 map_linear_data; u8 map_linear_data;
/* Used for detect missing tx packets to limit the number of prints */ /* Used for detect missing tx packets to limit the number of prints */
u32 print_once; u8 print_once;
/* Save the last jiffies to detect missing tx packets /* Save the last jiffies to detect missing tx packets
* *
* sets to non zero value on ena_start_xmit and set to zero on * sets to non zero value on ena_start_xmit and set to zero on
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment