Hi Eelco, Seems you missed this mail.
Thanks, Xiao > -----Original Message----- > From: Zhang, Xiao > Sent: Wednesday, November 6, 2019 12:58 PM > To: Eelco Chaudron <echau...@redhat.com>; Xing, Beilei > <beilei.x...@intel.com> > Cc: Zhang, Qi Z <qi.z.zh...@intel.com>; dev@dpdk.org > Subject: RE: [dpdk-dev] [PATCH] net/i40e: force promiscuous state after VF > reset > > Hi Eelco > > > -----Original Message----- > > From: Eelco Chaudron [mailto:echau...@redhat.com] > > Sent: Friday, November 1, 2019 4:13 PM > > To: Xing, Beilei <beilei.x...@intel.com>; Zhang, Xiao > > <xiao.zh...@intel.com> > > Cc: Zhang, Qi Z <qi.z.zh...@intel.com>; dev@dpdk.org > > Subject: Re: [dpdk-dev] [PATCH] net/i40e: force promiscuous state > > after VF reset > > > > > > > > On 1 Nov 2019, at 3:38, Xing, Beilei wrote: > > > > >> -----Original Message----- > > >> From: Eelco Chaudron [mailto:echau...@redhat.com] > > >> Sent: Tuesday, October 29, 2019 3:47 PM > > >> To: Zhang, Xiao <xiao.zh...@intel.com>; Xing, Beilei > > >> <beilei.x...@intel.com> > > >> Cc: Zhang, Qi Z <qi.z.zh...@intel.com>; dev@dpdk.org > > >> Subject: Re: [dpdk-dev] [PATCH] net/i40e: force promiscuous state > > >> after VF reset > > >> > > >> > > >> > > >> On 29 Oct 2019, at 8:39, Zhang, Xiao wrote: > > >> > > >>>> -----Original Message----- > > >>>> From: Eelco Chaudron <echau...@redhat.com> > > >>>> Sent: Friday, October 25, 2019 5:24 PM > > >>>> To: Xing, Beilei <beilei.x...@intel.com>; Zhang, Xiao > > >>>> <xiao.zh...@intel.com> > > >>>> Cc: Zhang, Qi Z <qi.z.zh...@intel.com>; dev@dpdk.org > > >>>> Subject: Re: [dpdk-dev] [PATCH] net/i40e: force promiscuous state > > >>>> after VF reset > > >>>> > > >>>> > > >>>> > > >>>> On 17 Oct 2019, at 8:34, Xing, Beilei wrote: > > >>>> > > >>>>>> On 17 Sep 2019, at 9:40, Eelco Chaudron wrote: > > >>>>>> > > >>>>>>> Even though the device reset is successful, disabling > > >>>>>>> promiscuous mode might not always succeed, causing enabling it > > >>>>>>> after reset to fail. > > >>>>>>> This would happen when the kernel driver requires a reset of > > >>>>>>> the VF. > > >>>>>>> > > >>>>>>> This patch resets the internal state, so next time promiscuous > > >>>>>>> mode is configured it will be enabled. > > >>>>>>> > > >>>>>>> Signed-off-by: Eelco Chaudron <echau...@redhat.com> > > >>>>>>> --- > > >>>>>>> drivers/net/i40e/i40e_ethdev_vf.c | 10 ++++++++++ > > >>>>>>> 1 file changed, 10 insertions(+) > > >>>>>>> > > >>>>>>> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c > > >>>>>>> b/drivers/net/i40e/i40e_ethdev_vf.c > > >>>>>>> index 551f6fa..e0f99a4 100644 > > >>>>>>> --- a/drivers/net/i40e/i40e_ethdev_vf.c > > >>>>>>> +++ b/drivers/net/i40e/i40e_ethdev_vf.c > > >>>>>>> @@ -2276,11 +2276,21 @@ static int > > >>>>>>> eth_i40evf_pci_remove(struct rte_pci_device *pci_dev) > > >>>>>>> i40evf_dev_reset(struct rte_eth_dev > > >>>>>>> *dev) > > >>>>>>> { > > >>>>>>> int ret; > > >>>>>>> + struct i40e_vf *vf = > > >>>>>>> I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); > > >>>>>>> > > >>>>>>> ret = i40evf_dev_uninit(dev); > > >>>>>>> if (ret) > > >>>>>>> return ret; > > >>>>>>> > > >>>>>>> + /* > > >>>>>>> + * Even though the device reset is successful disabling > > >>>>>>> promiscuous > > >>>>>>> + * mode might not always succeed, causing enabling it after > > >>>>>>> reset > > >>>>>>> to > > >>>>> > > >>>>> I think we need to root cause why fail to disable promiscuous > > >>>>> mode and try to fix it first. > > >>>> > > >>>> I’ve copied in Xiao who helped me identify the issue in your > > >>>> driver. > > >>>> > > >>>> The issue is because the change from kernel pf was not synced to > > >>>> DPDK vf during the closing period of reset, so we get this > > >>>> failure. Xiao can you add more details? > > >>>> > > >>> > > >>> The root cause is when kernel pf generate DPDK vf reset event, the > > >>> flag > > >>> vf->promisc_unicast_enabled will not be cleared but promiscuous > > >>> vf->mode > > >>> is > > >>> disabled. When trying to enable promiscuous mode next time by > > >>> calling i40evf_dev_promiscuous_enable won't work because it will > > >>> check the > > >>> vf->promisc_unicast_enabled flag first. > > >>> > > >>> static int > > >>> i40evf_dev_promiscuous_enable(struct rte_eth_dev *dev) { ... > > >>> /* If enabled, just return */ > > >>> if (vf->promisc_unicast_enabled) > > >>> return 0; > > >>> ... > > >>> } > > >>> > > >>> Hi Eelco, > > >>> > > >>> I think you may need add more detailed message in the commit log > > >>> or comments. > > >> > > >> My interpretation of the request was that Beilei wanted to know why > > >> disabling promiscuous mode in HW was failing. Beilei can you > > >> comment, is the additional description from Xiao enough? > > > > > > Yes, promisc_unicast_enabled flag is not cleared during vf reset > > > because fail to disable promiscuous mode, So I think we need to root > > > cause why fail to disable promiscuous mode first. > > > This patch looks like a workaround but not a fix. > > > > > > > This was debugged together with Xiao and from what I understand is > > that DPDK fails to reset promiscuous mode in hardware as PF and VF > > operations are not synced between kernel and DPDK. > > > > Xiao told me this could not be fixed in another way, Xiao can you > > comment? > > > > Checked again, the root cause is not synced issue between kernel and DPDK > during reset. > Suggest to remove the checking and setting of promisc_unicast_enabled flag, > since this flag is only used when enable/disable promiscuous mode. > Considering the un-synced issue, it will be more clean if remove the flag. > Also same with flag promisc_multicast_enabled. > > > >> > > >>>> > > >>>>>>> + * fail. This would happen when the kernel driver requires a > > >>>>>>> reset > > >>>>>>> + * of the VF. > > >>>>>>> + */ > > >>>>>>> + if (rte_eal_process_type() == RTE_PROC_PRIMARY) > > >>>>>>> + vf->promisc_unicast_enabled = FALSE; > > >>>>>>> + > > >>>>>>> ret = i40evf_dev_init(dev); > > >>>>>>> > > >>>>>>> return ret; > > >>>>>>> -- > > >>>>>>> 1.8.3.1