Merge branch '100GbE-Intel-Wired-LAN-Driver-Updates-2020-10-07'
Tony Nguyen says: ==================== 100GbE Intel Wired LAN Driver Updates 2020-10-07 This series contains updates to ice driver only. Andy Shevchenko changes usage to %*phD format to print small buffer as hex string. Bruce removes repeated words reported by checkpatch. Ani changes ice_info_get_dsn() to return void as it always returns success. Jake adds devlink reporting of fw.app.bundle_id. Moves devlink_port structure to ice_vsi to resolve issues with cleanup. Adds additional debug info for firmware updates. Bixuan Cui resolves -Wpointer-to-int-cast warnings. Dan adds additional packet type masks and checks to prevent overwriting existing Flow Director rules. ==================== Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
3b8f56ee0c
@ -69,6 +69,11 @@ The ``ice`` driver reports the following versions
|
||||
- The version of the DDP package that is active in the device. Note
|
||||
that both the name (as reported by ``fw.app.name``) and version are
|
||||
required to uniquely identify the package.
|
||||
* - ``fw.app.bundle_id``
|
||||
- 0xc0000001
|
||||
- Unique identifier for the DDP package loaded in the device. Also
|
||||
referred to as the DDP Track ID. Can be used to uniquely identify
|
||||
the specific DDP package.
|
||||
* - ``fw.netlist``
|
||||
- running
|
||||
- 1.1.2000-6.7.0
|
||||
|
@ -284,6 +284,10 @@ struct ice_vsi {
|
||||
spinlock_t arfs_lock; /* protects aRFS hash table and filter state */
|
||||
atomic_t *arfs_last_fltr_id;
|
||||
|
||||
/* devlink port data */
|
||||
struct devlink_port devlink_port;
|
||||
bool devlink_port_registered;
|
||||
|
||||
u16 max_frame;
|
||||
u16 rx_buf_len;
|
||||
|
||||
@ -375,9 +379,6 @@ enum ice_pf_flags {
|
||||
struct ice_pf {
|
||||
struct pci_dev *pdev;
|
||||
|
||||
/* devlink port data */
|
||||
struct devlink_port devlink_port;
|
||||
|
||||
struct devlink_region *nvm_region;
|
||||
struct devlink_region *devcaps_region;
|
||||
|
||||
|
@ -6,18 +6,14 @@
|
||||
#include "ice_devlink.h"
|
||||
#include "ice_fw_update.h"
|
||||
|
||||
static int ice_info_get_dsn(struct ice_pf *pf, char *buf, size_t len)
|
||||
static void ice_info_get_dsn(struct ice_pf *pf, char *buf, size_t len)
|
||||
{
|
||||
u8 dsn[8];
|
||||
|
||||
/* Copy the DSN into an array in Big Endian format */
|
||||
put_unaligned_be64(pci_get_dsn(pf->pdev), dsn);
|
||||
|
||||
snprintf(buf, len, "%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x",
|
||||
dsn[0], dsn[1], dsn[2], dsn[3],
|
||||
dsn[4], dsn[5], dsn[6], dsn[7]);
|
||||
|
||||
return 0;
|
||||
snprintf(buf, len, "%8phD", dsn);
|
||||
}
|
||||
|
||||
static int ice_info_pba(struct ice_pf *pf, char *buf, size_t len)
|
||||
@ -106,6 +102,13 @@ static int ice_info_ddp_pkg_version(struct ice_pf *pf, char *buf, size_t len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ice_info_ddp_pkg_bundle_id(struct ice_pf *pf, char *buf, size_t len)
|
||||
{
|
||||
snprintf(buf, len, "0x%08x", pf->hw.active_track_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ice_info_netlist_ver(struct ice_pf *pf, char *buf, size_t len)
|
||||
{
|
||||
struct ice_netlist_ver_info *netlist = &pf->hw.netlist_ver;
|
||||
@ -150,6 +153,7 @@ static const struct ice_devlink_version {
|
||||
running(DEVLINK_INFO_VERSION_GENERIC_FW_BUNDLE_ID, ice_info_eetrack),
|
||||
running("fw.app.name", ice_info_ddp_pkg_name),
|
||||
running(DEVLINK_INFO_VERSION_GENERIC_FW_APP, ice_info_ddp_pkg_version),
|
||||
running("fw.app.bundle_id", ice_info_ddp_pkg_bundle_id),
|
||||
running("fw.netlist", ice_info_netlist_ver),
|
||||
running("fw.netlist.build", ice_info_netlist_build),
|
||||
};
|
||||
@ -180,11 +184,7 @@ static int ice_devlink_info_get(struct devlink *devlink,
|
||||
return err;
|
||||
}
|
||||
|
||||
err = ice_info_get_dsn(pf, buf, sizeof(buf));
|
||||
if (err) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Unable to obtain serial number");
|
||||
return err;
|
||||
}
|
||||
ice_info_get_dsn(pf, buf, sizeof(buf));
|
||||
|
||||
err = devlink_info_serial_number_put(req, buf);
|
||||
if (err) {
|
||||
@ -283,6 +283,8 @@ ice_devlink_flash_update(struct devlink *devlink,
|
||||
return err;
|
||||
}
|
||||
|
||||
dev_dbg(dev, "Beginning flash update with file '%s'\n", params->file_name);
|
||||
|
||||
devlink_flash_update_begin_notify(devlink);
|
||||
devlink_flash_update_status_notify(devlink, "Preparing to flash", NULL, 0, 0);
|
||||
err = ice_flash_pldm_image(pf, fw, preservation, extack);
|
||||
@ -364,50 +366,60 @@ void ice_devlink_unregister(struct ice_pf *pf)
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_devlink_create_port - Create a devlink port for this PF
|
||||
* @pf: the PF to create a port for
|
||||
* ice_devlink_create_port - Create a devlink port for this VSI
|
||||
* @vsi: the VSI to create a port for
|
||||
*
|
||||
* Create and register a devlink_port for this PF. Note that although each
|
||||
* physical function is connected to a separate devlink instance, the port
|
||||
* will still be numbered according to the physical function ID.
|
||||
* Create and register a devlink_port for this VSI.
|
||||
*
|
||||
* Return: zero on success or an error code on failure.
|
||||
*/
|
||||
int ice_devlink_create_port(struct ice_pf *pf)
|
||||
int ice_devlink_create_port(struct ice_vsi *vsi)
|
||||
{
|
||||
struct devlink *devlink = priv_to_devlink(pf);
|
||||
struct ice_vsi *vsi = ice_get_main_vsi(pf);
|
||||
struct device *dev = ice_pf_to_dev(pf);
|
||||
struct devlink_port_attrs attrs = {};
|
||||
struct ice_port_info *pi;
|
||||
struct devlink *devlink;
|
||||
struct device *dev;
|
||||
struct ice_pf *pf;
|
||||
int err;
|
||||
|
||||
if (!vsi) {
|
||||
dev_err(dev, "%s: unable to find main VSI\n", __func__);
|
||||
return -EIO;
|
||||
}
|
||||
/* Currently we only create devlink_port instances for PF VSIs */
|
||||
if (vsi->type != ICE_VSI_PF)
|
||||
return -EINVAL;
|
||||
|
||||
pf = vsi->back;
|
||||
devlink = priv_to_devlink(pf);
|
||||
dev = ice_pf_to_dev(pf);
|
||||
pi = pf->hw.port_info;
|
||||
|
||||
attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
|
||||
attrs.phys.port_number = pf->hw.pf_id;
|
||||
devlink_port_attrs_set(&pf->devlink_port, &attrs);
|
||||
err = devlink_port_register(devlink, &pf->devlink_port, pf->hw.pf_id);
|
||||
attrs.phys.port_number = pi->lport;
|
||||
devlink_port_attrs_set(&vsi->devlink_port, &attrs);
|
||||
err = devlink_port_register(devlink, &vsi->devlink_port, vsi->idx);
|
||||
if (err) {
|
||||
dev_err(dev, "devlink_port_register failed: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
vsi->devlink_port_registered = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_devlink_destroy_port - Destroy the devlink_port for this PF
|
||||
* @pf: the PF to cleanup
|
||||
* ice_devlink_destroy_port - Destroy the devlink_port for this VSI
|
||||
* @vsi: the VSI to cleanup
|
||||
*
|
||||
* Unregisters the devlink_port structure associated with this PF.
|
||||
* Unregisters the devlink_port structure associated with this VSI.
|
||||
*/
|
||||
void ice_devlink_destroy_port(struct ice_pf *pf)
|
||||
void ice_devlink_destroy_port(struct ice_vsi *vsi)
|
||||
{
|
||||
devlink_port_type_clear(&pf->devlink_port);
|
||||
devlink_port_unregister(&pf->devlink_port);
|
||||
if (!vsi->devlink_port_registered)
|
||||
return;
|
||||
|
||||
devlink_port_type_clear(&vsi->devlink_port);
|
||||
devlink_port_unregister(&vsi->devlink_port);
|
||||
|
||||
vsi->devlink_port_registered = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -8,8 +8,8 @@ struct ice_pf *ice_allocate_pf(struct device *dev);
|
||||
|
||||
int ice_devlink_register(struct ice_pf *pf);
|
||||
void ice_devlink_unregister(struct ice_pf *pf);
|
||||
int ice_devlink_create_port(struct ice_pf *pf);
|
||||
void ice_devlink_destroy_port(struct ice_pf *pf);
|
||||
int ice_devlink_create_port(struct ice_vsi *vsi);
|
||||
void ice_devlink_destroy_port(struct ice_vsi *vsi);
|
||||
|
||||
void ice_devlink_init_regions(struct ice_pf *pf);
|
||||
void ice_devlink_destroy_regions(struct ice_pf *pf);
|
||||
|
@ -4876,7 +4876,7 @@ ice_rem_prof_id_flow(struct ice_hw *hw, enum ice_block blk, u16 vsi, u64 hdl)
|
||||
|
||||
if (last_profile) {
|
||||
/* If there are no profiles left for this VSIG,
|
||||
* then simply remove the the VSIG.
|
||||
* then simply remove the VSIG.
|
||||
*/
|
||||
status = ice_rem_vsig(hw, blk, vsig, &chg);
|
||||
if (status)
|
||||
|
@ -99,6 +99,54 @@ static const u32 ice_ptypes_ipv6_il[] = {
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
};
|
||||
|
||||
/* Packet types for packets with an Outer/First/Single IPv4 header - no L4 */
|
||||
static const u32 ice_ipv4_ofos_no_l4[] = {
|
||||
0x10C00000, 0x04000800, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
};
|
||||
|
||||
/* Packet types for packets with an Innermost/Last IPv4 header - no L4 */
|
||||
static const u32 ice_ipv4_il_no_l4[] = {
|
||||
0x60000000, 0x18043008, 0x80000002, 0x6010c021,
|
||||
0x00000008, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
};
|
||||
|
||||
/* Packet types for packets with an Outer/First/Single IPv6 header - no L4 */
|
||||
static const u32 ice_ipv6_ofos_no_l4[] = {
|
||||
0x00000000, 0x00000000, 0x43000000, 0x10002000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
};
|
||||
|
||||
/* Packet types for packets with an Innermost/Last IPv6 header - no L4 */
|
||||
static const u32 ice_ipv6_il_no_l4[] = {
|
||||
0x00000000, 0x02180430, 0x0000010c, 0x086010c0,
|
||||
0x00000430, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
};
|
||||
|
||||
/* UDP Packet types for non-tunneled packets or tunneled
|
||||
* packets with inner UDP.
|
||||
*/
|
||||
@ -250,11 +298,23 @@ ice_flow_proc_seg_hdrs(struct ice_flow_prof_params *params)
|
||||
|
||||
hdrs = prof->segs[i].hdrs;
|
||||
|
||||
if (hdrs & ICE_FLOW_SEG_HDR_IPV4) {
|
||||
if ((hdrs & ICE_FLOW_SEG_HDR_IPV4) &&
|
||||
!(hdrs & ICE_FLOW_SEG_HDRS_L4_MASK)) {
|
||||
src = !i ? (const unsigned long *)ice_ipv4_ofos_no_l4 :
|
||||
(const unsigned long *)ice_ipv4_il_no_l4;
|
||||
bitmap_and(params->ptypes, params->ptypes, src,
|
||||
ICE_FLOW_PTYPE_MAX);
|
||||
} else if (hdrs & ICE_FLOW_SEG_HDR_IPV4) {
|
||||
src = !i ? (const unsigned long *)ice_ptypes_ipv4_ofos :
|
||||
(const unsigned long *)ice_ptypes_ipv4_il;
|
||||
bitmap_and(params->ptypes, params->ptypes, src,
|
||||
ICE_FLOW_PTYPE_MAX);
|
||||
} else if ((hdrs & ICE_FLOW_SEG_HDR_IPV6) &&
|
||||
!(hdrs & ICE_FLOW_SEG_HDRS_L4_MASK)) {
|
||||
src = !i ? (const unsigned long *)ice_ipv6_ofos_no_l4 :
|
||||
(const unsigned long *)ice_ipv6_il_no_l4;
|
||||
bitmap_and(params->ptypes, params->ptypes, src,
|
||||
ICE_FLOW_PTYPE_MAX);
|
||||
} else if (hdrs & ICE_FLOW_SEG_HDR_IPV6) {
|
||||
src = !i ? (const unsigned long *)ice_ptypes_ipv6_ofos :
|
||||
(const unsigned long *)ice_ptypes_ipv6_il;
|
||||
@ -385,7 +445,7 @@ ice_flow_xtract_fld(struct ice_hw *hw, struct ice_flow_prof_params *params,
|
||||
* ice_flow_xtract_raws - Create extract sequence entries for raw bytes
|
||||
* @hw: pointer to the HW struct
|
||||
* @params: information about the flow to be processed
|
||||
* @seg: index of packet segment whose raw fields are to be be extracted
|
||||
* @seg: index of packet segment whose raw fields are to be extracted
|
||||
*/
|
||||
static enum ice_status
|
||||
ice_flow_xtract_raws(struct ice_hw *hw, struct ice_flow_prof_params *params,
|
||||
@ -999,7 +1059,7 @@ enum ice_status ice_flow_rem_entry(struct ice_hw *hw, enum ice_block blk,
|
||||
*
|
||||
* This helper function stores information of a field being matched, including
|
||||
* the type of the field and the locations of the value to match, the mask, and
|
||||
* and the upper-bound value in the start of the input buffer for a flow entry.
|
||||
* the upper-bound value in the start of the input buffer for a flow entry.
|
||||
* This function should only be used for fixed-size data structures.
|
||||
*
|
||||
* This function also opportunistically determines the protocol headers to be
|
||||
|
@ -194,8 +194,8 @@ struct ice_flow_entry {
|
||||
u16 entry_sz;
|
||||
};
|
||||
|
||||
#define ICE_FLOW_ENTRY_HNDL(e) ((u64)e)
|
||||
#define ICE_FLOW_ENTRY_PTR(h) ((struct ice_flow_entry *)(h))
|
||||
#define ICE_FLOW_ENTRY_HNDL(e) ((u64)(uintptr_t)e)
|
||||
#define ICE_FLOW_ENTRY_PTR(h) ((struct ice_flow_entry *)(uintptr_t)(h))
|
||||
|
||||
struct ice_flow_prof {
|
||||
struct list_head l_entry;
|
||||
|
@ -43,6 +43,8 @@ ice_send_package_data(struct pldmfw *context, const u8 *data, u16 length)
|
||||
enum ice_status status;
|
||||
u8 *package_data;
|
||||
|
||||
dev_dbg(dev, "Sending PLDM record package data to firmware\n");
|
||||
|
||||
package_data = kmemdup(data, length, GFP_KERNEL);
|
||||
if (!package_data)
|
||||
return -ENOMEM;
|
||||
@ -229,6 +231,8 @@ ice_send_component_table(struct pldmfw *context, struct pldmfw_component *compon
|
||||
comp_tbl->cvs_len = component->version_len;
|
||||
memcpy(comp_tbl->cvs, component->version_string, component->version_len);
|
||||
|
||||
dev_dbg(dev, "Sending component table to firmware:\n");
|
||||
|
||||
status = ice_nvm_pass_component_tbl(hw, (u8 *)comp_tbl, length,
|
||||
transfer_flag, &comp_response,
|
||||
&comp_response_code, NULL);
|
||||
@ -279,11 +283,14 @@ ice_write_one_nvm_block(struct ice_pf *pf, u16 module, u32 offset,
|
||||
|
||||
memset(&event, 0, sizeof(event));
|
||||
|
||||
dev_dbg(dev, "Writing block of %u bytes for module 0x%02x at offset %u\n",
|
||||
block_size, module, offset);
|
||||
|
||||
status = ice_aq_update_nvm(hw, module, offset, block_size, block,
|
||||
last_cmd, 0, NULL);
|
||||
if (status) {
|
||||
dev_err(dev, "Failed to program flash module 0x%02x at offset %u, err %s aq_err %s\n",
|
||||
module, offset, ice_stat_str(status),
|
||||
dev_err(dev, "Failed to flash module 0x%02x with block of size %u at offset %u, err %s aq_err %s\n",
|
||||
module, block_size, offset, ice_stat_str(status),
|
||||
ice_aq_str(hw->adminq.sq_last_status));
|
||||
NL_SET_ERR_MSG_MOD(extack, "Failed to program flash module");
|
||||
return -EIO;
|
||||
@ -297,8 +304,8 @@ ice_write_one_nvm_block(struct ice_pf *pf, u16 module, u32 offset,
|
||||
*/
|
||||
err = ice_aq_wait_for_event(pf, ice_aqc_opc_nvm_write, 15 * HZ, &event);
|
||||
if (err) {
|
||||
dev_err(dev, "Timed out waiting for firmware write completion for module 0x%02x, err %d\n",
|
||||
module, err);
|
||||
dev_err(dev, "Timed out while trying to flash module 0x%02x with block of size %u at offset %u, err %d\n",
|
||||
module, block_size, offset, err);
|
||||
NL_SET_ERR_MSG_MOD(extack, "Timed out waiting for firmware");
|
||||
return -EIO;
|
||||
}
|
||||
@ -324,8 +331,8 @@ ice_write_one_nvm_block(struct ice_pf *pf, u16 module, u32 offset,
|
||||
}
|
||||
|
||||
if (completion_retval) {
|
||||
dev_err(dev, "Firmware failed to program flash module 0x%02x at offset %u, completion err %s\n",
|
||||
module, offset,
|
||||
dev_err(dev, "Firmware failed to flash module 0x%02x with block of size %u at offset %u, err %s\n",
|
||||
module, block_size, offset,
|
||||
ice_aq_str((enum ice_aq_err)completion_retval));
|
||||
NL_SET_ERR_MSG_MOD(extack, "Firmware failed to program flash module");
|
||||
return -EIO;
|
||||
@ -356,12 +363,15 @@ ice_write_nvm_module(struct ice_pf *pf, u16 module, const char *component,
|
||||
const u8 *image, u32 length,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct device *dev = ice_pf_to_dev(pf);
|
||||
struct devlink *devlink;
|
||||
u32 offset = 0;
|
||||
bool last_cmd;
|
||||
u8 *block;
|
||||
int err;
|
||||
|
||||
dev_dbg(dev, "Beginning write of flash component '%s', module 0x%02x\n", component, module);
|
||||
|
||||
devlink = priv_to_devlink(pf);
|
||||
|
||||
devlink_flash_update_status_notify(devlink, "Flashing",
|
||||
@ -394,6 +404,8 @@ ice_write_nvm_module(struct ice_pf *pf, u16 module, const char *component,
|
||||
component, offset, length);
|
||||
} while (!last_cmd);
|
||||
|
||||
dev_dbg(dev, "Completed write of flash component '%s', module 0x%02x\n", component, module);
|
||||
|
||||
if (err)
|
||||
devlink_flash_update_status_notify(devlink, "Flashing failed",
|
||||
component, length, length);
|
||||
@ -431,6 +443,8 @@ ice_erase_nvm_module(struct ice_pf *pf, u16 module, const char *component,
|
||||
enum ice_status status;
|
||||
int err;
|
||||
|
||||
dev_dbg(dev, "Beginning erase of flash component '%s', module 0x%02x\n", component, module);
|
||||
|
||||
memset(&event, 0, sizeof(event));
|
||||
|
||||
devlink = priv_to_devlink(pf);
|
||||
@ -476,6 +490,8 @@ ice_erase_nvm_module(struct ice_pf *pf, u16 module, const char *component,
|
||||
goto out_notify_devlink;
|
||||
}
|
||||
|
||||
dev_dbg(dev, "Completed erase of flash component '%s', module 0x%02x\n", component, module);
|
||||
|
||||
out_notify_devlink:
|
||||
if (err)
|
||||
devlink_flash_update_status_notify(devlink, "Erasing failed",
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "ice_lib.h"
|
||||
#include "ice_fltr.h"
|
||||
#include "ice_dcb_lib.h"
|
||||
#include "ice_devlink.h"
|
||||
|
||||
/**
|
||||
* ice_vsi_type_str - maps VSI type enum to string equivalents
|
||||
@ -2616,8 +2617,10 @@ int ice_vsi_release(struct ice_vsi *vsi)
|
||||
* PF that is running the work queue items currently. This is done to
|
||||
* avoid check_flush_dependency() warning on this wq
|
||||
*/
|
||||
if (vsi->netdev && !ice_is_reset_in_progress(pf->state))
|
||||
if (vsi->netdev && !ice_is_reset_in_progress(pf->state)) {
|
||||
unregister_netdev(vsi->netdev);
|
||||
ice_devlink_destroy_port(vsi);
|
||||
}
|
||||
|
||||
if (test_bit(ICE_FLAG_RSS_ENA, pf->flags))
|
||||
ice_rss_clean(vsi);
|
||||
|
@ -1056,7 +1056,9 @@ struct ice_aq_task {
|
||||
int ice_aq_wait_for_event(struct ice_pf *pf, u16 opcode, unsigned long timeout,
|
||||
struct ice_rq_event_info *event)
|
||||
{
|
||||
struct device *dev = ice_pf_to_dev(pf);
|
||||
struct ice_aq_task *task;
|
||||
unsigned long start;
|
||||
long ret;
|
||||
int err;
|
||||
|
||||
@ -1073,6 +1075,8 @@ int ice_aq_wait_for_event(struct ice_pf *pf, u16 opcode, unsigned long timeout,
|
||||
hlist_add_head(&task->entry, &pf->aq_wait_list);
|
||||
spin_unlock_bh(&pf->aq_wait_lock);
|
||||
|
||||
start = jiffies;
|
||||
|
||||
ret = wait_event_interruptible_timeout(pf->aq_wait_queue, task->state,
|
||||
timeout);
|
||||
switch (task->state) {
|
||||
@ -1091,6 +1095,11 @@ int ice_aq_wait_for_event(struct ice_pf *pf, u16 opcode, unsigned long timeout,
|
||||
break;
|
||||
}
|
||||
|
||||
dev_dbg(dev, "Waited %u msecs (max %u msecs) for firmware response to op 0x%04x\n",
|
||||
jiffies_to_msecs(jiffies - start),
|
||||
jiffies_to_msecs(timeout),
|
||||
opcode);
|
||||
|
||||
spin_lock_bh(&pf->aq_wait_lock);
|
||||
hlist_del(&task->entry);
|
||||
spin_unlock_bh(&pf->aq_wait_lock);
|
||||
@ -2416,7 +2425,7 @@ int ice_destroy_xdp_rings(struct ice_vsi *vsi)
|
||||
int i, v_idx;
|
||||
|
||||
/* q_vectors are freed in reset path so there's no point in detaching
|
||||
* rings; in case of rebuild being triggered not from reset reset bits
|
||||
* rings; in case of rebuild being triggered not from reset bits
|
||||
* in pf->state won't be set, so additionally check first q_vector
|
||||
* against NULL
|
||||
*/
|
||||
@ -2953,7 +2962,7 @@ static int ice_cfg_netdev(struct ice_vsi *vsi)
|
||||
u8 mac_addr[ETH_ALEN];
|
||||
int err;
|
||||
|
||||
err = ice_devlink_create_port(pf);
|
||||
err = ice_devlink_create_port(vsi);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -2994,7 +3003,7 @@ static int ice_cfg_netdev(struct ice_vsi *vsi)
|
||||
if (err)
|
||||
goto err_free_netdev;
|
||||
|
||||
devlink_port_type_eth_set(&pf->devlink_port, vsi->netdev);
|
||||
devlink_port_type_eth_set(&vsi->devlink_port, vsi->netdev);
|
||||
|
||||
netif_carrier_off(vsi->netdev);
|
||||
|
||||
@ -3007,7 +3016,7 @@ err_free_netdev:
|
||||
free_netdev(vsi->netdev);
|
||||
vsi->netdev = NULL;
|
||||
err_destroy_devlink_port:
|
||||
ice_devlink_destroy_port(pf);
|
||||
ice_devlink_destroy_port(vsi);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -4242,7 +4251,6 @@ probe_done:
|
||||
err_send_version_unroll:
|
||||
ice_vsi_release_all(pf);
|
||||
err_alloc_sw_unroll:
|
||||
ice_devlink_destroy_port(pf);
|
||||
set_bit(__ICE_SERVICE_DIS, pf->state);
|
||||
set_bit(__ICE_DOWN, pf->state);
|
||||
devm_kfree(dev, pf->first_sw);
|
||||
@ -4357,7 +4365,6 @@ static void ice_remove(struct pci_dev *pdev)
|
||||
if (!ice_is_safe_mode(pf))
|
||||
ice_remove_arfs(pf);
|
||||
ice_setup_mc_magic_wake(pf);
|
||||
ice_devlink_destroy_port(pf);
|
||||
ice_vsi_release_all(pf);
|
||||
ice_set_wake(pf);
|
||||
ice_free_irq_msix_misc(pf);
|
||||
|
@ -871,7 +871,7 @@ static int ice_get_max_valid_res_idx(struct ice_res_tracker *res)
|
||||
* If there are not enough resources available, return an error. This should
|
||||
* always be caught by ice_set_per_vf_res().
|
||||
*
|
||||
* Return 0 on success, and -EINVAL when there are not enough MSIX vectors in
|
||||
* Return 0 on success, and -EINVAL when there are not enough MSIX vectors
|
||||
* in the PF's space available for SR-IOV.
|
||||
*/
|
||||
static int ice_sriov_set_msix_res(struct ice_pf *pf, u16 num_msix_needed)
|
||||
|
Loading…
Reference in New Issue
Block a user