Message ID | 1459508173-22777-9-git-send-email-harshitha.ramamurthy@intel.com |
---|---|
State | Accepted |
Delegated to: | Jeff Kirsher |
Headers | show |
> -----Original Message----- > From: Intel-wired-lan [mailto:intel-wired-lan-bounces@lists.osuosl.org] On > Behalf Of Harshitha Ramamurthy > Sent: Friday, April 01, 2016 3:56 AM > To: intel-wired-lan@lists.osuosl.org > Subject: [Intel-wired-lan] [v3 next PATCH S32 08/13] i40e: Restrict VF poll > mode to only single function mode devices > > From: Shannon Nelson <shannon.nelson@intel.com> > > The VFs can request their queues to be set up into polling mode, rather than > interrupt mode, which works well for supporting things like DPDK, but this > should not be available when working in an multi-function support device. > > Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> > Change-ID: Id36792e4e7422db8f2033336507211f68f14ff6f > --- > Testing Hints: > case 1: > set up a DPDK VF in an NPAR environment > the VF polling request should be failed and a message logged > case 2: > set up a DPDK VF in an SFP environment > the VF polling request should succeed > > drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Builds, compiles, and passes traffic
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c index b353966..30f8cbe 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c @@ -1362,8 +1362,16 @@ static int i40e_vc_get_vf_resources_msg(struct i40e_vf *vf, u8 *msg) I40E_VIRTCHNL_VF_OFFLOAD_RSS_PCTYPE_V2; } - if (vf->driver_caps & I40E_VIRTCHNL_VF_OFFLOAD_RX_POLLING) + if (vf->driver_caps & I40E_VIRTCHNL_VF_OFFLOAD_RX_POLLING) { + if (pf->flags & I40E_FLAG_MFP_ENABLED) { + dev_err(&pf->pdev->dev, + "VF %d requested polling mode: this feature is supported only when the device is running in single function per port (SFP) mode\n", + vf->vf_id); + ret = I40E_ERR_PARAM; + goto err; + } vfres->vf_offload_flags |= I40E_VIRTCHNL_VF_OFFLOAD_RX_POLLING; + } if (pf->flags & I40E_FLAG_WB_ON_ITR_CAPABLE) { if (vf->driver_caps & I40E_VIRTCHNL_VF_OFFLOAD_WB_ON_ITR)