From: Andre Guedes <andre.guedes@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH v2 7/9] igc: Replace IGC_TX_FLAGS_XDP flag by an enum
Date: Wed, 23 Dec 2020 12:37:03 -0800 [thread overview]
Message-ID: <20201223203705.78705-8-andre.guedes@intel.com> (raw)
In-Reply-To: <20201223203705.78705-1-andre.guedes@intel.com>
Up to this point, tx buffers are associated with either a skb or a xdpf,
and the IGC_TX_FLAGS_XDP flag was enough to distinguish between these
two case. However, with upcoming patches that will add AF_XDP zero-copy
support, a third case will be introduced so this flag-based approach
won't fit well.
In preparation to land AF_XDP zero-copy support, replace the
IGC_TX_FLAGS_XDP flag by an enum which will be extended once zero-copy
support is introduced to the driver.
Signed-off-by: Andre Guedes <andre.guedes@intel.com>
---
drivers/net/ethernet/intel/igc/igc.h | 8 +++++--
drivers/net/ethernet/intel/igc/igc_main.c | 27 ++++++++++++++++++-----
2 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h
index 1ce72d65d37e..9331b96e8c53 100644
--- a/drivers/net/ethernet/intel/igc/igc.h
+++ b/drivers/net/ethernet/intel/igc/igc.h
@@ -376,8 +376,6 @@ enum igc_tx_flags {
/* olinfo flags */
IGC_TX_FLAGS_IPV4 = 0x10,
IGC_TX_FLAGS_CSUM = 0x20,
-
- IGC_TX_FLAGS_XDP = 0x100,
};
enum igc_boards {
@@ -394,12 +392,18 @@ enum igc_boards {
#define TXD_USE_COUNT(S) DIV_ROUND_UP((S), IGC_MAX_DATA_PER_TXD)
#define DESC_NEEDED (MAX_SKB_FRAGS + 4)
+enum igc_tx_buffer_type {
+ IGC_TX_BUFFER_TYPE_SKB,
+ IGC_TX_BUFFER_TYPE_XDP,
+};
+
/* wrapper around a pointer to a socket buffer,
* so a DMA handle can be stored along with the buffer
*/
struct igc_tx_buffer {
union igc_adv_tx_desc *next_to_watch;
unsigned long time_stamp;
+ enum igc_tx_buffer_type type;
union {
struct sk_buff *skb;
struct xdp_frame *xdpf;
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index 815ceaba6f89..e092c0d7c375 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -191,10 +191,18 @@ static void igc_clean_tx_ring(struct igc_ring *tx_ring)
while (i != tx_ring->next_to_use) {
union igc_adv_tx_desc *eop_desc, *tx_desc;
- if (tx_buffer->tx_flags & IGC_TX_FLAGS_XDP)
+ switch (tx_buffer->type) {
+ case IGC_TX_BUFFER_TYPE_XDP:
xdp_return_frame(tx_buffer->xdpf);
- else
+ break;
+ case IGC_TX_BUFFER_TYPE_SKB:
dev_kfree_skb_any(tx_buffer->skb);
+ break;
+ default:
+ netdev_warn_once(tx_ring->netdev,
+ "Unknown tx buffer type\n");
+ break;
+ }
igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
@@ -1372,6 +1380,7 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,
/* record the location of the first descriptor for this packet */
first = &tx_ring->tx_buffer_info[tx_ring->next_to_use];
+ first->type = IGC_TX_BUFFER_TYPE_SKB;
first->skb = skb;
first->bytecount = skb->len;
first->gso_segs = 1;
@@ -1951,8 +1960,8 @@ static int igc_xdp_init_tx_buffer(struct igc_tx_buffer *buffer,
return -ENOMEM;
}
+ buffer->type = IGC_TX_BUFFER_TYPE_XDP;
buffer->xdpf = xdpf;
- buffer->tx_flags = IGC_TX_FLAGS_XDP;
buffer->protocol = 0;
buffer->bytecount = xdpf->len;
buffer->gso_segs = 1;
@@ -2316,10 +2325,18 @@ static bool igc_clean_tx_irq(struct igc_q_vector *q_vector, int napi_budget)
total_bytes += tx_buffer->bytecount;
total_packets += tx_buffer->gso_segs;
- if (tx_buffer->tx_flags & IGC_TX_FLAGS_XDP)
+ switch (tx_buffer->type) {
+ case IGC_TX_BUFFER_TYPE_XDP:
xdp_return_frame(tx_buffer->xdpf);
- else
+ break;
+ case IGC_TX_BUFFER_TYPE_SKB:
napi_consume_skb(tx_buffer->skb, napi_budget);
+ break;
+ default:
+ netdev_warn_once(tx_ring->netdev,
+ "Unknown tx buffer type\n");
+ break;
+ }
igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
--
2.29.2
next prev parent reply other threads:[~2020-12-23 20:37 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-23 20:36 [Intel-wired-lan] [PATCH v2 0/9] igc: Add support for AF_XDP zero-copy Andre Guedes
2020-12-23 20:36 ` [Intel-wired-lan] [PATCH v2 1/9] igc: Move igc_xdp_is_enabled() Andre Guedes
2020-12-23 20:36 ` [Intel-wired-lan] [PATCH v2 2/9] igc: Refactor igc_xdp_run_prog() Andre Guedes
2020-12-23 20:36 ` [Intel-wired-lan] [PATCH v2 3/9] igc: Refactor igc_clean_rx_ring() Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 4/9] igc: Refactor XDP rxq info registration Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 5/9] igc: Introduce tx/rx stats helpers Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 6/9] igc: Introduce igc_unmap_tx_buffer() helper Andre Guedes
2020-12-23 20:37 ` Andre Guedes [this message]
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 8/9] igc: Enable RX via AF_XDP zero-copy Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 9/9] igc: Enable TX " Andre Guedes
2021-01-05 17:48 ` [Intel-wired-lan] [PATCH v2 0/9] igc: Add support for " Maciej Fijalkowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201223203705.78705-8-andre.guedes@intel.com \
--to=andre.guedes@intel.com \
--cc=intel-wired-lan@osuosl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.