* [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration
@ 2023-03-07 14:53 Lorenzo Bianconi
2023-03-07 14:53 ` [PATCH net-next 1/8] tools: ynl: fix render-max for flags definition Lorenzo Bianconi
` (7 more replies)
0 siblings, 8 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:53 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
Take into account possible NIC configuration changes (e.g. LRO or tx/rx queues
reconfiguration) setting device xdp_features flag.
Introduce xdp_set_features_flag utility routine.
Lorenzo Bianconi (7):
tools: ynl: fix render-max for flags definition
tools: ynl: fix get_mask utility routine
xdp: add xdp_set_features_flag utility routine
net: thunderx: take into account xdp_features setting tx/rx queues
net: ena: take into account xdp_features setting tx/rx queues
veth: take into account device reconfiguration for xdp_features flag
net/mlx5e: take into account device reconfiguration for xdp_features
flag
Matteo Croce (1):
mvpp2: take care of xdp_features when reconfiguring queues
Documentation/netlink/specs/netdev.yaml | 1 +
drivers/net/ethernet/amazon/ena/ena_ethtool.c | 15 +++++--
drivers/net/ethernet/amazon/ena/ena_netdev.c | 6 ++-
.../ethernet/cavium/thunder/nicvf_ethtool.c | 17 ++++---
.../net/ethernet/cavium/thunder/nicvf_main.c | 4 +-
.../net/ethernet/marvell/mvpp2/mvpp2_main.c | 15 +++++--
drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 +
.../ethernet/mellanox/mlx5/core/en_ethtool.c | 10 ++++-
.../net/ethernet/mellanox/mlx5/core/en_main.c | 45 ++++++++++++++++---
.../net/ethernet/mellanox/mlx5/core/en_rep.c | 3 ++
drivers/net/veth.c | 42 +++++++++++++++--
include/net/xdp.h | 11 +++++
include/uapi/linux/netdev.h | 2 +
net/core/xdp.c | 26 ++++++++---
tools/include/uapi/linux/netdev.h | 2 +
tools/net/ynl/ynl-gen-c.py | 17 ++++---
16 files changed, 176 insertions(+), 41 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH net-next 1/8] tools: ynl: fix render-max for flags definition
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
@ 2023-03-07 14:53 ` Lorenzo Bianconi
2023-03-08 8:06 ` Jakub Kicinski
2023-03-07 14:53 ` [PATCH net-next 2/8] tools: ynl: fix get_mask utility routine Lorenzo Bianconi
` (6 subsequent siblings)
7 siblings, 1 reply; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:53 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
Properly manage render-max property for flags definition type
introducing mask value and setting it to (last_element << 1) - 1
instead of adding max value set to last_element + 1
Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
tools/net/ynl/ynl-gen-c.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
index 274e9c566f61..f2e41dd962d4 100755
--- a/tools/net/ynl/ynl-gen-c.py
+++ b/tools/net/ynl/ynl-gen-c.py
@@ -1995,9 +1995,14 @@ def render_uapi(family, cw):
if const.get('render-max', False):
cw.nl()
- max_name = c_upper(name_pfx + 'max')
- cw.p('__' + max_name + ',')
- cw.p(max_name + ' = (__' + max_name + ' - 1)')
+ if const['type'] == 'flags':
+ max_name = c_upper(name_pfx + 'mask')
+ max_val = f' = {(entry.user_value() << 1) - 1},'
+ cw.p(max_name + max_val)
+ else:
+ max_name = c_upper(name_pfx + 'max')
+ cw.p('__' + max_name + ',')
+ cw.p(max_name + ' = (__' + max_name + ' - 1)')
cw.block_end(line=';')
cw.nl()
elif const['type'] == 'const':
--
2.39.2
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH net-next 2/8] tools: ynl: fix get_mask utility routine
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
2023-03-07 14:53 ` [PATCH net-next 1/8] tools: ynl: fix render-max for flags definition Lorenzo Bianconi
@ 2023-03-07 14:53 ` Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 3/8] xdp: add xdp_set_features_flag " Lorenzo Bianconi
` (5 subsequent siblings)
7 siblings, 0 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:53 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
Fix get_mask utility routine in order to take into account possible gaps
in the elements list.
Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
tools/net/ynl/ynl-gen-c.py | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
index f2e41dd962d4..0d6df9414aa9 100755
--- a/tools/net/ynl/ynl-gen-c.py
+++ b/tools/net/ynl/ynl-gen-c.py
@@ -652,10 +652,8 @@ class EnumSet:
def get_mask(self):
mask = 0
- idx = self.yaml.get('value-start', 0)
- for _ in self.entry_list:
- mask |= 1 << idx
- idx += 1
+ for e in self.entry_list:
+ mask += e.user_value()
return mask
--
2.39.2
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH net-next 3/8] xdp: add xdp_set_features_flag utility routine
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
2023-03-07 14:53 ` [PATCH net-next 1/8] tools: ynl: fix render-max for flags definition Lorenzo Bianconi
2023-03-07 14:53 ` [PATCH net-next 2/8] tools: ynl: fix get_mask utility routine Lorenzo Bianconi
@ 2023-03-07 14:54 ` Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 4/8] net: thunderx: take into account xdp_features setting tx/rx queues Lorenzo Bianconi
` (4 subsequent siblings)
7 siblings, 0 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:54 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
Introduce xdp_set_features_flag utility routine in order to update
dynamically xdp_features according to the dynamic hw configuration via
ethtool (e.g. changing number of hw rx/tx queues).
Add xdp_clear_features_flag() in order to clear all xdp_feature flag.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
Documentation/netlink/specs/netdev.yaml | 1 +
include/net/xdp.h | 11 +++++++++++
include/uapi/linux/netdev.h | 2 ++
net/core/xdp.c | 26 ++++++++++++++++++-------
tools/include/uapi/linux/netdev.h | 2 ++
tools/net/ynl/ynl-gen-c.py | 2 +-
6 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/Documentation/netlink/specs/netdev.yaml b/Documentation/netlink/specs/netdev.yaml
index cffef09729f1..7e4a5b4e7162 100644
--- a/Documentation/netlink/specs/netdev.yaml
+++ b/Documentation/netlink/specs/netdev.yaml
@@ -7,6 +7,7 @@ definitions:
-
type: flags
name: xdp-act
+ render-max: true
entries:
-
name: basic
diff --git a/include/net/xdp.h b/include/net/xdp.h
index d517bfac937b..41c57b8b1671 100644
--- a/include/net/xdp.h
+++ b/include/net/xdp.h
@@ -428,12 +428,18 @@ MAX_XDP_METADATA_KFUNC,
#ifdef CONFIG_NET
u32 bpf_xdp_metadata_kfunc_id(int id);
bool bpf_dev_bound_kfunc_id(u32 btf_id);
+void xdp_set_features_flag(struct net_device *dev, xdp_features_t val);
void xdp_features_set_redirect_target(struct net_device *dev, bool support_sg);
void xdp_features_clear_redirect_target(struct net_device *dev);
#else
static inline u32 bpf_xdp_metadata_kfunc_id(int id) { return 0; }
static inline bool bpf_dev_bound_kfunc_id(u32 btf_id) { return false; }
+static inline void
+xdp_set_features_flag(struct net_device *dev, xdp_features_t val)
+{
+}
+
static inline void
xdp_features_set_redirect_target(struct net_device *dev, bool support_sg)
{
@@ -445,4 +451,9 @@ xdp_features_clear_redirect_target(struct net_device *dev)
}
#endif
+static inline void xdp_clear_features_flag(struct net_device *dev)
+{
+ xdp_set_features_flag(dev, 0);
+}
+
#endif /* __LINUX_NET_XDP_H__ */
diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h
index 588391447bfb..497cfc93f2e3 100644
--- a/include/uapi/linux/netdev.h
+++ b/include/uapi/linux/netdev.h
@@ -33,6 +33,8 @@ enum netdev_xdp_act {
NETDEV_XDP_ACT_HW_OFFLOAD = 16,
NETDEV_XDP_ACT_RX_SG = 32,
NETDEV_XDP_ACT_NDO_XMIT_SG = 64,
+
+ NETDEV_XDP_ACT_MASK = 127,
};
enum {
diff --git a/net/core/xdp.c b/net/core/xdp.c
index 8c92fc553317..87e654b7d06c 100644
--- a/net/core/xdp.c
+++ b/net/core/xdp.c
@@ -774,20 +774,32 @@ static int __init xdp_metadata_init(void)
}
late_initcall(xdp_metadata_init);
-void xdp_features_set_redirect_target(struct net_device *dev, bool support_sg)
+void xdp_set_features_flag(struct net_device *dev, xdp_features_t val)
{
- dev->xdp_features |= NETDEV_XDP_ACT_NDO_XMIT;
- if (support_sg)
- dev->xdp_features |= NETDEV_XDP_ACT_NDO_XMIT_SG;
+ val &= NETDEV_XDP_ACT_MASK;
+ if (dev->xdp_features == val)
+ return;
+ dev->xdp_features = val;
call_netdevice_notifiers(NETDEV_XDP_FEAT_CHANGE, dev);
}
+EXPORT_SYMBOL_GPL(xdp_set_features_flag);
+
+void xdp_features_set_redirect_target(struct net_device *dev, bool support_sg)
+{
+ xdp_features_t val = (dev->xdp_features | NETDEV_XDP_ACT_NDO_XMIT);
+
+ if (support_sg)
+ val |= NETDEV_XDP_ACT_NDO_XMIT_SG;
+ xdp_set_features_flag(dev, val);
+}
EXPORT_SYMBOL_GPL(xdp_features_set_redirect_target);
void xdp_features_clear_redirect_target(struct net_device *dev)
{
- dev->xdp_features &= ~(NETDEV_XDP_ACT_NDO_XMIT |
- NETDEV_XDP_ACT_NDO_XMIT_SG);
- call_netdevice_notifiers(NETDEV_XDP_FEAT_CHANGE, dev);
+ xdp_features_t val = dev->xdp_features;
+
+ val &= ~(NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_NDO_XMIT_SG);
+ xdp_set_features_flag(dev, val);
}
EXPORT_SYMBOL_GPL(xdp_features_clear_redirect_target);
diff --git a/tools/include/uapi/linux/netdev.h b/tools/include/uapi/linux/netdev.h
index 588391447bfb..497cfc93f2e3 100644
--- a/tools/include/uapi/linux/netdev.h
+++ b/tools/include/uapi/linux/netdev.h
@@ -33,6 +33,8 @@ enum netdev_xdp_act {
NETDEV_XDP_ACT_HW_OFFLOAD = 16,
NETDEV_XDP_ACT_RX_SG = 32,
NETDEV_XDP_ACT_NDO_XMIT_SG = 64,
+
+ NETDEV_XDP_ACT_MASK = 127,
};
enum {
diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
index 0d6df9414aa9..feb86f043e3b 100755
--- a/tools/net/ynl/ynl-gen-c.py
+++ b/tools/net/ynl/ynl-gen-c.py
@@ -1995,7 +1995,7 @@ def render_uapi(family, cw):
cw.nl()
if const['type'] == 'flags':
max_name = c_upper(name_pfx + 'mask')
- max_val = f' = {(entry.user_value() << 1) - 1},'
+ max_val = f' = {enum.get_mask()},'
cw.p(max_name + max_val)
else:
max_name = c_upper(name_pfx + 'max')
--
2.39.2
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH net-next 4/8] net: thunderx: take into account xdp_features setting tx/rx queues
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
` (2 preceding siblings ...)
2023-03-07 14:54 ` [PATCH net-next 3/8] xdp: add xdp_set_features_flag " Lorenzo Bianconi
@ 2023-03-07 14:54 ` Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 5/8] net: ena: " Lorenzo Bianconi
` (3 subsequent siblings)
7 siblings, 0 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:54 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
thunderx nic allows xdp just if enough hw queues are available for XDP.
Take into account queues configuration setting xdp_features.
Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
.../net/ethernet/cavium/thunder/nicvf_ethtool.c | 17 +++++++++++------
.../net/ethernet/cavium/thunder/nicvf_main.c | 4 +++-
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_ethtool.c b/drivers/net/ethernet/cavium/thunder/nicvf_ethtool.c
index e5c71f907852..d8d71bf97983 100644
--- a/drivers/net/ethernet/cavium/thunder/nicvf_ethtool.c
+++ b/drivers/net/ethernet/cavium/thunder/nicvf_ethtool.c
@@ -735,12 +735,17 @@ static int nicvf_set_channels(struct net_device *dev,
if (channel->tx_count > nic->max_queues)
return -EINVAL;
- if (nic->xdp_prog &&
- ((channel->tx_count + channel->rx_count) > nic->max_queues)) {
- netdev_err(nic->netdev,
- "XDP mode, RXQs + TXQs > Max %d\n",
- nic->max_queues);
- return -EINVAL;
+ if (channel->tx_count + channel->rx_count > nic->max_queues) {
+ if (nic->xdp_prog) {
+ netdev_err(nic->netdev,
+ "XDP mode, RXQs + TXQs > Max %d\n",
+ nic->max_queues);
+ return -EINVAL;
+ }
+
+ xdp_clear_features_flag(nic->netdev);
+ } else if (!pass1_silicon(nic->pdev)) {
+ xdp_set_features_flag(dev, NETDEV_XDP_ACT_BASIC);
}
if (if_up)
diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
index 8b25313c7f6b..eff350e0bc2a 100644
--- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
+++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
@@ -2218,7 +2218,9 @@ static int nicvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
netdev->netdev_ops = &nicvf_netdev_ops;
netdev->watchdog_timeo = NICVF_TX_TIMEOUT;
- netdev->xdp_features = NETDEV_XDP_ACT_BASIC;
+ if (!pass1_silicon(nic->pdev) &&
+ nic->rx_queues + nic->tx_queues <= nic->max_queues)
+ netdev->xdp_features = NETDEV_XDP_ACT_BASIC;
/* MTU range: 64 - 9200 */
netdev->min_mtu = NIC_HW_MIN_FRS;
--
2.39.2
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH net-next 5/8] net: ena: take into account xdp_features setting tx/rx queues
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
` (3 preceding siblings ...)
2023-03-07 14:54 ` [PATCH net-next 4/8] net: thunderx: take into account xdp_features setting tx/rx queues Lorenzo Bianconi
@ 2023-03-07 14:54 ` Lorenzo Bianconi
2023-03-08 10:25 ` Shay Agroskin
2023-03-07 14:54 ` [PATCH net-next 6/8] veth: take into account device reconfiguration for xdp_features flag Lorenzo Bianconi
` (2 subsequent siblings)
7 siblings, 1 reply; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:54 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
ena nic allows xdp just if enough hw queues are available for XDP.
Take into account queues configuration setting xdp_features.
Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/amazon/ena/ena_ethtool.c | 15 ++++++++++++---
drivers/net/ethernet/amazon/ena/ena_netdev.c | 6 ++++--
2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_ethtool.c b/drivers/net/ethernet/amazon/ena/ena_ethtool.c
index 8da79eedc057..1d4f2f4d10f2 100644
--- a/drivers/net/ethernet/amazon/ena/ena_ethtool.c
+++ b/drivers/net/ethernet/amazon/ena/ena_ethtool.c
@@ -850,11 +850,20 @@ static int ena_set_channels(struct net_device *netdev,
struct ena_adapter *adapter = netdev_priv(netdev);
u32 count = channels->combined_count;
/* The check for max value is already done in ethtool */
- if (count < ENA_MIN_NUM_IO_QUEUES ||
- (ena_xdp_present(adapter) &&
- !ena_xdp_legal_queue_count(adapter, count)))
+ if (count < ENA_MIN_NUM_IO_QUEUES)
return -EINVAL;
+ if (!ena_xdp_legal_queue_count(adapter, count)) {
+ if (ena_xdp_present(adapter))
+ return -EINVAL;
+
+ xdp_clear_features_flag(netdev);
+ } else {
+ xdp_set_features_flag(netdev,
+ NETDEV_XDP_ACT_BASIC |
+ NETDEV_XDP_ACT_REDIRECT);
+ }
+
return ena_update_queue_count(adapter, count);
}
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index d3999db7c6a2..cbfe7f977270 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -4105,8 +4105,6 @@ static void ena_set_conf_feat_params(struct ena_adapter *adapter,
/* Set offload features */
ena_set_dev_offloads(feat, netdev);
- netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT;
-
adapter->max_mtu = feat->dev_attr.max_mtu;
netdev->max_mtu = adapter->max_mtu;
netdev->min_mtu = ENA_MIN_MTU;
@@ -4393,6 +4391,10 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
ena_config_debug_area(adapter);
+ if (ena_xdp_legal_queue_count(adapter, adapter->num_io_queues))
+ netdev->xdp_features = NETDEV_XDP_ACT_BASIC |
+ NETDEV_XDP_ACT_REDIRECT;
+
memcpy(adapter->netdev->perm_addr, adapter->mac_addr, netdev->addr_len);
netif_carrier_off(netdev);
--
2.39.2
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH net-next 6/8] veth: take into account device reconfiguration for xdp_features flag
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
` (4 preceding siblings ...)
2023-03-07 14:54 ` [PATCH net-next 5/8] net: ena: " Lorenzo Bianconi
@ 2023-03-07 14:54 ` Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 7/8] net/mlx5e: " Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 8/8] mvpp2: take care of xdp_features when reconfiguring queues Lorenzo Bianconi
7 siblings, 0 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:54 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
Take into account tx/rx queues reconfiguration setting device
xdp_features flag. Moreover consider NETIF_F_GRO flag in order to enable
ndo_xdp_xmit callback.
Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/veth.c | 42 ++++++++++++++++++++++++++++++++++++++----
1 file changed, 38 insertions(+), 4 deletions(-)
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 1bb54de7124d..293dc3b2c84a 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -1257,6 +1257,26 @@ static int veth_enable_range_safe(struct net_device *dev, int start, int end)
return 0;
}
+static void veth_set_xdp_features(struct net_device *dev)
+{
+ struct veth_priv *priv = netdev_priv(dev);
+ struct net_device *peer;
+
+ peer = rcu_dereference(priv->peer);
+ if (peer && peer->real_num_tx_queues <= dev->real_num_rx_queues) {
+ xdp_features_t val = NETDEV_XDP_ACT_BASIC |
+ NETDEV_XDP_ACT_REDIRECT |
+ NETDEV_XDP_ACT_RX_SG;
+
+ if (priv->_xdp_prog || veth_gro_requested(dev))
+ val |= NETDEV_XDP_ACT_NDO_XMIT |
+ NETDEV_XDP_ACT_NDO_XMIT_SG;
+ xdp_set_features_flag(dev, val);
+ } else {
+ xdp_clear_features_flag(dev);
+ }
+}
+
static int veth_set_channels(struct net_device *dev,
struct ethtool_channels *ch)
{
@@ -1323,6 +1343,12 @@ static int veth_set_channels(struct net_device *dev,
if (peer)
netif_carrier_on(peer);
}
+
+ /* update XDP supported features */
+ veth_set_xdp_features(dev);
+ if (peer)
+ veth_set_xdp_features(peer);
+
return err;
revert:
@@ -1489,7 +1515,10 @@ static int veth_set_features(struct net_device *dev,
err = veth_napi_enable(dev);
if (err)
return err;
+
+ xdp_features_set_redirect_target(dev, true);
} else {
+ xdp_features_clear_redirect_target(dev);
veth_napi_del(dev);
}
return 0;
@@ -1570,10 +1599,15 @@ static int veth_xdp_set(struct net_device *dev, struct bpf_prog *prog,
peer->hw_features &= ~NETIF_F_GSO_SOFTWARE;
peer->max_mtu = max_mtu;
}
+
+ xdp_features_set_redirect_target(dev, true);
}
if (old_prog) {
if (!prog) {
+ if (!veth_gro_requested(dev))
+ xdp_features_clear_redirect_target(dev);
+
if (dev->flags & IFF_UP)
veth_disable_xdp(dev);
@@ -1686,10 +1720,6 @@ static void veth_setup(struct net_device *dev)
dev->hw_enc_features = VETH_FEATURES;
dev->mpls_features = NETIF_F_HW_CSUM | NETIF_F_GSO_SOFTWARE;
netif_set_tso_max_size(dev, GSO_MAX_SIZE);
-
- dev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
- NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_RX_SG |
- NETDEV_XDP_ACT_NDO_XMIT_SG;
}
/*
@@ -1857,6 +1887,10 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
goto err_queues;
veth_disable_gro(dev);
+ /* update XDP supported features */
+ veth_set_xdp_features(dev);
+ veth_set_xdp_features(peer);
+
return 0;
err_queues:
--
2.39.2
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH net-next 7/8] net/mlx5e: take into account device reconfiguration for xdp_features flag
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
` (5 preceding siblings ...)
2023-03-07 14:54 ` [PATCH net-next 6/8] veth: take into account device reconfiguration for xdp_features flag Lorenzo Bianconi
@ 2023-03-07 14:54 ` Lorenzo Bianconi
2023-03-08 10:33 ` Tariq Toukan
2023-03-07 14:54 ` [PATCH net-next 8/8] mvpp2: take care of xdp_features when reconfiguring queues Lorenzo Bianconi
7 siblings, 1 reply; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:54 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
Take into account LRO and GRO configuration setting device xdp_features
flag. Moreover consider channel rq_wq_type enabling rx scatter-gatter
support in xdp_features flag.
Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 +
.../ethernet/mellanox/mlx5/core/en_ethtool.c | 10 ++++-
.../net/ethernet/mellanox/mlx5/core/en_main.c | 45 ++++++++++++++++---
.../net/ethernet/mellanox/mlx5/core/en_rep.c | 3 ++
4 files changed, 51 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
index 88460b7796e5..4276c6eb6820 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
@@ -1243,6 +1243,7 @@ void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16
void mlx5e_rx_dim_work(struct work_struct *work);
void mlx5e_tx_dim_work(struct work_struct *work);
+void mlx5e_set_xdp_feature(struct net_device *netdev);
netdev_features_t mlx5e_features_check(struct sk_buff *skb,
struct net_device *netdev,
netdev_features_t features);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
index 7708acc9b2ab..79fd21ecb9cb 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
@@ -1985,6 +1985,7 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
struct mlx5e_priv *priv = netdev_priv(netdev);
struct mlx5_core_dev *mdev = priv->mdev;
struct mlx5e_params new_params;
+ int err;
if (enable) {
/* Checking the regular RQ here; mlx5e_validate_xsk_param called
@@ -2005,7 +2006,14 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
MLX5E_SET_PFLAG(&new_params, MLX5E_PFLAG_RX_STRIDING_RQ, enable);
mlx5e_set_rq_type(mdev, &new_params);
- return mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
+ err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
+ if (err)
+ return err;
+
+ /* update XDP supported features */
+ mlx5e_set_xdp_feature(netdev);
+
+ return 0;
}
static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 76a9c5194a70..1b68dd2be2c5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -4004,6 +4004,30 @@ static int mlx5e_handle_feature(struct net_device *netdev,
return 0;
}
+void mlx5e_set_xdp_feature(struct net_device *netdev)
+{
+ struct mlx5e_priv *priv = netdev_priv(netdev);
+ bool ndo_xmit = test_bit(MLX5E_STATE_XDP_ACTIVE, &priv->state);
+ struct mlx5e_params *params = &priv->channels.params;
+ xdp_features_t val;
+
+ if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
+ xdp_clear_features_flag(netdev);
+ return;
+ }
+
+ val = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
+ NETDEV_XDP_ACT_XSK_ZEROCOPY;
+ if (ndo_xmit)
+ val |= NETDEV_XDP_ACT_NDO_XMIT;
+ if (params->rq_wq_type == MLX5_WQ_TYPE_CYCLIC) {
+ val |= NETDEV_XDP_ACT_RX_SG;
+ if (ndo_xmit)
+ val |= NETDEV_XDP_ACT_NDO_XMIT_SG;
+ }
+ xdp_set_features_flag(netdev, val);
+}
+
int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
{
netdev_features_t oper_features = features;
@@ -4030,6 +4054,9 @@ int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
return -EINVAL;
}
+ /* update XDP supported features */
+ mlx5e_set_xdp_feature(netdev);
+
return 0;
}
@@ -4762,10 +4789,14 @@ static int mlx5e_xdp_set(struct net_device *netdev, struct bpf_prog *prog)
bpf_prog_put(old_prog);
if (reset) {
- if (prog)
- xdp_features_set_redirect_target(netdev, true);
- else
+ if (prog) {
+ bool xmit_sg;
+
+ xmit_sg = new_params.rq_wq_type == MLX5_WQ_TYPE_CYCLIC;
+ xdp_features_set_redirect_target(netdev, xmit_sg);
+ } else {
xdp_features_clear_redirect_target(netdev);
+ }
}
if (!test_bit(MLX5E_STATE_OPENED, &priv->state) || reset)
@@ -5163,13 +5194,10 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
netdev->features |= NETIF_F_HIGHDMA;
netdev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
- netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
- NETDEV_XDP_ACT_XSK_ZEROCOPY |
- NETDEV_XDP_ACT_RX_SG;
-
netdev->priv_flags |= IFF_UNICAST_FLT;
netif_set_tso_max_size(netdev, GSO_MAX_SIZE);
+ mlx5e_set_xdp_feature(netdev);
mlx5e_set_netdev_dev_addr(netdev);
mlx5e_macsec_build_netdev(priv);
mlx5e_ipsec_build_netdev(priv);
@@ -5241,6 +5269,9 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,
mlx5_core_err(mdev, "TLS initialization failed, %d\n", err);
mlx5e_health_create_reporters(priv);
+ /* update XDP supported features */
+ mlx5e_set_xdp_feature(netdev);
+
return 0;
}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
index 9b9203443085..43fd12fb87b8 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
@@ -747,6 +747,9 @@ static void mlx5e_build_rep_params(struct net_device *netdev)
/* RQ */
mlx5e_build_rq_params(mdev, params);
+ /* update XDP supported features */
+ mlx5e_set_xdp_feature(netdev);
+
/* CQ moderation params */
params->rx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
mlx5e_set_rx_cq_mode_params(params, cq_period_mode);
--
2.39.2
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH net-next 8/8] mvpp2: take care of xdp_features when reconfiguring queues
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
` (6 preceding siblings ...)
2023-03-07 14:54 ` [PATCH net-next 7/8] net/mlx5e: " Lorenzo Bianconi
@ 2023-03-07 14:54 ` Lorenzo Bianconi
7 siblings, 0 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-07 14:54 UTC (permalink / raw)
To: netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
From: Matteo Croce <teknoraver@meta.com>
XDP is supported only if enough queues are present, so when reconfiguring
the queues set xdp_features accordingly.
Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
Suggested-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Matteo Croce <teknoraver@meta.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index 9b4ecbe4f36d..3ea00bc9b91c 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -4996,6 +4996,14 @@ static int mvpp2_bm_switch_buffers(struct mvpp2 *priv, bool percpu)
for (i = 0; i < priv->port_count; i++) {
port = priv->port_list[i];
+ if (percpu && port->ntxqs >= num_possible_cpus() * 2)
+ xdp_set_features_flag(port->dev,
+ NETDEV_XDP_ACT_BASIC |
+ NETDEV_XDP_ACT_REDIRECT |
+ NETDEV_XDP_ACT_NDO_XMIT);
+ else
+ xdp_clear_features_flag(port->dev);
+
mvpp2_swf_bm_pool_init(port);
if (status[i])
mvpp2_open(port->dev);
@@ -6863,13 +6871,14 @@ static int mvpp2_port_probe(struct platform_device *pdev,
if (!port->priv->percpu_pools)
mvpp2_set_hw_csum(port, port->pool_long->id);
+ else if (port->ntxqs >= num_possible_cpus() * 2)
+ dev->xdp_features = NETDEV_XDP_ACT_BASIC |
+ NETDEV_XDP_ACT_REDIRECT |
+ NETDEV_XDP_ACT_NDO_XMIT;
dev->vlan_features |= features;
netif_set_tso_max_segs(dev, MVPP2_MAX_TSO_SEGS);
- dev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
- NETDEV_XDP_ACT_NDO_XMIT;
-
dev->priv_flags |= IFF_UNICAST_FLT;
/* MTU range: 68 - 9704 */
--
2.39.2
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 1/8] tools: ynl: fix render-max for flags definition
2023-03-07 14:53 ` [PATCH net-next 1/8] tools: ynl: fix render-max for flags definition Lorenzo Bianconi
@ 2023-03-08 8:06 ` Jakub Kicinski
2023-03-08 10:28 ` Lorenzo Bianconi
0 siblings, 1 reply; 18+ messages in thread
From: Jakub Kicinski @ 2023-03-08 8:06 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: netdev, bpf, davem, edumazet, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
On Tue, 7 Mar 2023 15:53:58 +0100 Lorenzo Bianconi wrote:
> Properly manage render-max property for flags definition type
> introducing mask value and setting it to (last_element << 1) - 1
> instead of adding max value set to last_element + 1
>
> Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink")
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> tools/net/ynl/ynl-gen-c.py | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
> index 274e9c566f61..f2e41dd962d4 100755
> --- a/tools/net/ynl/ynl-gen-c.py
> +++ b/tools/net/ynl/ynl-gen-c.py
> @@ -1995,9 +1995,14 @@ def render_uapi(family, cw):
>
> if const.get('render-max', False):
> cw.nl()
> - max_name = c_upper(name_pfx + 'max')
> - cw.p('__' + max_name + ',')
> - cw.p(max_name + ' = (__' + max_name + ' - 1)')
> + if const['type'] == 'flags':
> + max_name = c_upper(name_pfx + 'mask')
> + max_val = f' = {(entry.user_value() << 1) - 1},'
Hm, why not use const.get_mask() here? Rather than the last entry?
> + cw.p(max_name + max_val)
> + else:
> + max_name = c_upper(name_pfx + 'max')
> + cw.p('__' + max_name + ',')
> + cw.p(max_name + ' = (__' + max_name + ' - 1)')
> cw.block_end(line=';')
> cw.nl()
> elif const['type'] == 'const':
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 5/8] net: ena: take into account xdp_features setting tx/rx queues
2023-03-07 14:54 ` [PATCH net-next 5/8] net: ena: " Lorenzo Bianconi
@ 2023-03-08 10:25 ` Shay Agroskin
0 siblings, 0 replies; 18+ messages in thread
From: Shay Agroskin @ 2023-03-08 10:25 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: netdev, bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, akiyano, darinzon, sgoutham,
lorenzo.bianconi, toke, teknoraver
Lorenzo Bianconi <lorenzo@kernel.org> writes:
> ena nic allows xdp just if enough hw queues are available for
> XDP.
> Take into account queues configuration setting xdp_features.
>
> Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> drivers/net/ethernet/amazon/ena/ena_ethtool.c | 15
> ++++++++++++---
> drivers/net/ethernet/amazon/ena/ena_netdev.c | 6 ++++--
> 2 files changed, 16 insertions(+), 5 deletions(-)
>
For the ENA driver changes and the non-driver changes
Reviewed-by: Shay Agroskin <shayagr@amazon.com>
Thank you for doing that (:
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 1/8] tools: ynl: fix render-max for flags definition
2023-03-08 8:06 ` Jakub Kicinski
@ 2023-03-08 10:28 ` Lorenzo Bianconi
0 siblings, 0 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-08 10:28 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, bpf, davem, edumazet, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, tariqt, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
[-- Attachment #1: Type: text/plain, Size: 1790 bytes --]
> On Tue, 7 Mar 2023 15:53:58 +0100 Lorenzo Bianconi wrote:
> > Properly manage render-max property for flags definition type
> > introducing mask value and setting it to (last_element << 1) - 1
> > instead of adding max value set to last_element + 1
> >
> > Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink")
> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > ---
> > tools/net/ynl/ynl-gen-c.py | 11 ++++++++---
> > 1 file changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
> > index 274e9c566f61..f2e41dd962d4 100755
> > --- a/tools/net/ynl/ynl-gen-c.py
> > +++ b/tools/net/ynl/ynl-gen-c.py
> > @@ -1995,9 +1995,14 @@ def render_uapi(family, cw):
> >
> > if const.get('render-max', False):
> > cw.nl()
> > - max_name = c_upper(name_pfx + 'max')
> > - cw.p('__' + max_name + ',')
> > - cw.p(max_name + ' = (__' + max_name + ' - 1)')
> > + if const['type'] == 'flags':
> > + max_name = c_upper(name_pfx + 'mask')
> > + max_val = f' = {(entry.user_value() << 1) - 1},'
>
> Hm, why not use const.get_mask() here? Rather than the last entry?
actually I did this change but it ended up in patch 3/8. I will fix it in v2.
Regards,
Lorenzo
>
> > + cw.p(max_name + max_val)
> > + else:
> > + max_name = c_upper(name_pfx + 'max')
> > + cw.p('__' + max_name + ',')
> > + cw.p(max_name + ' = (__' + max_name + ' - 1)')
> > cw.block_end(line=';')
> > cw.nl()
> > elif const['type'] == 'const':
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 7/8] net/mlx5e: take into account device reconfiguration for xdp_features flag
2023-03-07 14:54 ` [PATCH net-next 7/8] net/mlx5e: " Lorenzo Bianconi
@ 2023-03-08 10:33 ` Tariq Toukan
2023-03-08 15:47 ` Lorenzo Bianconi
0 siblings, 1 reply; 18+ messages in thread
From: Tariq Toukan @ 2023-03-08 10:33 UTC (permalink / raw)
To: Lorenzo Bianconi, netdev
Cc: bpf, davem, edumazet, kuba, pabeni, ast, daniel, hawk,
john.fastabend, saeedm, leon, shayagr, akiyano, darinzon,
sgoutham, lorenzo.bianconi, toke, teknoraver
On 07/03/2023 16:54, Lorenzo Bianconi wrote:
> Take into account LRO and GRO configuration setting device xdp_features
> flag. Moreover consider channel rq_wq_type enabling rx scatter-gatter
> support in xdp_features flag.
>
> Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 +
> .../ethernet/mellanox/mlx5/core/en_ethtool.c | 10 ++++-
> .../net/ethernet/mellanox/mlx5/core/en_main.c | 45 ++++++++++++++++---
> .../net/ethernet/mellanox/mlx5/core/en_rep.c | 3 ++
> 4 files changed, 51 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
> index 88460b7796e5..4276c6eb6820 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
> @@ -1243,6 +1243,7 @@ void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16
> void mlx5e_rx_dim_work(struct work_struct *work);
> void mlx5e_tx_dim_work(struct work_struct *work);
>
> +void mlx5e_set_xdp_feature(struct net_device *netdev);
> netdev_features_t mlx5e_features_check(struct sk_buff *skb,
> struct net_device *netdev,
> netdev_features_t features);
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> index 7708acc9b2ab..79fd21ecb9cb 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> @@ -1985,6 +1985,7 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
> struct mlx5e_priv *priv = netdev_priv(netdev);
> struct mlx5_core_dev *mdev = priv->mdev;
> struct mlx5e_params new_params;
> + int err;
>
> if (enable) {
> /* Checking the regular RQ here; mlx5e_validate_xsk_param called
> @@ -2005,7 +2006,14 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
> MLX5E_SET_PFLAG(&new_params, MLX5E_PFLAG_RX_STRIDING_RQ, enable);
> mlx5e_set_rq_type(mdev, &new_params);
>
> - return mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
> + err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
> + if (err)
> + return err;
> +
> + /* update XDP supported features */
> + mlx5e_set_xdp_feature(netdev);
> +
> + return 0;
> }
>
> static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> index 76a9c5194a70..1b68dd2be2c5 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> @@ -4004,6 +4004,30 @@ static int mlx5e_handle_feature(struct net_device *netdev,
> return 0;
> }
>
> +void mlx5e_set_xdp_feature(struct net_device *netdev)
> +{
> + struct mlx5e_priv *priv = netdev_priv(netdev);
> + bool ndo_xmit = test_bit(MLX5E_STATE_XDP_ACTIVE, &priv->state);
Our driver doesn't require loading a dummy XDP program to have the
redirect-in ability. It's always there.
I actually have a bug fix under internal review with Saeed that
addresses this.
In addition, it cleans up the NETDEV_XDP_ACT_NDO_XMIT_SG as we do not
support it yet. I have a series that's adding support and will submit it
soon.
Any reason you're submitting these fixes to net-next rather than net?
Maybe it'd be better if we integrate the patches, here's my fix (still
under review...):
Author: Tariq Toukan <tariqt@nvidia.com>
Date: Thu Feb 23 08:58:04 2023 +0200
net/mlx5e: Fix exposed xdp_features
Always declare NETDEV_XDP_ACT_NDO_XMIT as the ndo_xdp_xmit callback
is always functional per our design, and does not require loading
a dummy xdp program.
Although non-linear XDP buffer is supported for XDP_TX flow, do not
declare NETDEV_XDP_ACT_NDO_XMIT_SG as it is yet supported for
redirected-in frames.
Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 53feb0529943..9a5d3ce1fbcd 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -4741,13 +4741,6 @@ static int mlx5e_xdp_set(struct net_device
*netdev, struct bpf_prog *prog)
if (old_prog)
bpf_prog_put(old_prog);
- if (reset) {
- if (prog)
- xdp_features_set_redirect_target(netdev, true);
- else
- xdp_features_clear_redirect_target(netdev);
- }
-
if (!test_bit(MLX5E_STATE_OPENED, &priv->state) || reset)
goto unlock;
@@ -5144,6 +5137,7 @@ static void mlx5e_build_nic_netdev(struct
net_device *netdev)
netdev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
netdev->xdp_features = NETDEV_XDP_ACT_BASIC |
NETDEV_XDP_ACT_REDIRECT |
+ NETDEV_XDP_ACT_NDO_XMIT |
NETDEV_XDP_ACT_XSK_ZEROCOPY |
NETDEV_XDP_ACT_RX_SG;
> + struct mlx5e_params *params = &priv->channels.params;
> + xdp_features_t val;
> +
> + if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
> + xdp_clear_features_flag(netdev);
> + return;
> + }
> +
> + val = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
> + NETDEV_XDP_ACT_XSK_ZEROCOPY;
> + if (ndo_xmit)
> + val |= NETDEV_XDP_ACT_NDO_XMIT;
> + if (params->rq_wq_type == MLX5_WQ_TYPE_CYCLIC) {
> + val |= NETDEV_XDP_ACT_RX_SG;
> + if (ndo_xmit)
> + val |= NETDEV_XDP_ACT_NDO_XMIT_SG;
This NETDEV_XDP_ACT_NDO_XMIT_SG capability is not related to the RQ
type. It's still not supported at this point.
BTW, I have a series completing all the missing capabilities (multibuf
on Striding + multibuf redirect-in), should be submitted in this kernel.
> + }
> + xdp_set_features_flag(netdev, val);
> +}
> +
> int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
> {
> netdev_features_t oper_features = features;
> @@ -4030,6 +4054,9 @@ int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
> return -EINVAL;
> }
>
> + /* update XDP supported features */
> + mlx5e_set_xdp_feature(netdev);
> +
> return 0;
> }
>
> @@ -4762,10 +4789,14 @@ static int mlx5e_xdp_set(struct net_device *netdev, struct bpf_prog *prog)
> bpf_prog_put(old_prog);
>
> if (reset) {
> - if (prog)
> - xdp_features_set_redirect_target(netdev, true);
> - else
> + if (prog) {
> + bool xmit_sg;
> +
> + xmit_sg = new_params.rq_wq_type == MLX5_WQ_TYPE_CYCLIC;
Same, not related. Still not supported at this point.
> + xdp_features_set_redirect_target(netdev, xmit_sg);
> + } else {
> xdp_features_clear_redirect_target(netdev);
> + }
> }
>
> if (!test_bit(MLX5E_STATE_OPENED, &priv->state) || reset)
> @@ -5163,13 +5194,10 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
> netdev->features |= NETIF_F_HIGHDMA;
> netdev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
>
> - netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
> - NETDEV_XDP_ACT_XSK_ZEROCOPY |
> - NETDEV_XDP_ACT_RX_SG;
> -
> netdev->priv_flags |= IFF_UNICAST_FLT;
>
> netif_set_tso_max_size(netdev, GSO_MAX_SIZE);
> + mlx5e_set_xdp_feature(netdev);
> mlx5e_set_netdev_dev_addr(netdev);
> mlx5e_macsec_build_netdev(priv);
> mlx5e_ipsec_build_netdev(priv);
> @@ -5241,6 +5269,9 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,
> mlx5_core_err(mdev, "TLS initialization failed, %d\n", err);
>
> mlx5e_health_create_reporters(priv);
> + /* update XDP supported features */
> + mlx5e_set_xdp_feature(netdev);
> +
> return 0;
> }
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> index 9b9203443085..43fd12fb87b8 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> @@ -747,6 +747,9 @@ static void mlx5e_build_rep_params(struct net_device *netdev)
> /* RQ */
> mlx5e_build_rq_params(mdev, params);
>
> + /* update XDP supported features */
> + mlx5e_set_xdp_feature(netdev);
> +
> /* CQ moderation params */
> params->rx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
> mlx5e_set_rx_cq_mode_params(params, cq_period_mode);
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 7/8] net/mlx5e: take into account device reconfiguration for xdp_features flag
2023-03-08 10:33 ` Tariq Toukan
@ 2023-03-08 15:47 ` Lorenzo Bianconi
2023-03-09 7:23 ` Tariq Toukan
0 siblings, 1 reply; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-08 15:47 UTC (permalink / raw)
To: Tariq Toukan
Cc: Lorenzo Bianconi, netdev, bpf, davem, edumazet, kuba, pabeni, ast,
daniel, hawk, john.fastabend, saeedm, leon, shayagr, akiyano,
darinzon, sgoutham, toke, teknoraver
[-- Attachment #1: Type: text/plain, Size: 9672 bytes --]
>
>
> On 07/03/2023 16:54, Lorenzo Bianconi wrote:
> > Take into account LRO and GRO configuration setting device xdp_features
> > flag. Moreover consider channel rq_wq_type enabling rx scatter-gatter
> > support in xdp_features flag.
> >
> > Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > ---
> > drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 +
> > .../ethernet/mellanox/mlx5/core/en_ethtool.c | 10 ++++-
> > .../net/ethernet/mellanox/mlx5/core/en_main.c | 45 ++++++++++++++++---
> > .../net/ethernet/mellanox/mlx5/core/en_rep.c | 3 ++
> > 4 files changed, 51 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
> > index 88460b7796e5..4276c6eb6820 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
> > @@ -1243,6 +1243,7 @@ void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16
> > void mlx5e_rx_dim_work(struct work_struct *work);
> > void mlx5e_tx_dim_work(struct work_struct *work);
> > +void mlx5e_set_xdp_feature(struct net_device *netdev);
> > netdev_features_t mlx5e_features_check(struct sk_buff *skb,
> > struct net_device *netdev,
> > netdev_features_t features);
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> > index 7708acc9b2ab..79fd21ecb9cb 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> > @@ -1985,6 +1985,7 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
> > struct mlx5e_priv *priv = netdev_priv(netdev);
> > struct mlx5_core_dev *mdev = priv->mdev;
> > struct mlx5e_params new_params;
> > + int err;
> > if (enable) {
> > /* Checking the regular RQ here; mlx5e_validate_xsk_param called
> > @@ -2005,7 +2006,14 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
> > MLX5E_SET_PFLAG(&new_params, MLX5E_PFLAG_RX_STRIDING_RQ, enable);
> > mlx5e_set_rq_type(mdev, &new_params);
> > - return mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
> > + err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
> > + if (err)
> > + return err;
> > +
> > + /* update XDP supported features */
> > + mlx5e_set_xdp_feature(netdev);
> > +
> > + return 0;
> > }
> > static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > index 76a9c5194a70..1b68dd2be2c5 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > @@ -4004,6 +4004,30 @@ static int mlx5e_handle_feature(struct net_device *netdev,
> > return 0;
> > }
> > +void mlx5e_set_xdp_feature(struct net_device *netdev)
> > +{
> > + struct mlx5e_priv *priv = netdev_priv(netdev);
> > + bool ndo_xmit = test_bit(MLX5E_STATE_XDP_ACTIVE, &priv->state);
>
> Our driver doesn't require loading a dummy XDP program to have the
> redirect-in ability. It's always there.
>
> I actually have a bug fix under internal review with Saeed that addresses
> this.
>
> In addition, it cleans up the NETDEV_XDP_ACT_NDO_XMIT_SG as we do not
> support it yet. I have a series that's adding support and will submit it
> soon.
>
> Any reason you're submitting these fixes to net-next rather than net?
Hi Tariq,
I am fine to repost this series for net instead of net-next. Any downsides about
it?
> Maybe it'd be better if we integrate the patches, here's my fix (still under
> review...):
>
> Author: Tariq Toukan <tariqt@nvidia.com>
> Date: Thu Feb 23 08:58:04 2023 +0200
>
> net/mlx5e: Fix exposed xdp_features
>
> Always declare NETDEV_XDP_ACT_NDO_XMIT as the ndo_xdp_xmit callback
> is always functional per our design, and does not require loading
> a dummy xdp program.
>
> Although non-linear XDP buffer is supported for XDP_TX flow, do not
> declare NETDEV_XDP_ACT_NDO_XMIT_SG as it is yet supported for
> redirected-in frames.
>
> Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
> Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> index 53feb0529943..9a5d3ce1fbcd 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> @@ -4741,13 +4741,6 @@ static int mlx5e_xdp_set(struct net_device *netdev,
> struct bpf_prog *prog)
> if (old_prog)
> bpf_prog_put(old_prog);
>
> - if (reset) {
> - if (prog)
> - xdp_features_set_redirect_target(netdev, true);
> - else
> - xdp_features_clear_redirect_target(netdev);
> - }
> -
> if (!test_bit(MLX5E_STATE_OPENED, &priv->state) || reset)
> goto unlock;
>
> @@ -5144,6 +5137,7 @@ static void mlx5e_build_nic_netdev(struct net_device
> *netdev)
> netdev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
>
> netdev->xdp_features = NETDEV_XDP_ACT_BASIC |
> NETDEV_XDP_ACT_REDIRECT |
> + NETDEV_XDP_ACT_NDO_XMIT |
> NETDEV_XDP_ACT_XSK_ZEROCOPY |
> NETDEV_XDP_ACT_RX_SG;
I am fine to drop this my patch and rely on the one you provided but it depends
on the eta about the described patches because otherwise real capabilities and
xdp-features will not be aligned. Any inputs on it?
>
>
> > + struct mlx5e_params *params = &priv->channels.params;
> > + xdp_features_t val;
> > +
> > + if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
> > + xdp_clear_features_flag(netdev);
> > + return;
> > + }
> > +
> > + val = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
> > + NETDEV_XDP_ACT_XSK_ZEROCOPY;
> > + if (ndo_xmit)
> > + val |= NETDEV_XDP_ACT_NDO_XMIT;
> > + if (params->rq_wq_type == MLX5_WQ_TYPE_CYCLIC) {
> > + val |= NETDEV_XDP_ACT_RX_SG;
> > + if (ndo_xmit)
> > + val |= NETDEV_XDP_ACT_NDO_XMIT_SG;
>
> This NETDEV_XDP_ACT_NDO_XMIT_SG capability is not related to the RQ type.
> It's still not supported at this point.
ack, I will fix it.
>
> BTW, I have a series completing all the missing capabilities (multibuf on
> Striding + multibuf redirect-in), should be submitted in this kernel.
cool :)
Regards,
Lorenzo
>
> > + }
> > + xdp_set_features_flag(netdev, val);
> > +}
> > +
> > int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
> > {
> > netdev_features_t oper_features = features;
> > @@ -4030,6 +4054,9 @@ int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
> > return -EINVAL;
> > }
> > + /* update XDP supported features */
> > + mlx5e_set_xdp_feature(netdev);
> > +
> > return 0;
> > }
> > @@ -4762,10 +4789,14 @@ static int mlx5e_xdp_set(struct net_device *netdev, struct bpf_prog *prog)
> > bpf_prog_put(old_prog);
> > if (reset) {
> > - if (prog)
> > - xdp_features_set_redirect_target(netdev, true);
> > - else
> > + if (prog) {
> > + bool xmit_sg;
> > +
> > + xmit_sg = new_params.rq_wq_type == MLX5_WQ_TYPE_CYCLIC;
>
> Same, not related. Still not supported at this point.
>
> > + xdp_features_set_redirect_target(netdev, xmit_sg);
> > + } else {
> > xdp_features_clear_redirect_target(netdev);
> > + }
> > }
> > if (!test_bit(MLX5E_STATE_OPENED, &priv->state) || reset)
> > @@ -5163,13 +5194,10 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
> > netdev->features |= NETIF_F_HIGHDMA;
> > netdev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
> > - netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
> > - NETDEV_XDP_ACT_XSK_ZEROCOPY |
> > - NETDEV_XDP_ACT_RX_SG;
> > -
> > netdev->priv_flags |= IFF_UNICAST_FLT;
> > netif_set_tso_max_size(netdev, GSO_MAX_SIZE);
> > + mlx5e_set_xdp_feature(netdev);
> > mlx5e_set_netdev_dev_addr(netdev);
> > mlx5e_macsec_build_netdev(priv);
> > mlx5e_ipsec_build_netdev(priv);
> > @@ -5241,6 +5269,9 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,
> > mlx5_core_err(mdev, "TLS initialization failed, %d\n", err);
> > mlx5e_health_create_reporters(priv);
> > + /* update XDP supported features */
> > + mlx5e_set_xdp_feature(netdev);
> > +
> > return 0;
> > }
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> > index 9b9203443085..43fd12fb87b8 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> > @@ -747,6 +747,9 @@ static void mlx5e_build_rep_params(struct net_device *netdev)
> > /* RQ */
> > mlx5e_build_rq_params(mdev, params);
> > + /* update XDP supported features */
> > + mlx5e_set_xdp_feature(netdev);
> > +
> > /* CQ moderation params */
> > params->rx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
> > mlx5e_set_rx_cq_mode_params(params, cq_period_mode);
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 7/8] net/mlx5e: take into account device reconfiguration for xdp_features flag
2023-03-08 15:47 ` Lorenzo Bianconi
@ 2023-03-09 7:23 ` Tariq Toukan
2023-03-09 7:32 ` Jakub Kicinski
2023-03-09 8:43 ` Lorenzo Bianconi
0 siblings, 2 replies; 18+ messages in thread
From: Tariq Toukan @ 2023-03-09 7:23 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Lorenzo Bianconi, netdev, bpf, davem, edumazet, kuba, pabeni, ast,
daniel, hawk, john.fastabend, saeedm, leon, shayagr, akiyano,
darinzon, sgoutham, toke, teknoraver, Tariq Toukan
On 08/03/2023 17:47, Lorenzo Bianconi wrote:
>>
>>
>> On 07/03/2023 16:54, Lorenzo Bianconi wrote:
>>> Take into account LRO and GRO configuration setting device xdp_features
>>> flag. Moreover consider channel rq_wq_type enabling rx scatter-gatter
>>> support in xdp_features flag.
>>>
>>> Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
>>> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
>>> ---
>>> drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 +
>>> .../ethernet/mellanox/mlx5/core/en_ethtool.c | 10 ++++-
>>> .../net/ethernet/mellanox/mlx5/core/en_main.c | 45 ++++++++++++++++---
>>> .../net/ethernet/mellanox/mlx5/core/en_rep.c | 3 ++
>>> 4 files changed, 51 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
>>> index 88460b7796e5..4276c6eb6820 100644
>>> --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
>>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
>>> @@ -1243,6 +1243,7 @@ void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16
>>> void mlx5e_rx_dim_work(struct work_struct *work);
>>> void mlx5e_tx_dim_work(struct work_struct *work);
>>> +void mlx5e_set_xdp_feature(struct net_device *netdev);
>>> netdev_features_t mlx5e_features_check(struct sk_buff *skb,
>>> struct net_device *netdev,
>>> netdev_features_t features);
>>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
>>> index 7708acc9b2ab..79fd21ecb9cb 100644
>>> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
>>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
>>> @@ -1985,6 +1985,7 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
>>> struct mlx5e_priv *priv = netdev_priv(netdev);
>>> struct mlx5_core_dev *mdev = priv->mdev;
>>> struct mlx5e_params new_params;
>>> + int err;
>>> if (enable) {
>>> /* Checking the regular RQ here; mlx5e_validate_xsk_param called
>>> @@ -2005,7 +2006,14 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
>>> MLX5E_SET_PFLAG(&new_params, MLX5E_PFLAG_RX_STRIDING_RQ, enable);
>>> mlx5e_set_rq_type(mdev, &new_params);
>>> - return mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
>>> + err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
>>> + if (err)
>>> + return err;
>>> +
>>> + /* update XDP supported features */
>>> + mlx5e_set_xdp_feature(netdev);
>>> +
>>> + return 0;
>>> }
>>> static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)
>>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>>> index 76a9c5194a70..1b68dd2be2c5 100644
>>> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>>> @@ -4004,6 +4004,30 @@ static int mlx5e_handle_feature(struct net_device *netdev,
>>> return 0;
>>> }
>>> +void mlx5e_set_xdp_feature(struct net_device *netdev)
>>> +{
>>> + struct mlx5e_priv *priv = netdev_priv(netdev);
>>> + bool ndo_xmit = test_bit(MLX5E_STATE_XDP_ACTIVE, &priv->state);
>>
>> Our driver doesn't require loading a dummy XDP program to have the
>> redirect-in ability. It's always there.
>>
>> I actually have a bug fix under internal review with Saeed that addresses
>> this.
>>
>> In addition, it cleans up the NETDEV_XDP_ACT_NDO_XMIT_SG as we do not
>> support it yet. I have a series that's adding support and will submit it
>> soon.
>>
>> Any reason you're submitting these fixes to net-next rather than net?
>
> Hi Tariq,
>
> I am fine to repost this series for net instead of net-next. Any downsides about
> it?
Let's repost to net.
It's a fixes series, and 6.3 is still in its RCs.
If you don't post it to net then the xdp-features in 6.3 will be broken.
>
>> Maybe it'd be better if we integrate the patches, here's my fix (still under
>> review...):
>>
>> Author: Tariq Toukan <tariqt@nvidia.com>
>> Date: Thu Feb 23 08:58:04 2023 +0200
>>
>> net/mlx5e: Fix exposed xdp_features
>>
>> Always declare NETDEV_XDP_ACT_NDO_XMIT as the ndo_xdp_xmit callback
>> is always functional per our design, and does not require loading
>> a dummy xdp program.
>>
>> Although non-linear XDP buffer is supported for XDP_TX flow, do not
>> declare NETDEV_XDP_ACT_NDO_XMIT_SG as it is yet supported for
>> redirected-in frames.
>>
>> Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
>> Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
>>
>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>> b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>> index 53feb0529943..9a5d3ce1fbcd 100644
>> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
>> @@ -4741,13 +4741,6 @@ static int mlx5e_xdp_set(struct net_device *netdev,
>> struct bpf_prog *prog)
>> if (old_prog)
>> bpf_prog_put(old_prog);
>>
>> - if (reset) {
>> - if (prog)
>> - xdp_features_set_redirect_target(netdev, true);
>> - else
>> - xdp_features_clear_redirect_target(netdev);
>> - }
>> -
>> if (!test_bit(MLX5E_STATE_OPENED, &priv->state) || reset)
>> goto unlock;
>>
>> @@ -5144,6 +5137,7 @@ static void mlx5e_build_nic_netdev(struct net_device
>> *netdev)
>> netdev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
>>
>> netdev->xdp_features = NETDEV_XDP_ACT_BASIC |
>> NETDEV_XDP_ACT_REDIRECT |
>> + NETDEV_XDP_ACT_NDO_XMIT |
>> NETDEV_XDP_ACT_XSK_ZEROCOPY |
>> NETDEV_XDP_ACT_RX_SG;
>
> I am fine to drop this my patch and rely on the one you provided but it depends
> on the eta about the described patches because otherwise real capabilities and
> xdp-features will not be aligned. Any inputs on it?
>
My patch doesn't replace yours, as it doesn't fix the missing
features_update according to striding RQ and HW LRO/GRO.
I think we should combine them, either take mine as-is into your series,
or squash it into this patch. I'm fine with both.
>>
>>
>>> + struct mlx5e_params *params = &priv->channels.params;
>>> + xdp_features_t val;
>>> +
>>> + if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
>>> + xdp_clear_features_flag(netdev);
>>> + return;
>>> + }
>>> +
>>> + val = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
>>> + NETDEV_XDP_ACT_XSK_ZEROCOPY;
>>> + if (ndo_xmit)
>>> + val |= NETDEV_XDP_ACT_NDO_XMIT;
>>> + if (params->rq_wq_type == MLX5_WQ_TYPE_CYCLIC) {
>>> + val |= NETDEV_XDP_ACT_RX_SG;
>>> + if (ndo_xmit)
>>> + val |= NETDEV_XDP_ACT_NDO_XMIT_SG;
>>
>> This NETDEV_XDP_ACT_NDO_XMIT_SG capability is not related to the RQ type.
>> It's still not supported at this point.
>
> ack, I will fix it.
>
>>
>> BTW, I have a series completing all the missing capabilities (multibuf on
>> Striding + multibuf redirect-in), should be submitted in this kernel.
>
> cool :)
>
> Regards,
> Lorenzo
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 7/8] net/mlx5e: take into account device reconfiguration for xdp_features flag
2023-03-09 7:23 ` Tariq Toukan
@ 2023-03-09 7:32 ` Jakub Kicinski
2023-03-09 8:40 ` Lorenzo Bianconi
2023-03-09 8:43 ` Lorenzo Bianconi
1 sibling, 1 reply; 18+ messages in thread
From: Jakub Kicinski @ 2023-03-09 7:32 UTC (permalink / raw)
To: Tariq Toukan
Cc: Lorenzo Bianconi, Lorenzo Bianconi, netdev, bpf, davem, edumazet,
pabeni, ast, daniel, hawk, john.fastabend, saeedm, leon, shayagr,
akiyano, darinzon, sgoutham, toke, teknoraver, Tariq Toukan
On Thu, 9 Mar 2023 09:23:10 +0200 Tariq Toukan wrote:
> > Hi Tariq,
> >
> > I am fine to repost this series for net instead of net-next. Any downsides about
> > it?
>
> Let's repost to net.
> It's a fixes series, and 6.3 is still in its RCs.
> If you don't post it to net then the xdp-features in 6.3 will be broken.
minor heads up - patch 2 will now apply to lib/nlspec.py
I just moved the enum classes there as part of another fix
but the code and the changes should be identical
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 7/8] net/mlx5e: take into account device reconfiguration for xdp_features flag
2023-03-09 7:32 ` Jakub Kicinski
@ 2023-03-09 8:40 ` Lorenzo Bianconi
0 siblings, 0 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-09 8:40 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Tariq Toukan, Lorenzo Bianconi, netdev, bpf, davem, edumazet,
pabeni, ast, daniel, hawk, john.fastabend, saeedm, leon, shayagr,
akiyano, darinzon, sgoutham, toke, teknoraver, Tariq Toukan
[-- Attachment #1: Type: text/plain, Size: 612 bytes --]
> On Thu, 9 Mar 2023 09:23:10 +0200 Tariq Toukan wrote:
> > > Hi Tariq,
> > >
> > > I am fine to repost this series for net instead of net-next. Any downsides about
> > > it?
> >
> > Let's repost to net.
> > It's a fixes series, and 6.3 is still in its RCs.
> > If you don't post it to net then the xdp-features in 6.3 will be broken.
>
> minor heads up - patch 2 will now apply to lib/nlspec.py
> I just moved the enum classes there as part of another fix
> but the code and the changes should be identical
>
ack, fine. I will fix the conflicts rebasing on net tree.
Regards,
Lorenzo
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH net-next 7/8] net/mlx5e: take into account device reconfiguration for xdp_features flag
2023-03-09 7:23 ` Tariq Toukan
2023-03-09 7:32 ` Jakub Kicinski
@ 2023-03-09 8:43 ` Lorenzo Bianconi
1 sibling, 0 replies; 18+ messages in thread
From: Lorenzo Bianconi @ 2023-03-09 8:43 UTC (permalink / raw)
To: Tariq Toukan
Cc: Lorenzo Bianconi, netdev, bpf, davem, edumazet, kuba, pabeni, ast,
daniel, hawk, john.fastabend, saeedm, leon, shayagr, akiyano,
darinzon, sgoutham, toke, teknoraver, Tariq Toukan
[-- Attachment #1: Type: text/plain, Size: 8225 bytes --]
>
>
> On 08/03/2023 17:47, Lorenzo Bianconi wrote:
> > >
> > >
> > > On 07/03/2023 16:54, Lorenzo Bianconi wrote:
> > > > Take into account LRO and GRO configuration setting device xdp_features
> > > > flag. Moreover consider channel rq_wq_type enabling rx scatter-gatter
> > > > support in xdp_features flag.
> > > >
> > > > Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
> > > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > > > ---
> > > > drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 +
> > > > .../ethernet/mellanox/mlx5/core/en_ethtool.c | 10 ++++-
> > > > .../net/ethernet/mellanox/mlx5/core/en_main.c | 45 ++++++++++++++++---
> > > > .../net/ethernet/mellanox/mlx5/core/en_rep.c | 3 ++
> > > > 4 files changed, 51 insertions(+), 8 deletions(-)
> > > >
> > > > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
> > > > index 88460b7796e5..4276c6eb6820 100644
> > > > --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
> > > > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
> > > > @@ -1243,6 +1243,7 @@ void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16
> > > > void mlx5e_rx_dim_work(struct work_struct *work);
> > > > void mlx5e_tx_dim_work(struct work_struct *work);
> > > > +void mlx5e_set_xdp_feature(struct net_device *netdev);
> > > > netdev_features_t mlx5e_features_check(struct sk_buff *skb,
> > > > struct net_device *netdev,
> > > > netdev_features_t features);
> > > > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> > > > index 7708acc9b2ab..79fd21ecb9cb 100644
> > > > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> > > > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> > > > @@ -1985,6 +1985,7 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
> > > > struct mlx5e_priv *priv = netdev_priv(netdev);
> > > > struct mlx5_core_dev *mdev = priv->mdev;
> > > > struct mlx5e_params new_params;
> > > > + int err;
> > > > if (enable) {
> > > > /* Checking the regular RQ here; mlx5e_validate_xsk_param called
> > > > @@ -2005,7 +2006,14 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
> > > > MLX5E_SET_PFLAG(&new_params, MLX5E_PFLAG_RX_STRIDING_RQ, enable);
> > > > mlx5e_set_rq_type(mdev, &new_params);
> > > > - return mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
> > > > + err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
> > > > + if (err)
> > > > + return err;
> > > > +
> > > > + /* update XDP supported features */
> > > > + mlx5e_set_xdp_feature(netdev);
> > > > +
> > > > + return 0;
> > > > }
> > > > static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)
> > > > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > > > index 76a9c5194a70..1b68dd2be2c5 100644
> > > > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > > > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > > > @@ -4004,6 +4004,30 @@ static int mlx5e_handle_feature(struct net_device *netdev,
> > > > return 0;
> > > > }
> > > > +void mlx5e_set_xdp_feature(struct net_device *netdev)
> > > > +{
> > > > + struct mlx5e_priv *priv = netdev_priv(netdev);
> > > > + bool ndo_xmit = test_bit(MLX5E_STATE_XDP_ACTIVE, &priv->state);
> > >
> > > Our driver doesn't require loading a dummy XDP program to have the
> > > redirect-in ability. It's always there.
> > >
> > > I actually have a bug fix under internal review with Saeed that addresses
> > > this.
> > >
> > > In addition, it cleans up the NETDEV_XDP_ACT_NDO_XMIT_SG as we do not
> > > support it yet. I have a series that's adding support and will submit it
> > > soon.
> > >
> > > Any reason you're submitting these fixes to net-next rather than net?
> >
> > Hi Tariq,
> >
> > I am fine to repost this series for net instead of net-next. Any downsides about
> > it?
>
> Let's repost to net.
> It's a fixes series, and 6.3 is still in its RCs.
> If you don't post it to net then the xdp-features in 6.3 will be broken.
ack, fine.
>
> >
> > > Maybe it'd be better if we integrate the patches, here's my fix (still under
> > > review...):
> > >
> > > Author: Tariq Toukan <tariqt@nvidia.com>
> > > Date: Thu Feb 23 08:58:04 2023 +0200
> > >
> > > net/mlx5e: Fix exposed xdp_features
> > >
> > > Always declare NETDEV_XDP_ACT_NDO_XMIT as the ndo_xdp_xmit callback
> > > is always functional per our design, and does not require loading
> > > a dummy xdp program.
> > >
> > > Although non-linear XDP buffer is supported for XDP_TX flow, do not
> > > declare NETDEV_XDP_ACT_NDO_XMIT_SG as it is yet supported for
> > > redirected-in frames.
> > >
> > > Fixes: 66c0e13ad236 ("drivers: net: turn on XDP features")
> > > Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
> > >
> > > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > > b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > > index 53feb0529943..9a5d3ce1fbcd 100644
> > > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > > @@ -4741,13 +4741,6 @@ static int mlx5e_xdp_set(struct net_device *netdev,
> > > struct bpf_prog *prog)
> > > if (old_prog)
> > > bpf_prog_put(old_prog);
> > >
> > > - if (reset) {
> > > - if (prog)
> > > - xdp_features_set_redirect_target(netdev, true);
> > > - else
> > > - xdp_features_clear_redirect_target(netdev);
> > > - }
> > > -
> > > if (!test_bit(MLX5E_STATE_OPENED, &priv->state) || reset)
> > > goto unlock;
> > >
> > > @@ -5144,6 +5137,7 @@ static void mlx5e_build_nic_netdev(struct net_device
> > > *netdev)
> > > netdev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
> > >
> > > netdev->xdp_features = NETDEV_XDP_ACT_BASIC |
> > > NETDEV_XDP_ACT_REDIRECT |
> > > + NETDEV_XDP_ACT_NDO_XMIT |
> > > NETDEV_XDP_ACT_XSK_ZEROCOPY |
> > > NETDEV_XDP_ACT_RX_SG;
> >
> > I am fine to drop this my patch and rely on the one you provided but it depends
> > on the eta about the described patches because otherwise real capabilities and
> > xdp-features will not be aligned. Any inputs on it?
> >
>
> My patch doesn't replace yours, as it doesn't fix the missing
> features_update according to striding RQ and HW LRO/GRO.
>
> I think we should combine them, either take mine as-is into your series, or
> squash it into this patch. I'm fine with both.
ack fine, I will squash your changes into the patch posting a new version, thx.
Regards,
Lorenzo
>
> > >
> > >
> > > > + struct mlx5e_params *params = &priv->channels.params;
> > > > + xdp_features_t val;
> > > > +
> > > > + if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
> > > > + xdp_clear_features_flag(netdev);
> > > > + return;
> > > > + }
> > > > +
> > > > + val = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
> > > > + NETDEV_XDP_ACT_XSK_ZEROCOPY;
> > > > + if (ndo_xmit)
> > > > + val |= NETDEV_XDP_ACT_NDO_XMIT;
> > > > + if (params->rq_wq_type == MLX5_WQ_TYPE_CYCLIC) {
> > > > + val |= NETDEV_XDP_ACT_RX_SG;
> > > > + if (ndo_xmit)
> > > > + val |= NETDEV_XDP_ACT_NDO_XMIT_SG;
> > >
> > > This NETDEV_XDP_ACT_NDO_XMIT_SG capability is not related to the RQ type.
> > > It's still not supported at this point.
> >
> > ack, I will fix it.
> >
> > >
> > > BTW, I have a series completing all the missing capabilities (multibuf on
> > > Striding + multibuf redirect-in), should be submitted in this kernel.
> >
> > cool :)
> >
> > Regards,
> > Lorenzo
> >
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2023-03-09 8:45 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-07 14:53 [PATCH net-next 0/8] update xdp_features flag according to NIC re-configuration Lorenzo Bianconi
2023-03-07 14:53 ` [PATCH net-next 1/8] tools: ynl: fix render-max for flags definition Lorenzo Bianconi
2023-03-08 8:06 ` Jakub Kicinski
2023-03-08 10:28 ` Lorenzo Bianconi
2023-03-07 14:53 ` [PATCH net-next 2/8] tools: ynl: fix get_mask utility routine Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 3/8] xdp: add xdp_set_features_flag " Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 4/8] net: thunderx: take into account xdp_features setting tx/rx queues Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 5/8] net: ena: " Lorenzo Bianconi
2023-03-08 10:25 ` Shay Agroskin
2023-03-07 14:54 ` [PATCH net-next 6/8] veth: take into account device reconfiguration for xdp_features flag Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 7/8] net/mlx5e: " Lorenzo Bianconi
2023-03-08 10:33 ` Tariq Toukan
2023-03-08 15:47 ` Lorenzo Bianconi
2023-03-09 7:23 ` Tariq Toukan
2023-03-09 7:32 ` Jakub Kicinski
2023-03-09 8:40 ` Lorenzo Bianconi
2023-03-09 8:43 ` Lorenzo Bianconi
2023-03-07 14:54 ` [PATCH net-next 8/8] mvpp2: take care of xdp_features when reconfiguring queues Lorenzo Bianconi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).