Commit 6cde05ab authored by David S. Miller's avatar David S. Miller

Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue

Tony Nguyen says:

====================
Intel Wired LAN Driver Updates 2021-06-09

This series contains updates to ice driver only.

Maciej informs the user when XDP is not supported due to the driver
being in the 'safe mode' state. He also adds a parameter to Tx queue
configuration to resolve an issue in configuring XDP queues as it cannot
rely on using the number Tx or Rx queues.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 13c62f53 2e84f6b3
...@@ -1717,12 +1717,13 @@ int ice_vsi_cfg_rxqs(struct ice_vsi *vsi) ...@@ -1717,12 +1717,13 @@ int ice_vsi_cfg_rxqs(struct ice_vsi *vsi)
* ice_vsi_cfg_txqs - Configure the VSI for Tx * ice_vsi_cfg_txqs - Configure the VSI for Tx
* @vsi: the VSI being configured * @vsi: the VSI being configured
* @rings: Tx ring array to be configured * @rings: Tx ring array to be configured
* @count: number of Tx ring array elements
* *
* Return 0 on success and a negative value on error * Return 0 on success and a negative value on error
* Configure the Tx VSI for operation. * Configure the Tx VSI for operation.
*/ */
static int static int
ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings) ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings, u16 count)
{ {
struct ice_aqc_add_tx_qgrp *qg_buf; struct ice_aqc_add_tx_qgrp *qg_buf;
u16 q_idx = 0; u16 q_idx = 0;
...@@ -1734,7 +1735,7 @@ ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings) ...@@ -1734,7 +1735,7 @@ ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings)
qg_buf->num_txqs = 1; qg_buf->num_txqs = 1;
for (q_idx = 0; q_idx < vsi->num_txq; q_idx++) { for (q_idx = 0; q_idx < count; q_idx++) {
err = ice_vsi_cfg_txq(vsi, rings[q_idx], qg_buf); err = ice_vsi_cfg_txq(vsi, rings[q_idx], qg_buf);
if (err) if (err)
goto err_cfg_txqs; goto err_cfg_txqs;
...@@ -1754,7 +1755,7 @@ ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings) ...@@ -1754,7 +1755,7 @@ ice_vsi_cfg_txqs(struct ice_vsi *vsi, struct ice_ring **rings)
*/ */
int ice_vsi_cfg_lan_txqs(struct ice_vsi *vsi) int ice_vsi_cfg_lan_txqs(struct ice_vsi *vsi)
{ {
return ice_vsi_cfg_txqs(vsi, vsi->tx_rings); return ice_vsi_cfg_txqs(vsi, vsi->tx_rings, vsi->num_txq);
} }
/** /**
...@@ -1769,7 +1770,7 @@ int ice_vsi_cfg_xdp_txqs(struct ice_vsi *vsi) ...@@ -1769,7 +1770,7 @@ int ice_vsi_cfg_xdp_txqs(struct ice_vsi *vsi)
int ret; int ret;
int i; int i;
ret = ice_vsi_cfg_txqs(vsi, vsi->xdp_rings); ret = ice_vsi_cfg_txqs(vsi, vsi->xdp_rings, vsi->num_xdp_txq);
if (ret) if (ret)
return ret; return ret;
...@@ -2009,17 +2010,18 @@ int ice_vsi_stop_all_rx_rings(struct ice_vsi *vsi) ...@@ -2009,17 +2010,18 @@ int ice_vsi_stop_all_rx_rings(struct ice_vsi *vsi)
* @rst_src: reset source * @rst_src: reset source
* @rel_vmvf_num: Relative ID of VF/VM * @rel_vmvf_num: Relative ID of VF/VM
* @rings: Tx ring array to be stopped * @rings: Tx ring array to be stopped
* @count: number of Tx ring array elements
*/ */
static int static int
ice_vsi_stop_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src, ice_vsi_stop_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
u16 rel_vmvf_num, struct ice_ring **rings) u16 rel_vmvf_num, struct ice_ring **rings, u16 count)
{ {
u16 q_idx; u16 q_idx;
if (vsi->num_txq > ICE_LAN_TXQ_MAX_QDIS) if (vsi->num_txq > ICE_LAN_TXQ_MAX_QDIS)
return -EINVAL; return -EINVAL;
for (q_idx = 0; q_idx < vsi->num_txq; q_idx++) { for (q_idx = 0; q_idx < count; q_idx++) {
struct ice_txq_meta txq_meta = { }; struct ice_txq_meta txq_meta = { };
int status; int status;
...@@ -2047,7 +2049,7 @@ int ...@@ -2047,7 +2049,7 @@ int
ice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src, ice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
u16 rel_vmvf_num) u16 rel_vmvf_num)
{ {
return ice_vsi_stop_tx_rings(vsi, rst_src, rel_vmvf_num, vsi->tx_rings); return ice_vsi_stop_tx_rings(vsi, rst_src, rel_vmvf_num, vsi->tx_rings, vsi->num_txq);
} }
/** /**
...@@ -2056,7 +2058,7 @@ ice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src, ...@@ -2056,7 +2058,7 @@ ice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
*/ */
int ice_vsi_stop_xdp_tx_rings(struct ice_vsi *vsi) int ice_vsi_stop_xdp_tx_rings(struct ice_vsi *vsi)
{ {
return ice_vsi_stop_tx_rings(vsi, ICE_NO_RESET, 0, vsi->xdp_rings); return ice_vsi_stop_tx_rings(vsi, ICE_NO_RESET, 0, vsi->xdp_rings, vsi->num_xdp_txq);
} }
/** /**
......
...@@ -2555,6 +2555,20 @@ ice_xdp_setup_prog(struct ice_vsi *vsi, struct bpf_prog *prog, ...@@ -2555,6 +2555,20 @@ ice_xdp_setup_prog(struct ice_vsi *vsi, struct bpf_prog *prog,
return (ret || xdp_ring_err) ? -ENOMEM : 0; return (ret || xdp_ring_err) ? -ENOMEM : 0;
} }
/**
* ice_xdp_safe_mode - XDP handler for safe mode
* @dev: netdevice
* @xdp: XDP command
*/
static int ice_xdp_safe_mode(struct net_device __always_unused *dev,
struct netdev_bpf *xdp)
{
NL_SET_ERR_MSG_MOD(xdp->extack,
"Please provide working DDP firmware package in order to use XDP\n"
"Refer to Documentation/networking/device_drivers/ethernet/intel/ice.rst");
return -EOPNOTSUPP;
}
/** /**
* ice_xdp - implements XDP handler * ice_xdp - implements XDP handler
* @dev: netdevice * @dev: netdevice
...@@ -6937,6 +6951,7 @@ static const struct net_device_ops ice_netdev_safe_mode_ops = { ...@@ -6937,6 +6951,7 @@ static const struct net_device_ops ice_netdev_safe_mode_ops = {
.ndo_change_mtu = ice_change_mtu, .ndo_change_mtu = ice_change_mtu,
.ndo_get_stats64 = ice_get_stats64, .ndo_get_stats64 = ice_get_stats64,
.ndo_tx_timeout = ice_tx_timeout, .ndo_tx_timeout = ice_tx_timeout,
.ndo_bpf = ice_xdp_safe_mode,
}; };
static const struct net_device_ops ice_netdev_ops = { static const struct net_device_ops ice_netdev_ops = {
......
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