* [dpdk-stable] [PATCH v8 09/25] net/i40e: fix VF reset flow [not found] <1484032363-60038-1-git-send-email-wenzhuo.lu@intel.com> @ 2017-01-10 7:12 ` Wenzhuo Lu 2017-01-10 7:12 ` [dpdk-stable] [PATCH v8 12/25] net/i40e: fix VF MAC address assignment Wenzhuo Lu 1 sibling, 0 replies; 3+ messages in thread From: Wenzhuo Lu @ 2017-01-10 7:12 UTC (permalink / raw) To: wenzhuo.lu; +Cc: Qi Zhang, stable From: Qi Zhang <qi.z.zhang@intel.com> Add missing step during VF reset: PF should set I40E_VFGEN_RSTAT to ACTIVE at end of the VF reset operation or VF driver may not able to detect that reset is already completed. This patch also remove the unnecessary enum for vfr state. Fixes: 4861cde46116 ("i40e: new poll mode driver") CC: stable@dpdk.org Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/net/i40e/i40e_pf.c | 6 ++++-- drivers/net/i40e/i40e_pf.h | 5 ----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c index 5c58424..8a6733c 100644 --- a/drivers/net/i40e/i40e_pf.c +++ b/drivers/net/i40e/i40e_pf.c @@ -139,7 +139,7 @@ abs_vf_id = vf_id + hw->func_caps.vf_base_id; /* Notify VF that we are in VFR progress */ - I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_PF_VFR_INPROGRESS); + I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_VFR_INPROGRESS); /* * If require a SW VF reset, a VFLR interrupt will be generated, @@ -220,7 +220,7 @@ } /* Reset done, Set COMPLETE flag and clear reset bit */ - I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_PF_VFR_COMPLETED); + I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_VFR_COMPLETED); val = I40E_READ_REG(hw, I40E_VPGEN_VFRTRIG(vf_id)); val &= ~I40E_VPGEN_VFRTRIG_VFSWR_MASK; I40E_WRITE_REG(hw, I40E_VPGEN_VFRTRIG(vf_id), val); @@ -248,6 +248,8 @@ return -EFAULT; } + I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_VFR_VFACTIVE); + return ret; } diff --git a/drivers/net/i40e/i40e_pf.h b/drivers/net/i40e/i40e_pf.h index 47a9c34..b4c2287 100644 --- a/drivers/net/i40e/i40e_pf.h +++ b/drivers/net/i40e/i40e_pf.h @@ -48,11 +48,6 @@ #define I40E_DPDK_OFFSET 0x100 -enum i40e_pf_vfr_state { - I40E_PF_VFR_INPROGRESS = 0, - I40E_PF_VFR_COMPLETED = 1, -}; - /* DPDK pf driver specific command to VF */ enum i40e_virtchnl_ops_dpdk { /* -- 1.9.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-stable] [PATCH v8 12/25] net/i40e: fix VF MAC address assignment [not found] <1484032363-60038-1-git-send-email-wenzhuo.lu@intel.com> 2017-01-10 7:12 ` [dpdk-stable] [PATCH v8 09/25] net/i40e: fix VF reset flow Wenzhuo Lu @ 2017-01-10 7:12 ` Wenzhuo Lu 1 sibling, 0 replies; 3+ messages in thread From: Wenzhuo Lu @ 2017-01-10 7:12 UTC (permalink / raw) To: wenzhuo.lu; +Cc: Ferruh Yigit, stable From: Ferruh Yigit <ferruh.yigit@intel.com> If PF sets vf->mac_addr, in VF initialization hw->mac.addr will be set to that same value. It is possible to check if PF set a MAC address or not through the hw->mac.addr variable. hw->mac.addr set by i40e_vf_parse_hw_config(), call stack is: In PF side i40e_pf_host_process_cmd_get_vf_resources() eth_addr_copy(vf->mac_addr, vf_res->vsi_res[0].default_mac_address) In VF sise i40evf_init_vf() i40evf_get_vf_resources() i40e_vf_parse_hw_config() memcpy(hw->mac.addr, vsi_res->default_mac_addr) Updated code is after i40evf_get_vf_resources() and can benefit from hw->mac.addr variable. Fixes: 89e6b86384bb ("i40evf: rework MAC address validation") CC: stable@dpdk.org Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com> --- drivers/net/i40e/i40e_ethdev_vf.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 5016249..0977095 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -1193,7 +1193,6 @@ static int i40evf_dev_xstats_get(struct rte_eth_dev *dev, int i, err, bufsz; struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); - struct ether_addr *p_mac_addr; uint16_t interval = i40e_calc_itr_interval(I40E_QUEUE_ITR_INTERVAL_MAX); @@ -1270,13 +1269,10 @@ static int i40evf_dev_xstats_get(struct rte_eth_dev *dev, vf->vsi.adapter = I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); /* Store the MAC address configured by host, or generate random one */ - p_mac_addr = (struct ether_addr *)(vf->vsi_res->default_mac_addr); - if (is_valid_assigned_ether_addr(p_mac_addr)) { /* Configured by host */ - ether_addr_copy(p_mac_addr, (struct ether_addr *)hw->mac.addr); + if (is_valid_assigned_ether_addr((struct ether_addr *)hw->mac.addr)) vf->flags |= I40E_FLAG_VF_MAC_BY_PF; - } else { + else eth_random_addr(hw->mac.addr); /* Generate a random one */ - } /* If the PF host is not DPDK, set the interval of ITR0 to max*/ if (vf->version_major != I40E_DPDK_VERSION_MAJOR) { -- 1.9.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <1480637533-37425-1-git-send-email-wenzhuo.lu@intel.com>]
[parent not found: <1484032580-60134-1-git-send-email-wenzhuo.lu@intel.com>]
* [dpdk-stable] [PATCH v8 09/25] net/i40e: fix VF reset flow [not found] ` <1484032580-60134-1-git-send-email-wenzhuo.lu@intel.com> @ 2017-01-10 7:16 ` Wenzhuo Lu 0 siblings, 0 replies; 3+ messages in thread From: Wenzhuo Lu @ 2017-01-10 7:16 UTC (permalink / raw) To: dev; +Cc: Qi Zhang, stable From: Qi Zhang <qi.z.zhang@intel.com> Add missing step during VF reset: PF should set I40E_VFGEN_RSTAT to ACTIVE at end of the VF reset operation or VF driver may not able to detect that reset is already completed. This patch also remove the unnecessary enum for vfr state. Fixes: 4861cde46116 ("i40e: new poll mode driver") CC: stable@dpdk.org Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> --- drivers/net/i40e/i40e_pf.c | 6 ++++-- drivers/net/i40e/i40e_pf.h | 5 ----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c index 5c58424..8a6733c 100644 --- a/drivers/net/i40e/i40e_pf.c +++ b/drivers/net/i40e/i40e_pf.c @@ -139,7 +139,7 @@ abs_vf_id = vf_id + hw->func_caps.vf_base_id; /* Notify VF that we are in VFR progress */ - I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_PF_VFR_INPROGRESS); + I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_VFR_INPROGRESS); /* * If require a SW VF reset, a VFLR interrupt will be generated, @@ -220,7 +220,7 @@ } /* Reset done, Set COMPLETE flag and clear reset bit */ - I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_PF_VFR_COMPLETED); + I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_VFR_COMPLETED); val = I40E_READ_REG(hw, I40E_VPGEN_VFRTRIG(vf_id)); val &= ~I40E_VPGEN_VFRTRIG_VFSWR_MASK; I40E_WRITE_REG(hw, I40E_VPGEN_VFRTRIG(vf_id), val); @@ -248,6 +248,8 @@ return -EFAULT; } + I40E_WRITE_REG(hw, I40E_VFGEN_RSTAT1(vf_id), I40E_VFR_VFACTIVE); + return ret; } diff --git a/drivers/net/i40e/i40e_pf.h b/drivers/net/i40e/i40e_pf.h index 47a9c34..b4c2287 100644 --- a/drivers/net/i40e/i40e_pf.h +++ b/drivers/net/i40e/i40e_pf.h @@ -48,11 +48,6 @@ #define I40E_DPDK_OFFSET 0x100 -enum i40e_pf_vfr_state { - I40E_PF_VFR_INPROGRESS = 0, - I40E_PF_VFR_COMPLETED = 1, -}; - /* DPDK pf driver specific command to VF */ enum i40e_virtchnl_ops_dpdk { /* -- 1.9.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-01-10 7:16 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <1484032363-60038-1-git-send-email-wenzhuo.lu@intel.com> 2017-01-10 7:12 ` [dpdk-stable] [PATCH v8 09/25] net/i40e: fix VF reset flow Wenzhuo Lu 2017-01-10 7:12 ` [dpdk-stable] [PATCH v8 12/25] net/i40e: fix VF MAC address assignment Wenzhuo Lu [not found] <1480637533-37425-1-git-send-email-wenzhuo.lu@intel.com> [not found] ` <1484032580-60134-1-git-send-email-wenzhuo.lu@intel.com> 2017-01-10 7:16 ` [dpdk-stable] [PATCH v8 09/25] net/i40e: fix VF reset flow Wenzhuo Lu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).