Vasu,
On 2015/1/14 3:38, Dev, Vasu wrote:
>> -----Original Message-----
>>>>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c
>>>>> b/drivers/net/ethernet/intel/i40e/i40e_main.c
>>>>> index a5f2660..a2572cc 100644
>>>>> --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
>>>>> +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
>>>>> @@ -6180,9 +6180,12 @@ static void i40e_reset_and_rebuild(struct
>>>>> i40e_pf *pf, bool reinit)
>>>>> }
>>>>> #endif /* CONFIG_I40E_DCB */
>>>>> #ifdef I40E_FCOE
>>>>> - ret = i40e_init_pf_fcoe(pf);
>>>>> - if (ret)
>>>>> - dev_info(&pf->pdev->dev, "init_pf_fcoe failed: %d\n", ret);
>>>>> + if (pf->flags & I40E_FLAG_FCOE_ENABLED) {
>>>>> + ret = i40e_init_pf_fcoe(pf);
>>> Calling i40e_init_pf_fcoe() here conflicts with its
>> I40E_FLAG_FCOE_ENABLED pre-condition since I40E_FLAG_FCOE_ENABLED is
>> set by very same i40e_init_pf_fcoe(), in turn i40e_init_pf_fcoe() will never
>> get
>> called.
>>
>> I don't think so, here ,i40e_reset_and_rebuild() is not the only and the
>> first
>> place that i40e_init_pf_fcoe() is called, see i40e_probe(), that is the
>> first
>> chance.
>>
>> i40e_probe()
>> -->i40e_sw_init()
>> -->i40e_init_pf_fcoe()
>>
>> And the I40E_FLAG_FCOE_ENABLED is possible be set by
>> i40e_fcoe_enable() or i40e_fcoe_disable() interface before the reset action
>> is
>> to be done.
>>
> It is set by i40e_init_pf_fcoe() and you are right that the modified call
> flow by your patch won't impact setting of I40E_FLAG_FCOE_ENABLED anyway
> which could have prevented calling i40e_init_pf_fcoe() as I described above,
> so this is not an issue with the patch.
>
>> BTW, the reason I post this patch is that we hit a bug, after setup vlan,
>> the PF
>> is enabled to FCOE.
>>
> Then that BUG would still remain un-fixed and calling i40e_init_pf_fcoe()
> under I40E_FLAG_FCOE_ENABLED flag really won't affect call flow to fix
> anything. I mean I40E_FLAG_FCOE_ENABLED condition will be true with
> "pf->hw.func_caps.fcoe == true" and otherwise calling i40e_init_pf_fcoe()
> simply returns back early on after checking "pf->hw.func_caps.fcoe == false",
> so how that bug is fixed here by added I40E_FLAG_FCOE_ENABLED condition ?
> What is the bug ?
The func_caps.fcoe is assigned by following call path, under our test
environment,
i40e_probe()
->i40e_get_capabilities()
->i40e_aq_discover_capabilities()
->i40e_parse_discover_capabilities()
Or
i40e_reset_and_rebuild()
->i40e_get_capabilities()
->i40e_aq_discover_capabilities()
->i40e_parse_discover_capabilities()
Under our test environment, the "pf->hw.func_caps.fcoe" is true. so if
i40e_reset_and_rebuild() is called for VLAN setup, ethtool diagnostic test.
And then i40e_init_pf_fcoe() is to be called,
While if (!pf->hw.func_caps.fcoe) wouldn't return,
So pf->flags is set to I40E_FLAG_FCOE_ENABLED.
With my patch, i40e_init_pf_fcoe() is only called after
I40E_FLAG_FCOE_ENABLED is set before reset.
Enable FCOE in i40e_probe() or not is another issue.
Thanks,
Ethan
>
>>> Jeff Kirsher should be getting out a patch queued by me which adds
>> I40E_FCoE Kbuild option, in that FCoE is disabled by default and user could
>> enable FCoE only if needed, that patch would do same of skipping
>> i40e_init_pf_fcoe() whether FCoE capability in device enabled or not in
>> default config.
>> The following patch will not fix the above issue -- configuration of PF will
>> be
>> changed via reset.
>> How about the FCOE is configured and disabled by i40e_fcoe_disable() ,
>> then reset happens ?
>>
> May be but if the BUG is due to FCoE being enabled then having it disabled in
> config will avoid the bug for non FCoE config option and once bug is
> understood then that has to be fixed for FCoE enabled config also as I asked
> above.
>
> Thanks Ethan for detailed response.
> Vasu
>
>>> From patchwork Wed Oct 2 23:26:08 2013
>>> Content-Type: text/plain; charset="utf-8"
>>> MIME-Version: 1.0
>>> Content-Transfer-Encoding: 7bit
>>> Subject: [net] i40e: adds FCoE configure option
>>> Date: Thu, 03 Oct 2013 07:26:08 -0000
>>> From: Vasu Dev <[email protected]>
>>> X-Patchwork-Id: 11797
>>>
>>> Adds FCoE config option I40E_FCOE, so that FCoE can be enabled as
>>> needed but otherwise have it disabled by default.
>>>
>>> This also eliminate multiple FCoE config checks, instead now just one
>>> config check for CONFIG_I40E_FCOE.
>>>
>>> The I40E FCoE was added with 3.17 kernel and therefore this patch
>>> shall be applied to stable 3.17 kernel also.
>>>
>>> CC: <[email protected]>
>>> Signed-off-by: Vasu Dev <[email protected]>
>>> Tested-by: Jim Young <[email protected]>
>>>
>>> ---
>>> drivers/net/ethernet/intel/Kconfig | 11 +++++++++++
>>> drivers/net/ethernet/intel/i40e/Makefile | 2 +-
>>> drivers/net/ethernet/intel/i40e/i40e_osdep.h | 4 ++--
>>> 3 files changed, 14 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/net/ethernet/intel/Kconfig
>>> b/drivers/net/ethernet/intel/Kconfig
>>> index 5b8300a..4d61ef5 100644
>>> --- a/drivers/net/ethernet/intel/Kconfig
>>> +++ b/drivers/net/ethernet/intel/Kconfig
>>> @@ -281,6 +281,17 @@ config I40E_DCB
>>>
>>> If unsure, say N.
>>>
>>> +config I40E_FCOE
>>> + bool "Fibre Channel over Ethernet (FCoE)"
>>> + default n
>>> + depends on I40E && DCB && FCOE
>>> + ---help---
>>> + Say Y here if you want to use Fibre Channel over Ethernet (FCoE)
>>> + in the driver. This will create new netdev for exclusive FCoE
>>> + use with XL710 FCoE offloads enabled.
>>> +
>>> + If unsure, say N.
>>> +
>>> config I40EVF
>>> tristate "Intel(R) XL710 X710 Virtual Function Ethernet support"
>>> depends on PCI_MSI
>>> diff --git a/drivers/net/ethernet/intel/i40e/Makefile
>>> b/drivers/net/ethernet/intel/i40e/Makefile
>>> index 4b94ddb..c405819 100644
>>> --- a/drivers/net/ethernet/intel/i40e/Makefile
>>> +++ b/drivers/net/ethernet/intel/i40e/Makefile
>>> @@ -44,4 +44,4 @@ i40e-objs := i40e_main.o \
>>> i40e_virtchnl_pf.o
>>>
>>> i40e-$(CONFIG_I40E_DCB) += i40e_dcb.o i40e_dcb_nl.o
>>> -i40e-$(CONFIG_FCOE:m=y) += i40e_fcoe.o
>>> +i40e-$(CONFIG_I40E_FCOE) += i40e_fcoe.o
>>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_osdep.h
>>> b/drivers/net/ethernet/intel/i40e/i40e_osdep.h
>>> index 045b5c4..ad802dd 100644
>>> --- a/drivers/net/ethernet/intel/i40e/i40e_osdep.h
>>> +++ b/drivers/net/ethernet/intel/i40e/i40e_osdep.h
>>> @@ -78,7 +78,7 @@ do {
>>> \
>>> } while (0)
>>>
>>> typedef enum i40e_status_code i40e_status; -#if defined(CONFIG_FCOE)
>>> || defined(CONFIG_FCOE_MODULE)
>>> +#ifdef CONFIG_I40E_FCOE
>>> #define I40E_FCOE
>>> -#endif /* CONFIG_FCOE or CONFIG_FCOE_MODULE */
>>> +#endif
>>> #endif /* _I40E_OSDEP_H_ */
>>>
>>>>> + if (ret)
>>>>> + dev_info(&pf->pdev->dev,
>>>>> + "init_pf_fcoe failed: %d\n", ret);
>>>>> + }
>>>>>
>>>>> #endif
>>>>> /* do basic switch setup */
>>>>> --
>>>>> 1.8.3.1
>> Thanks,
>> Ethan
------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
E1000-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit
http://communities.intel.com/community/wired