From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
This series contains updates to ice driver only.
Ani does not fail on link/PHY errors during probe as this is not a fatal
error to prevent the user from remedying the problem. He also corrects
checking Wake on LAN support to be port number, not PF ID.
Fabio increases the AdminQ timeout as some commands can take longer than
the current value.
Chinh fixes iSCSI to use be able to use port 860 by using information
from DCBx and other QoS configuration info.
Krzysztof fixes a possible race between ice_open() and ice_stop().
Bruce corrects the ordering of arguments in a memory allocation call.
Dave removes DCBNL device reset bit which is blocking changes coming
from DCBNL interface.
Jacek adds error handling for filter allocation failure.
Robert ensures memory is freed if VSI filter list issues are
encountered.
The following are changes since commit 1b479fb801602b22512f53c19b1f93a4fc5d5d9d:
drivers/net/wan/hdlc_fr: Fix a double free in pvc_xmit
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue 100GbE
Anirudh Venkataramanan (2):
ice: Continue probe on link/PHY errors
ice: Use port number instead of PF ID for WoL
Bruce Allan (1):
ice: fix memory allocation call
Chinh T Cao (1):
ice: Recognize 860 as iSCSI port in CEE mode
Dave Ertman (1):
ice: remove DCBNL_DEVRESET bit from PF state
Fabio Pricoco (1):
ice: Increase control queue timeout
Jacek Bułatek (1):
ice: Fix for dereference of NULL pointer
Krzysztof Goreczny (1):
ice: prevent ice_open and ice_stop during reset
Robert Malz (1):
ice: Cleanup fltr list in case of allocation issues
drivers/net/ethernet/intel/ice/ice.h | 4 +-
drivers/net/ethernet/intel/ice/ice_common.c | 2 +-
drivers/net/ethernet/intel/ice/ice_controlq.h | 4 +-
drivers/net/ethernet/intel/ice/ice_dcb.c | 38 ++++++++++----
drivers/net/ethernet/intel/ice/ice_dcb_nl.c | 2 -
drivers/net/ethernet/intel/ice/ice_ethtool.c | 4 +-
drivers/net/ethernet/intel/ice/ice_lib.c | 5 +-
drivers/net/ethernet/intel/ice/ice_main.c | 52 ++++++++++++++-----
drivers/net/ethernet/intel/ice/ice_switch.c | 15 +++---
drivers/net/ethernet/intel/ice/ice_type.h | 1 +
10 files changed, 86 insertions(+), 41 deletions(-)
--
2.26.2
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:31
From: Krzysztof Goreczny <redacted>
There is a possibility of race between ice_open or ice_stop calls
performed by OS and reset handling routine both trying to modify VSI
resources. Observed scenarios:
- reset handler deallocates memory in ice_vsi_free_arrays and ice_open
tries to access it in ice_vsi_cfg_txq leading to driver crash
- reset handler deallocates memory in ice_vsi_free_arrays and ice_close
tries to access it in ice_down leading to driver crash
- reset handler clears port scheduler topology and sets port state to
ICE_SCHED_PORT_STATE_INIT leading to ice_ena_vsi_txq fail in ice_open
To prevent this additional checks in ice_open and ice_stop are
introduced to make sure that OS is not allowed to alter VSI config while
reset is in progress.
Fixes: cdedef59deb0 ("ice: Configure VSIs for Tx/Rx")
Signed-off-by: Krzysztof Goreczny <redacted>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice.h | 1 +
drivers/net/ethernet/intel/ice/ice_lib.c | 4 ++--
drivers/net/ethernet/intel/ice/ice_main.c | 28 +++++++++++++++++++++++
3 files changed, 31 insertions(+), 2 deletions(-)
@@ -6632,6 +6632,28 @@ static void ice_tx_timeout(struct net_device *netdev, unsigned int txqueue)*Returns0onsuccess,negativevalueonfailure*/intice_open(structnet_device*netdev)+{+structice_netdev_priv*np=netdev_priv(netdev);+structice_pf*pf=np->vsi->back;++if(ice_is_reset_in_progress(pf->state)){+netdev_err(netdev,"can't open net device while reset is in progress");+return-EBUSY;+}++returnice_open_internal(netdev);+}++/**+*ice_open_internal-Calledwhenanetworkinterfacebecomesactive+*@netdev:networkinterfacedevicestructure+*+*Internalice_openimplementation.Shouldnotbeuseddirectlyexceptforice_openandreset+*handlingroutine+*+*Returns0onsuccess,negativevalueonfailure+*/+intice_open_internal(structnet_device*netdev){structice_netdev_priv*np=netdev_priv(netdev);structice_vsi*vsi=np->vsi;
@@ -6712,6 +6734,12 @@ int ice_stop(struct net_device *netdev){structice_netdev_priv*np=netdev_priv(netdev);structice_vsi*vsi=np->vsi;+structice_pf*pf=vsi->back;++if(ice_is_reset_in_progress(pf->state)){+netdev_err(netdev,"can't stop net device while reset is in progress");+return-EBUSY;+}ice_vsi_close(vsi);
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
From: Anirudh Venkataramanan <redacted>
An incorrect NVM update procedure can result in the driver failing probe.
In this case, the recommended resolution method is to update the NVM
using the right procedure. However, if the driver fails probe, the user
will not be able to update the NVM. So do not fail probe on link/PHY
errors.
Fixes: 1a3571b5938c ("ice: restore PHY settings on media insertion")
Signed-off-by: Anirudh Venkataramanan <redacted>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice_main.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
@@ -4192,28 +4192,25 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)gotoerr_send_version_unroll;}+/* not a fatal error if this fails */err=ice_init_nvm_phy_type(pf->hw.port_info);-if(err){+if(err)dev_err(dev,"ice_init_nvm_phy_type failed: %d\n",err);-gotoerr_send_version_unroll;-}+/* not a fatal error if this fails */err=ice_update_link_info(pf->hw.port_info);-if(err){+if(err)dev_err(dev,"ice_update_link_info failed: %d\n",err);-gotoerr_send_version_unroll;-}ice_init_link_dflt_override(pf->hw.port_info);/* if media available, initialize PHY settings */if(pf->hw.port_info->phy.link_info.link_info&ICE_AQ_MEDIA_AVAILABLE){+/* not a fatal error if this fails */err=ice_init_phy_user_cfg(pf->hw.port_info);-if(err){+if(err)dev_err(dev,"ice_init_phy_user_cfg failed: %d\n",err);-gotoerr_send_version_unroll;-}if(!test_bit(ICE_FLAG_LINK_DOWN_ON_CLOSE_ENA,pf->flags)){structice_vsi*vsi=ice_get_main_vsi(pf);
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
From: Jacek Bułatek <redacted>
Add handling of allocation fault for ice_vsi_list_map_info.
Also *fi should not be NULL pointer, it is a reference to raw
data field, so remove this variable and use the reference
directly.
Fixes: 9daf8208dd4d ("ice: Add support for switch filter programming")
Signed-off-by: Jacek Bułatek <redacted>
Co-developed-by: Haiyue Wang <redacted>
Signed-off-by: Haiyue Wang <redacted>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice_switch.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
@@ -1238,6 +1238,9 @@ ice_add_update_vsi_list(struct ice_hw *hw,ice_create_vsi_list_map(hw,&vsi_handle_arr[0],2,vsi_list_id);+if(!m_entry->vsi_list_info)+returnICE_ERR_NO_MEMORY;+/* If this entry was large action then the large action needs*tobeupdatedtopointtoFWDtoVSIlist*/
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
From: Anirudh Venkataramanan <redacted>
As per the spec, the WoL control word read from the NVM should be
interpreted as port numbers, and not PF numbers. So when checking
if WoL supported, use the port number instead of the PF ID.
Also, ice_is_wol_supported doesn't really need a pointer to the pf
struct, but just needs a pointer to the hw instance.
Fixes: 769c500dcc1e ("ice: Add advanced power mgmt for WoL")
Signed-off-by: Anirudh Venkataramanan <redacted>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice.h | 2 +-
drivers/net/ethernet/intel/ice/ice_ethtool.c | 4 ++--
drivers/net/ethernet/intel/ice/ice_main.c | 9 ++++-----
3 files changed, 7 insertions(+), 8 deletions(-)
@@ -3472,7 +3472,7 @@ static void ice_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)netdev_warn(netdev,"Wake on LAN is not supported on this interface!\n");/* Get WoL settings based on the HW capability */-if(ice_is_wol_supported(pf)){+if(ice_is_wol_supported(&pf->hw)){wol->supported=WAKE_MAGIC;wol->wolopts=pf->wol_ena?WAKE_MAGIC:0;}else{
@@ -3492,7 +3492,7 @@ static int ice_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)structice_vsi*vsi=np->vsi;structice_pf*pf=vsi->back;-if(vsi->type!=ICE_VSI_PF||!ice_is_wol_supported(pf))+if(vsi->type!=ICE_VSI_PF||!ice_is_wol_supported(&pf->hw))return-EOPNOTSUPP;/* only magic packet is supported */
@@ -3537,15 +3537,14 @@ static int ice_init_interrupt_scheme(struct ice_pf *pf)}/**-*ice_is_wol_supported-getNVMstateofWoL-*@pf:boardprivatestructure+*ice_is_wol_supported-checkifWoLissupported+*@hw:pointertohardwareinfo**CheckifWoLissupportedbasedontheHWconfiguration.*ReturnstrueifNVMsupportsandenablesWoLforthisport,falseotherwise*/-boolice_is_wol_supported(structice_pf*pf)+boolice_is_wol_supported(structice_hw*hw){-structice_hw*hw=&pf->hw;u16wol_ctrl;/* A bit set to 1 in the NVM Software Reserved Word 2 (WoL control
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
From: Dave Ertman <david.m.ertman@intel.com>
The original purpose of the ICE_DCBNL_DEVRESET was to protect
the driver during DCBNL device resets. But, the flow for
DCBNL device resets now consists of only calls up the stack
such as dev_close() and dev_open() that will result in NDO calls
to the driver. These will be handled with state changes from the
stack. Also, there is a problem of the dev_close and dev_open
being blocked by checks for reset in progress also using the
ICE_DCBNL_DEVRESET bit.
Since the ICE_DCBNL_DEVRESET bit is not necessary for protecting
the driver from DCBNL device resets and it is actually blocking
changes coming from the DCBNL interface, remove the bit from the
PF state and don't block driver function based on DCBNL reset in
progress.
Fixes: b94b013eb626 ("ice: Implement DCBNL support")
Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice.h | 1 -
drivers/net/ethernet/intel/ice/ice_dcb_nl.c | 2 --
drivers/net/ethernet/intel/ice/ice_lib.c | 1 -
3 files changed, 4 deletions(-)
@@ -196,7 +196,6 @@ enum ice_state {__ICE_NEEDS_RESTART,__ICE_PREPARED_FOR_RESET,/* set by driver when prepared */__ICE_RESET_OICR_RECV,/* set by driver after rcv reset OICR */-__ICE_DCBNL_DEVRESET,/* set by dcbnl devreset */__ICE_PFR_REQ,/* set by driver and peers */__ICE_CORER_REQ,/* set by driver and peers */__ICE_GLOBR_REQ,/* set by driver and peers */
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
From: Chinh T Cao <redacted>
iSCSI can use both TCP ports 860 and 3260. However, in our current
implementation, the ice_aqc_opc_get_cee_dcb_cfg (0x0A07) AQ command
doesn't provide a way to communicate the protocol port number to the
AQ's caller. Thus, we assume that 3260 is the iSCSI port number at the
AQ's caller layer.
Rely on the dcbx-willing mode, desired QoS and remote QoS configuration to
determine which port number that iSCSI will use.
Fixes: 0ebd3ff13cca ("ice: Add code for DCB initialization part 2/4")
Signed-off-by: Chinh T Cao <redacted>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice_dcb.c | 38 +++++++++++++++++------
drivers/net/ethernet/intel/ice/ice_type.h | 1 +
2 files changed, 30 insertions(+), 9 deletions(-)
@@ -738,22 +738,27 @@ ice_aq_get_cee_dcb_cfg(struct ice_hw *hw,/***ice_cee_to_dcb_cfg*@cee_cfg:pointertoCEEconfigurationstruct-*@dcbcfg:DCBconfigurationstruct+*@pi:portinformationstructure**ConvertCEEconfigurationfromfirmwaretoDCBconfiguration*/staticvoidice_cee_to_dcb_cfg(structice_aqc_get_cee_dcb_cfg_resp*cee_cfg,-structice_dcbx_cfg*dcbcfg)+structice_port_info*pi){u32status,tlv_status=le32_to_cpu(cee_cfg->tlv_status);u32ice_aqc_cee_status_mask,ice_aqc_cee_status_shift;+u8i,j,err,sync,oper,app_index,ice_app_sel_type;u16app_prio=le16_to_cpu(cee_cfg->oper_app_prio);-u8i,err,sync,oper,app_index,ice_app_sel_type;u16ice_aqc_cee_app_mask,ice_aqc_cee_app_shift;+structice_dcbx_cfg*cmp_dcbcfg,*dcbcfg;u16ice_app_prot_id_type;-/* CEE PG data to ETS config */+dcbcfg=&pi->qos_cfg.local_dcbx_cfg;+dcbcfg->dcbx_mode=ICE_DCBX_MODE_CEE;+dcbcfg->tlv_status=tlv_status;++/* CEE PG data */dcbcfg->etscfg.maxtcs=cee_cfg->oper_num_tc;/* Note that the FW creates the oper_prio_tc nibbles reversed
@@ -780,10 +785,16 @@ ice_cee_to_dcb_cfg(struct ice_aqc_get_cee_dcb_cfg_resp *cee_cfg,}}-/* CEE PFC data to ETS config */+/* CEE PFC data */dcbcfg->pfc.pfcena=cee_cfg->oper_pfc_en;dcbcfg->pfc.pfccap=ICE_MAX_TRAFFIC_CLASS;+/* CEE APP TLV data */+if(dcbcfg->app_mode==ICE_DCBX_APPS_NON_WILLING)+cmp_dcbcfg=&pi->qos_cfg.desired_dcbx_cfg;+else+cmp_dcbcfg=&pi->qos_cfg.remote_dcbx_cfg;+app_index=0;for(i=0;i<3;i++){if(i==0){
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
From: Robert Malz <redacted>
When ice_remove_vsi_lkup_fltr is called, by calling
ice_add_to_vsi_fltr_list local copy of vsi filter list
is created. If any issues during creation of vsi filter
list occurs it up for the caller to free already
allocated memory. This patch ensures proper memory
deallocation in these cases.
Fixes: 80d144c9ac82 ("ice: Refactor switch rule management structures and functions")
Signed-off-by: Robert Malz <redacted>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice_switch.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
From: Bruce Allan <redacted>
Fix the order of number of array members and member size parameters in a
*calloc() call.
Fixes: b3c3890489f6 ("ice: avoid unnecessary single-member variable-length structs")
Signed-off-by: Bruce Allan <redacted>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice_common.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Tony Nguyen <anthony.l.nguyen@intel.com> Date: 2021-03-29 20:18:32
From: Fabio Pricoco <redacted>
250 msec timeout is insufficient for some AQ commands. Advice from FW
team was to increase the timeout. Increase to 1 second.
Fixes: 7ec59eeac804 ("ice: Add support for control queues")
Signed-off-by: Fabio Pricoco <redacted>
Tested-by: Tony Brelinski <redacted>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice_controlq.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Hello:
This series was applied to netdev/net.git (refs/heads/master):
On Mon, 29 Mar 2021 13:18:48 -0700 you wrote:
This series contains updates to ice driver only.
Ani does not fail on link/PHY errors during probe as this is not a fatal
error to prevent the user from remedying the problem. He also corrects
checking Wake on LAN support to be port number, not PF ID.
Fabio increases the AdminQ timeout as some commands can take longer than
the current value.
[...]