Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f2908e7
ixgbevf: remove legacy Rx
walking-machine Jun 23, 2025
d7bf74b
ixgbevf: do not share pages between packets
walking-machine Jun 24, 2025
0cb83cd
ixgbevf: use libeth in Rx processing
walking-machine Jul 9, 2025
93e53ab
ixgbevf: support XDP multi-buffer on Rx path
walking-machine Sep 2, 2025
60a8d27
ixgbevf: XDP_TX in multi-buffer through libeth
walking-machine Sep 9, 2025
57735ac
ixgbevf: support XDP_REDIRECT and .ndo_xdp_xmit
walking-machine Sep 22, 2025
d6ec774
ixgbevf: add pseudo header split
nwochtma Sep 19, 2025
57d29b3
ixgbevf: reconfigure page pool when reallocating buffers
walking-machine Nov 25, 2025
e3676d7
ixgbevf: allow changing MTU when XDP program is attached
walking-machine Jan 8, 2026
1160e99
ixgbevf: move skb-filling code to a header
walking-machine Oct 24, 2025
ad388e4
ixgbevf: implement AF_XDP ZC initialization
walking-machine Oct 27, 2025
a0ee7f6
ixgbevf: implement AF_XDP zero-copy Tx
walking-machine Oct 27, 2025
bcdbbdd
ixgbevf: implement AF_XDP zero-copy Rx
walking-machine Oct 27, 2025
e828d3a
ixgbevf: implement .ndo_xsk_wakeup() and set features
walking-machine Oct 27, 2025
3176c41
ixgbevf: multi-buffer AF_XDP Tx
walking-machine Dec 19, 2025
c7ea271
[WiP/TMP] ixgbevf: get and set channels via ethtool
walking-machine Apr 8, 2026
873a6f7
libeth: add unprep callback for XDP Tx flushing
walking-machine Apr 3, 2026
a894932
libeth: make sqe->priv set size
walking-machine Apr 8, 2026
914cfc2
libeth: add option to force XDP queue sharing when initializing bulk
walking-machine May 19, 2026
03390f8
ixgbevf: use libeth_tx for sending skbs
walking-machine Apr 8, 2026
ac6e350
fixup! ixgbevf: use libeth_tx for sending skbs
walking-machine Jul 1, 2026
724dd0a
fixup! ixgbevf: use libeth_tx for sending skbs
walking-machine May 12, 2026
31c1176
ixgbevf: support XDP and skb transmission from the same queue
walking-machine Jul 1, 2026
32e0787
[TMP] ixgbevf: report timeout and force shared queues
walking-machine May 20, 2026
f67df55
libeth: xsk: do not flush bulk, if it contains no frames
walking-machine Jul 3, 2026
6553904
fixup! libeth: add option to force XDP queue sharing when initializin…
walking-machine Jul 3, 2026
4186f69
fixup! ixgbevf: implement AF_XDP ZC initialization
walking-machine Jul 3, 2026
21dc491
ixgbevf: support AF_XDP ZC on shared queues
walking-machine Jul 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions drivers/net/ethernet/intel/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ config IXGBE_IPSEC
config IXGBEVF
tristate "Intel(R) 10GbE PCI Express Virtual Function Ethernet support"
depends on PCI_MSI
select LIBETH_XDP
help
This driver supports Intel(R) PCI Express virtual functions for the
Intel(R) ixgbe driver. For more information on how to identify your
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/ethernet/intel/ixgbevf/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@

obj-$(CONFIG_IXGBEVF) += ixgbevf.o

ixgbevf-y := vf.o mbx.o ethtool.o ixgbevf_main.o
ixgbevf-y := vf.o mbx.o ethtool.o ixgbevf_main.o ixgbevf_xsk.o
ixgbevf-$(CONFIG_IXGBEVF_IPSEC) += ipsec.o
2 changes: 1 addition & 1 deletion drivers/net/ethernet/intel/ixgbevf/defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ typedef u32 ixgbe_link_speed;
#define IXGBE_PSRTYPE_L2HDR 0x00001000

/* SRRCTL bit definitions */
#define IXGBE_SRRCTL_BSIZEPKT_SHIFT 10 /* so many KBs */
#define IXGBE_SRRCTL_BSIZEPKT_STEP 1024
#define IXGBE_SRRCTL_RDMTS_SHIFT 22
#define IXGBE_SRRCTL_RDMTS_MASK 0x01C00000
#define IXGBE_SRRCTL_DROP_EN 0x10000000
Expand Down
89 changes: 56 additions & 33 deletions drivers/net/ethernet/intel/ixgbevf/ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,6 @@ static const char ixgbe_gstrings_test[][ETH_GSTRING_LEN] = {

#define IXGBEVF_TEST_LEN (sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN)

static const char ixgbevf_priv_flags_strings[][ETH_GSTRING_LEN] = {
#define IXGBEVF_PRIV_FLAGS_LEGACY_RX BIT(0)
"legacy-rx",
};

#define IXGBEVF_PRIV_FLAGS_STR_LEN ARRAY_SIZE(ixgbevf_priv_flags_strings)

static int ixgbevf_get_link_ksettings(struct net_device *netdev,
struct ethtool_link_ksettings *cmd)
{
Expand Down Expand Up @@ -216,8 +209,6 @@ static void ixgbevf_get_drvinfo(struct net_device *netdev,
strscpy(drvinfo->driver, ixgbevf_driver_name, sizeof(drvinfo->driver));
strscpy(drvinfo->bus_info, pci_name(adapter->pdev),
sizeof(drvinfo->bus_info));

drvinfo->n_priv_flags = IXGBEVF_PRIV_FLAGS_STR_LEN;
}

static void ixgbevf_get_ringparam(struct net_device *netdev,
Expand Down Expand Up @@ -409,8 +400,6 @@ static int ixgbevf_get_sset_count(struct net_device *netdev, int stringset)
return IXGBEVF_TEST_LEN;
case ETH_SS_STATS:
return IXGBEVF_STATS_LEN;
case ETH_SS_PRIV_FLAGS:
return IXGBEVF_PRIV_FLAGS_STR_LEN;
default:
return -EINVAL;
}
Expand Down Expand Up @@ -538,10 +527,6 @@ static void ixgbevf_get_strings(struct net_device *netdev, u32 stringset,
p += ETH_GSTRING_LEN;
}
break;
case ETH_SS_PRIV_FLAGS:
memcpy(data, ixgbevf_priv_flags_strings,
IXGBEVF_PRIV_FLAGS_STR_LEN * ETH_GSTRING_LEN);
break;
}
}

Expand Down Expand Up @@ -931,33 +916,71 @@ static int ixgbevf_get_rxfh(struct net_device *netdev,
return err;
}

static u32 ixgbevf_get_priv_flags(struct net_device *netdev)
static void ixgbevf_get_reported_q_num(u32 rx, u32 tx, u32 *dst_combined,
u32 *dst_rx, u32 *dst_tx)
{
rx = min_t(u32, rx, num_online_cpus());
*dst_combined = min_t(u32, rx, tx);
if (rx > tx) {
*dst_rx = rx - tx;
*dst_tx = 0;
} else {
*dst_tx = tx - rx;
*dst_rx = 0;
}
}

static void ixgbevf_get_channels(struct net_device *netdev,
struct ethtool_channels *ch)
{
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
u32 priv_flags = 0;

if (adapter->flags & IXGBEVF_FLAGS_LEGACY_RX)
priv_flags |= IXGBEVF_PRIV_FLAGS_LEGACY_RX;
ixgbevf_get_reported_q_num(adapter->num_rx_queues,
adapter->num_tx_queues,
&ch->combined_count, &ch->rx_count,
&ch->tx_count);

return priv_flags;
ixgbevf_get_reported_q_num(adapter->q_caps.max_rxqs,
adapter->q_caps.max_txqs,
&ch->max_combined, &ch->max_rx,
&ch->max_tx);

ch->max_other = NON_Q_VECTORS;
ch->other_count = NON_Q_VECTORS;
}

static int ixgbevf_set_priv_flags(struct net_device *netdev, u32 priv_flags)
static int ixgbevf_set_channels(struct net_device *netdev,
struct ethtool_channels *ch)
{
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
unsigned int flags = adapter->flags;
u32 num_req = ch->combined_count;
bool was_up;
int err = 0;

flags &= ~IXGBEVF_FLAGS_LEGACY_RX;
if (priv_flags & IXGBEVF_PRIV_FLAGS_LEGACY_RX)
flags |= IXGBEVF_FLAGS_LEGACY_RX;
/* Do not change queue number if DCB is enabled */
if (adapter->q_caps.num_tcs > 1)
return -EOPNOTSUPP;

if (flags != adapter->flags) {
adapter->flags = flags;
if (ch->rx_count || ch->tx_count || ch->other_count != NON_Q_VECTORS)
return -EINVAL;

/* reset interface to repopulate queues */
if (netif_running(netdev))
ixgbevf_reinit_locked(adapter);
}
if (num_req == adapter->num_rx_queues &&
num_req == adapter->num_tx_queues)
return 0;

adapter->num_req_qpairs = num_req;

was_up = netif_running(netdev);
if (was_up)
ixgbevf_close(netdev);

ixgbevf_clear_interrupt_scheme(adapter);
err = ixgbevf_init_interrupt_scheme(adapter);
if (err)
return err;

if (was_up)
ixgbevf_open(netdev);

return 0;
}
Expand All @@ -984,8 +1007,8 @@ static const struct ethtool_ops ixgbevf_ethtool_ops = {
.get_rxfh_key_size = ixgbevf_get_rxfh_key_size,
.get_rxfh = ixgbevf_get_rxfh,
.get_link_ksettings = ixgbevf_get_link_ksettings,
.get_priv_flags = ixgbevf_get_priv_flags,
.set_priv_flags = ixgbevf_set_priv_flags,
.get_channels = ixgbevf_get_channels,
.set_channels = ixgbevf_set_channels,
};

void ixgbevf_set_ethtool_ops(struct net_device *netdev)
Expand Down
8 changes: 4 additions & 4 deletions drivers/net/ethernet/intel/ixgbevf/ipsec.c
Original file line number Diff line number Diff line change
Expand Up @@ -450,11 +450,11 @@ static const struct xfrmdev_ops ixgbevf_xfrmdev_ops = {
* @first: current data packet
* @itd: ipsec Tx data for later use in building context descriptor
**/
int ixgbevf_ipsec_tx(struct ixgbevf_ring *tx_ring,
struct ixgbevf_tx_buffer *first,
int ixgbevf_ipsec_tx(struct ixgbevf_ring *tx_ring, struct libeth_sqe *first,
struct ixgbevf_ipsec_tx_data *itd)
{
struct ixgbevf_adapter *adapter = netdev_priv(tx_ring->netdev);
struct ixgbevf_skb_sqe_priv *sqe_priv = (void *)&first->priv;
struct ixgbevf_ipsec *ipsec = adapter->ipsec;
struct xfrm_state *xs;
struct sec_path *sp;
Expand Down Expand Up @@ -491,12 +491,12 @@ int ixgbevf_ipsec_tx(struct ixgbevf_ring *tx_ring,

itd->pfsa = tsa->pfsa - IXGBE_IPSEC_BASE_TX_INDEX;

first->tx_flags |= IXGBE_TX_FLAGS_IPSEC | IXGBE_TX_FLAGS_CSUM;
sqe_priv->tx_flags |= IXGBE_TX_FLAGS_IPSEC | IXGBE_TX_FLAGS_CSUM;

if (xs->id.proto == IPPROTO_ESP) {
itd->flags |= IXGBE_ADVTXD_TUCMD_IPSEC_TYPE_ESP |
IXGBE_ADVTXD_TUCMD_L4T_TCP;
if (first->protocol == htons(ETH_P_IP))
if (sqe_priv->protocol == htons(ETH_P_IP))
itd->flags |= IXGBE_ADVTXD_TUCMD_IPV4;

/* The actual trailer length is authlen (16 bytes) plus
Expand Down
Loading