ice: Add handler to configure SR-IOV
This patch implements parts of ice_sriov_configure and VF reset flow. To create virtual functions (VFs), the user sets a value in num_vfs through sysfs. This results in the kernel calling the handler for .sriov_configure which is ice_sriov_configure. VF setup first starts with a VF reset, followed by allocation of the VF VSI using ice_vf_vsi_setup. Once the VF setup is complete a state bit ICE_VF_STATE_INIT is set in the vf->states bitmap to indicate that the VF is ready to go. Also for VF reset to go into effect, it's necessary to issue a disable queue command (ice_aqc_opc_dis_txqs). So this patch updates multiple functions in the disable queue flow to take additional parameters that distinguish if queues are being disabled due to VF reset. Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:

committed by
Jeff Kirsher

parent
75d2b25302
commit
ddf30f7ff8
@@ -28,6 +28,7 @@
|
||||
#include <linux/ip.h>
|
||||
#include <linux/ipv6.h>
|
||||
#include <linux/if_bridge.h>
|
||||
#include <linux/avf/virtchnl.h>
|
||||
#include <net/ipv6.h>
|
||||
#include "ice_devids.h"
|
||||
#include "ice_type.h"
|
||||
@@ -35,6 +36,7 @@
|
||||
#include "ice_switch.h"
|
||||
#include "ice_common.h"
|
||||
#include "ice_sched.h"
|
||||
#include "ice_virtchnl_pf.h"
|
||||
|
||||
extern const char ice_drv_ver[];
|
||||
#define ICE_BAR0 0
|
||||
@@ -65,6 +67,12 @@ extern const char ice_drv_ver[];
|
||||
#define ICE_INVAL_Q_INDEX 0xffff
|
||||
#define ICE_INVAL_VFID 256
|
||||
#define ICE_MAX_VF_COUNT 256
|
||||
#define ICE_MAX_QS_PER_VF 256
|
||||
#define ICE_MIN_QS_PER_VF 1
|
||||
#define ICE_DFLT_QS_PER_VF 4
|
||||
#define ICE_MAX_INTR_PER_VF 65
|
||||
#define ICE_MIN_INTR_PER_VF (ICE_MIN_QS_PER_VF + 1)
|
||||
#define ICE_DFLT_INTR_PER_VF (ICE_DFLT_QS_PER_VF + 1)
|
||||
|
||||
#define ICE_VSIQF_HKEY_ARRAY_SIZE ((VSIQF_HKEY_MAX_INDEX + 1) * 4)
|
||||
|
||||
@@ -135,10 +143,20 @@ enum ice_state {
|
||||
__ICE_EMPR_RECV, /* set by OICR handler */
|
||||
__ICE_SUSPENDED, /* set on module remove path */
|
||||
__ICE_RESET_FAILED, /* set by reset/rebuild */
|
||||
/* When checking for the PF to be in a nominal operating state, the
|
||||
* bits that are grouped at the beginning of the list need to be
|
||||
* checked. Bits occurring before __ICE_STATE_NOMINAL_CHECK_BITS will
|
||||
* be checked. If you need to add a bit into consideration for nominal
|
||||
* operating state, it must be added before
|
||||
* __ICE_STATE_NOMINAL_CHECK_BITS. Do not move this entry's position
|
||||
* without appropriate consideration.
|
||||
*/
|
||||
__ICE_STATE_NOMINAL_CHECK_BITS,
|
||||
__ICE_ADMINQ_EVENT_PENDING,
|
||||
__ICE_MAILBOXQ_EVENT_PENDING,
|
||||
__ICE_MDD_EVENT_PENDING,
|
||||
__ICE_FLTR_OVERFLOW_PROMISC,
|
||||
__ICE_VF_DIS,
|
||||
__ICE_CFG_BUSY,
|
||||
__ICE_SERVICE_SCHED,
|
||||
__ICE_SERVICE_DIS,
|
||||
@@ -243,6 +261,7 @@ enum ice_pf_flags {
|
||||
ICE_FLAG_MSIX_ENA,
|
||||
ICE_FLAG_FLTR_SYNC,
|
||||
ICE_FLAG_RSS_ENA,
|
||||
ICE_FLAG_SRIOV_ENA,
|
||||
ICE_FLAG_SRIOV_CAPABLE,
|
||||
ICE_PF_FLAGS_NBITS /* must be last */
|
||||
};
|
||||
@@ -259,7 +278,12 @@ struct ice_pf {
|
||||
|
||||
struct ice_vsi **vsi; /* VSIs created by the driver */
|
||||
struct ice_sw *first_sw; /* first switch created by firmware */
|
||||
/* Virtchnl/SR-IOV config info */
|
||||
struct ice_vf *vf;
|
||||
int num_alloc_vfs; /* actual number of VFs allocated */
|
||||
u16 num_vfs_supported; /* num VFs supported for this PF */
|
||||
u16 num_vf_qps; /* num queue pairs per VF */
|
||||
u16 num_vf_msix; /* num vectors per VF */
|
||||
DECLARE_BITMAP(state, __ICE_STATE_NBITS);
|
||||
DECLARE_BITMAP(avail_txqs, ICE_MAX_TXQS);
|
||||
DECLARE_BITMAP(avail_rxqs, ICE_MAX_RXQS);
|
||||
|
Reference in New Issue
Block a user