[Intel-wired-lan] [PATCH v4 1/6] i40e: Remove CONFIG_I40E_VXLAN

Keller, Jacob E jacob.e.keller at intel.com
Tue Nov 10 19:23:24 UTC 2015


Ok. That should work, but a quick check would be helpful.

Regards,
Jake

On Tue, 2015-11-10 at 19:08 +0000, Singhai, Anjali wrote:
> Jake this patch doesn't change the use of CONFIG_VXLAN in our driver
> to guard against a potential issue that you pointed out.
> Our driver had already changed to using CONFIG_VXLAN in a previous
> patch.
> 
> But I believe that we will still be okay in the scenario that VXLAN
> module is not loaded because of two reasons
> 1) We check a flag in sync_vsi_filters if a filter was added or
> deleted before proceeding to do anything and that will return very
> quickly from the function when VXLAN or GENEVE module is not loaded.
> 2) udp_offload_get_port function has empty definitions in the base
> kernel that will always exist even when the module is not loaded.
> 
> Having said that, I am still going to make sure that it's not an
> issue with a previous patch for our driver. Although the shift to
> using udp_offload_get_port with this patch series will help alleviate
> that issue.
> 
> Anjali
> 
> > -----Original Message-----
> > From: Keller, Jacob E
> > Sent: Tuesday, November 10, 2015 10:01 AM
> > To: intel-wired-lan at lists.osuosl.org; Singhai, Anjali
> > Subject: Re: [Intel-wired-lan] [PATCH v4 1/6] i40e: Remove
> > CONFIG_I40E_VXLAN
> > 
> > Hi Anjali,
> > 
> > On Tue, 2015-11-10 at 09:56 -0800, Anjali Singhai Jain wrote:
> > > If the kernel flag CONFIG_VXLAN is true or CONFIG_VXLAN_MODULE is
> > > true, enable VXLAN offload in the driver.
> > > 
> > > v2: Fix bisection error for this patch series.
> > > 
> > > Signed-off-by: Kiran Patil <kiran.patil at intel.com>
> > > Signed-off-by: Anjali Singhai Jain <anjali.singhai at intel.com>
> > > ---
> > >  drivers/net/ethernet/intel/i40e/i40e.h      |  2 --
> > >  drivers/net/ethernet/intel/i40e/i40e_main.c | 10 ++--------
> > >  2 files changed, 2 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/drivers/net/ethernet/intel/i40e/i40e.h
> > > b/drivers/net/ethernet/intel/i40e/i40e.h
> > > index 8ed759e..6c4d154 100644
> > > --- a/drivers/net/ethernet/intel/i40e/i40e.h
> > > +++ b/drivers/net/ethernet/intel/i40e/i40e.h
> > > @@ -282,11 +282,9 @@ struct i40e_pf {
> > >  	u32 fd_atr_cnt;
> > >  	u32 fd_tcp_rule;
> > > 
> > > -#if IS_ENABLED(CONFIG_VXLAN)
> > >  	__be16  vxlan_ports[I40E_MAX_PF_UDP_OFFLOAD_PORTS];
> > >  	u16 pending_vxlan_bitmap;
> > > 
> > > -#endif
> > >  	enum i40e_interrupt_policy int_policy;
> > >  	u16 rx_itr_default;
> > >  	u16 tx_itr_default;
> > > diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c
> > > b/drivers/net/ethernet/intel/i40e/i40e_main.c
> > > index b447af6..0235a8a 100644
> > > --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
> > > +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
> > > @@ -6990,13 +6990,13 @@ static void i40e_handle_mdd_event(struct
> > > i40e_pf *pf)
> > >  	i40e_flush(hw);
> > >  }
> > > 
> > > -#if IS_ENABLED(CONFIG_VXLAN)
> > >  /**
> > >   * i40e_sync_vxlan_filters_subtask - Sync the VSI filter list
> > > with HW
> > >   * @pf: board private structure
> > >   **/
> > >  static void i40e_sync_vxlan_filters_subtask(struct i40e_pf *pf)
> > >  {
> > > +#if IS_ENABLED(CONFIG_VXLAN)
> > 
> > Direct use of CONFIG_VXLAN is not going to work. What happens in
> > the case
> > where CONFIG_VXLAN=m and CONFIG_I40E=y?
> > 
> > The kernel will load i40e as it loads itself at boot and vxlan
> > module will not get
> > included (because i40e isn't a module so it doesn't run depmod etc)
> > and then
> > it will run and try to call vxlan code and fail because of an
> > unknown symbol
> > since vxlan won't have been started yet.
> > 
> > This is the entire reason why CONFIG_XXX_VXLAN exists. The
> > alternative is
> > to use select VXLAN and force VXLAN on when we enable I40E.
> > 
> > That's the primary reason why we can't directly use CONFIG_VXLAN as
> > a
> > check in driver code.
> > 
> > Regards,
> > Jake
> > 
> > >  	struct i40e_hw *hw = &pf->hw;
> > >  	i40e_status ret;
> > >  	__be16 port;
> > > @@ -7030,9 +7030,9 @@ static void
> > > i40e_sync_vxlan_filters_subtask(struct i40e_pf *pf)
> > >  			}
> > >  		}
> > >  	}
> > > +#endif
> > >  }
> > > 
> > > -#endif
> > >  /**
> > >   * i40e_service_task - Run the driver's async subtasks
> > >   * @work: pointer to work_struct containing our data @@ -7057,9
> > > +7057,7 @@ static void i40e_service_task(struct work_struct
> > > *work)
> > >  	i40e_watchdog_subtask(pf);
> > >  	i40e_fdir_reinit_subtask(pf);
> > >  	i40e_sync_filters_subtask(pf);
> > > -#if IS_ENABLED(CONFIG_VXLAN)
> > >  	i40e_sync_vxlan_filters_subtask(pf);
> > > -#endif
> > >  	i40e_clean_adminq_subtask(pf);
> > > 
> > >  	i40e_service_event_complete(pf);
> > > @@ -8433,7 +8431,6 @@ static int i40e_set_features(struct
> > > net_device
> > > *netdev,
> > >  	return 0;
> > >  }
> > > 
> > > -#if IS_ENABLED(CONFIG_VXLAN)
> > >  /**
> > >   * i40e_get_vxlan_port_idx - Lookup a possibly offloaded for Rx
> > > UDP
> > > port
> > >   * @pf: board private structure
> > > @@ -8528,7 +8525,6 @@ static void i40e_del_vxlan_port(struct
> > > net_device *netdev,
> > >  	}
> > >  }
> > > 
> > > -#endif
> > >  static int i40e_get_phys_port_id(struct net_device *netdev,
> > >  				 struct netdev_phys_item_id
> > > *ppid)
> > >  {
> > > @@ -8753,10 +8749,8 @@ static const struct net_device_ops
> > > i40e_netdev_ops = {
> > >  	.ndo_get_vf_config	= i40e_ndo_get_vf_config,
> > >  	.ndo_set_vf_link_state	=
> > > i40e_ndo_set_vf_link_state,
> > >  	.ndo_set_vf_spoofchk	= i40e_ndo_set_vf_spoofchk,
> > > -#if IS_ENABLED(CONFIG_VXLAN)
> > >  	.ndo_add_vxlan_port	= i40e_add_vxlan_port,
> > >  	.ndo_del_vxlan_port	= i40e_del_vxlan_port,
> > > -#endif
> > >  	.ndo_get_phys_port_id	= i40e_get_phys_port_id,
> > >  	.ndo_fdb_add		= i40e_ndo_fdb_add,
> > >  	.ndo_features_check	= i40e_features_check,


More information about the Intel-wired-lan mailing list