mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
net: ena: take into account xdp_features setting tx/rx queues
ena nic allows xdp just if enough hw queues are available for XDP.
Take into account queues configuration setting xdp_features.
Fixes: 66c0e13ad2
("drivers: net: turn on XDP features")
Reviewed-by: Shay Agroskin <shayagr@amazon.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
3c249fe4de
commit
7aa6dc351b
2 changed files with 16 additions and 5 deletions
|
@ -850,11 +850,20 @@ static int ena_set_channels(struct net_device *netdev,
|
||||||
struct ena_adapter *adapter = netdev_priv(netdev);
|
struct ena_adapter *adapter = netdev_priv(netdev);
|
||||||
u32 count = channels->combined_count;
|
u32 count = channels->combined_count;
|
||||||
/* The check for max value is already done in ethtool */
|
/* The check for max value is already done in ethtool */
|
||||||
if (count < ENA_MIN_NUM_IO_QUEUES ||
|
if (count < ENA_MIN_NUM_IO_QUEUES)
|
||||||
(ena_xdp_present(adapter) &&
|
|
||||||
!ena_xdp_legal_queue_count(adapter, count)))
|
|
||||||
return -EINVAL;
|
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);
|
return ena_update_queue_count(adapter, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4105,8 +4105,6 @@ static void ena_set_conf_feat_params(struct ena_adapter *adapter,
|
||||||
/* Set offload features */
|
/* Set offload features */
|
||||||
ena_set_dev_offloads(feat, netdev);
|
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;
|
adapter->max_mtu = feat->dev_attr.max_mtu;
|
||||||
netdev->max_mtu = adapter->max_mtu;
|
netdev->max_mtu = adapter->max_mtu;
|
||||||
netdev->min_mtu = ENA_MIN_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);
|
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);
|
memcpy(adapter->netdev->perm_addr, adapter->mac_addr, netdev->addr_len);
|
||||||
|
|
||||||
netif_carrier_off(netdev);
|
netif_carrier_off(netdev);
|
||||||
|
|
Loading…
Reference in a new issue