Message ID | 20110721132229.GC2107@minipsycho |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
> -----Original Message----- > From: Jiri Pirko [mailto:jpirko@redhat.com] > Sent: Thursday, July 21, 2011 6:23 AM > To: netdev@vger.kernel.org > Cc: davem@davemloft.net; shemminger@linux-foundation.org; > eric.dumazet@gmail.com; greearb@candelatech.com; mirqus@gmail.com; > Kirsher, Jeffrey T; Brandeburg, Jesse; Waskiewicz Jr, Peter P; Allan, > Bruce W; Wyborny, Carolyn; Skidmore, Donald C; Rose, Gregory V; Duyck, > Alexander H; Ronciak, John; e1000-devel@lists.sourceforge.net; > jesse@nicira.com > Subject: [patch net-next-2.6 18/47 V2] igbvf: do vlan cleanup > > - unify vlan and nonvlan rx path > - kill adapter->vlgrp and igbvf_vlan_rx_register > > Signed-off-by: Jiri Pirko <jpirko@redhat.com> > --- > drivers/net/igbvf/igbvf.h | 4 +- > drivers/net/igbvf/netdev.c | 55 +++++++++++++++++++-------------------- > ---- > 2 files changed, 26 insertions(+), 33 deletions(-) > > diff --git a/drivers/net/igbvf/igbvf.h b/drivers/net/igbvf/igbvf.h > index d5dad5d..fd4a7b7 100644 > --- a/drivers/net/igbvf/igbvf.h > +++ b/drivers/net/igbvf/igbvf.h > @@ -34,7 +34,7 @@ > #include <linux/timer.h> > #include <linux/io.h> > #include <linux/netdevice.h> > - > +#include <linux/if_vlan.h> > > #include "vf.h" > > @@ -173,7 +173,7 @@ struct igbvf_adapter { > > const struct igbvf_info *ei; > > - struct vlan_group *vlgrp; > + unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; > u32 bd_number; > u32 rx_buffer_len; > u32 polling_interval; > diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/igbvf/netdev.c > index 64b47bf..d924b09 100644 > --- a/drivers/net/igbvf/netdev.c > +++ b/drivers/net/igbvf/netdev.c > @@ -100,12 +100,12 @@ static void igbvf_receive_skb(struct igbvf_adapter > *adapter, > struct sk_buff *skb, > u32 status, u16 vlan) > { > - if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) > - vlan_hwaccel_receive_skb(skb, adapter->vlgrp, > - le16_to_cpu(vlan) & > - E1000_RXD_SPC_VLAN_MASK); > - else > - netif_receive_skb(skb); > + if (status & E1000_RXD_STAT_VP) { > + u16 vid = le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK; > + > + __vlan_hwaccel_put_tag(skb, vid); > + } > + netif_receive_skb(skb); > } > > static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter, > @@ -1167,22 +1167,29 @@ static int igbvf_poll(struct napi_struct *napi, > int budget) > */ > static void igbvf_set_rlpml(struct igbvf_adapter *adapter) > { > - int max_frame_size = adapter->max_frame_size; > + int max_frame_size; > struct e1000_hw *hw = &adapter->hw; > > - if (adapter->vlgrp) > - max_frame_size += VLAN_TAG_SIZE; > - > + max_frame_size = adapter->max_frame_size + VLAN_TAG_SIZE; > e1000_rlpml_set_vf(hw, max_frame_size); > } > > -static void igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) > +static bool __igbvf_vlan_rx_add_vid(struct igbvf_adapter *adapter, u16 > vid) > { > - struct igbvf_adapter *adapter = netdev_priv(netdev); > struct e1000_hw *hw = &adapter->hw; > > if (hw->mac.ops.set_vfta(hw, vid, true)) > dev_err(&adapter->pdev->dev, "Failed to add vlan id %d\n", > vid); > + return false; > + return true; > +} I'm pretty sure you intended to put a curly brace after the if statement here. Other than that it seems fine. - Greg -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Thu, Jul 21, 2011 at 05:57:08PM CEST, gregory.v.rose@intel.com wrote: >> -----Original Message----- >> From: Jiri Pirko [mailto:jpirko@redhat.com] >> Sent: Thursday, July 21, 2011 6:23 AM >> To: netdev@vger.kernel.org >> Cc: davem@davemloft.net; shemminger@linux-foundation.org; >> eric.dumazet@gmail.com; greearb@candelatech.com; mirqus@gmail.com; >> Kirsher, Jeffrey T; Brandeburg, Jesse; Waskiewicz Jr, Peter P; Allan, >> Bruce W; Wyborny, Carolyn; Skidmore, Donald C; Rose, Gregory V; Duyck, >> Alexander H; Ronciak, John; e1000-devel@lists.sourceforge.net; >> jesse@nicira.com >> Subject: [patch net-next-2.6 18/47 V2] igbvf: do vlan cleanup >> >> - unify vlan and nonvlan rx path >> - kill adapter->vlgrp and igbvf_vlan_rx_register >> >> Signed-off-by: Jiri Pirko <jpirko@redhat.com> >> --- >> drivers/net/igbvf/igbvf.h | 4 +- >> drivers/net/igbvf/netdev.c | 55 +++++++++++++++++++-------------------- >> ---- >> 2 files changed, 26 insertions(+), 33 deletions(-) >> >> diff --git a/drivers/net/igbvf/igbvf.h b/drivers/net/igbvf/igbvf.h >> index d5dad5d..fd4a7b7 100644 >> --- a/drivers/net/igbvf/igbvf.h >> +++ b/drivers/net/igbvf/igbvf.h >> @@ -34,7 +34,7 @@ >> #include <linux/timer.h> >> #include <linux/io.h> >> #include <linux/netdevice.h> >> - >> +#include <linux/if_vlan.h> >> >> #include "vf.h" >> >> @@ -173,7 +173,7 @@ struct igbvf_adapter { >> >> const struct igbvf_info *ei; >> >> - struct vlan_group *vlgrp; >> + unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; >> u32 bd_number; >> u32 rx_buffer_len; >> u32 polling_interval; >> diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/igbvf/netdev.c >> index 64b47bf..d924b09 100644 >> --- a/drivers/net/igbvf/netdev.c >> +++ b/drivers/net/igbvf/netdev.c >> @@ -100,12 +100,12 @@ static void igbvf_receive_skb(struct igbvf_adapter >> *adapter, >> struct sk_buff *skb, >> u32 status, u16 vlan) >> { >> - if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) >> - vlan_hwaccel_receive_skb(skb, adapter->vlgrp, >> - le16_to_cpu(vlan) & >> - E1000_RXD_SPC_VLAN_MASK); >> - else >> - netif_receive_skb(skb); >> + if (status & E1000_RXD_STAT_VP) { >> + u16 vid = le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK; >> + >> + __vlan_hwaccel_put_tag(skb, vid); >> + } >> + netif_receive_skb(skb); >> } >> >> static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter, >> @@ -1167,22 +1167,29 @@ static int igbvf_poll(struct napi_struct *napi, >> int budget) >> */ >> static void igbvf_set_rlpml(struct igbvf_adapter *adapter) >> { >> - int max_frame_size = adapter->max_frame_size; >> + int max_frame_size; >> struct e1000_hw *hw = &adapter->hw; >> >> - if (adapter->vlgrp) >> - max_frame_size += VLAN_TAG_SIZE; >> - >> + max_frame_size = adapter->max_frame_size + VLAN_TAG_SIZE; >> e1000_rlpml_set_vf(hw, max_frame_size); >> } >> >> -static void igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) >> +static bool __igbvf_vlan_rx_add_vid(struct igbvf_adapter *adapter, u16 >> vid) >> { >> - struct igbvf_adapter *adapter = netdev_priv(netdev); >> struct e1000_hw *hw = &adapter->hw; >> >> if (hw->mac.ops.set_vfta(hw, vid, true)) >> dev_err(&adapter->pdev->dev, "Failed to add vlan id %d\n", >> vid); >> + return false; >> + return true; >> +} > >I'm pretty sure you intended to put a curly brace after the if statement here. Right, missed that. Thanks. Rsposting also with removing igbvf_set_rlpml call from igbvf_restore_vlan since it is called from igbvf_configure_rx Thanks Jirka > >Other than that it seems fine. > >- Greg > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/igbvf/igbvf.h b/drivers/net/igbvf/igbvf.h index d5dad5d..fd4a7b7 100644 --- a/drivers/net/igbvf/igbvf.h +++ b/drivers/net/igbvf/igbvf.h @@ -34,7 +34,7 @@ #include <linux/timer.h> #include <linux/io.h> #include <linux/netdevice.h> - +#include <linux/if_vlan.h> #include "vf.h" @@ -173,7 +173,7 @@ struct igbvf_adapter { const struct igbvf_info *ei; - struct vlan_group *vlgrp; + unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; u32 bd_number; u32 rx_buffer_len; u32 polling_interval; diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/igbvf/netdev.c index 64b47bf..d924b09 100644 --- a/drivers/net/igbvf/netdev.c +++ b/drivers/net/igbvf/netdev.c @@ -100,12 +100,12 @@ static void igbvf_receive_skb(struct igbvf_adapter *adapter, struct sk_buff *skb, u32 status, u16 vlan) { - if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) - vlan_hwaccel_receive_skb(skb, adapter->vlgrp, - le16_to_cpu(vlan) & - E1000_RXD_SPC_VLAN_MASK); - else - netif_receive_skb(skb); + if (status & E1000_RXD_STAT_VP) { + u16 vid = le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK; + + __vlan_hwaccel_put_tag(skb, vid); + } + netif_receive_skb(skb); } static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter, @@ -1167,22 +1167,29 @@ static int igbvf_poll(struct napi_struct *napi, int budget) */ static void igbvf_set_rlpml(struct igbvf_adapter *adapter) { - int max_frame_size = adapter->max_frame_size; + int max_frame_size; struct e1000_hw *hw = &adapter->hw; - if (adapter->vlgrp) - max_frame_size += VLAN_TAG_SIZE; - + max_frame_size = adapter->max_frame_size + VLAN_TAG_SIZE; e1000_rlpml_set_vf(hw, max_frame_size); } -static void igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) +static bool __igbvf_vlan_rx_add_vid(struct igbvf_adapter *adapter, u16 vid) { - struct igbvf_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; if (hw->mac.ops.set_vfta(hw, vid, true)) dev_err(&adapter->pdev->dev, "Failed to add vlan id %d\n", vid); + return false; + return true; +} + +static void igbvf_vlan_rx_add_vid(struct net_device *netdev, u16 vid) +{ + struct igbvf_adapter *adapter = netdev_priv(netdev); + + if (__igbvf_vlan_rx_add_vid(adapter, vid)) + set_bit(vid, adapter->active_vlans); } static void igbvf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) @@ -1191,7 +1198,6 @@ static void igbvf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) struct e1000_hw *hw = &adapter->hw; igbvf_irq_disable(adapter); - vlan_group_set_device(adapter->vlgrp, vid, NULL); if (!test_bit(__IGBVF_DOWN, &adapter->state)) igbvf_irq_enable(adapter); @@ -1199,28 +1205,16 @@ static void igbvf_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) if (hw->mac.ops.set_vfta(hw, vid, false)) dev_err(&adapter->pdev->dev, "Failed to remove vlan id %d\n", vid); -} - -static void igbvf_vlan_rx_register(struct net_device *netdev, - struct vlan_group *grp) -{ - struct igbvf_adapter *adapter = netdev_priv(netdev); - - adapter->vlgrp = grp; + else + clear_bit(vid, adapter->active_vlans); } static void igbvf_restore_vlan(struct igbvf_adapter *adapter) { u16 vid; - if (!adapter->vlgrp) - return; - - for (vid = 0; vid < VLAN_N_VID; vid++) { - if (!vlan_group_get_device(adapter->vlgrp, vid)) - continue; - igbvf_vlan_rx_add_vid(adapter->netdev, vid); - } + for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) + __igbvf_vlan_rx_add_vid(adapter, vid); igbvf_set_rlpml(adapter); } @@ -2203,7 +2197,7 @@ static netdev_tx_t igbvf_xmit_frame_ring_adv(struct sk_buff *skb, return NETDEV_TX_BUSY; } - if (adapter->vlgrp && vlan_tx_tag_present(skb)) { + if (vlan_tx_tag_present(skb)) { tx_flags |= IGBVF_TX_FLAGS_VLAN; tx_flags |= (vlan_tx_tag_get(skb) << IGBVF_TX_FLAGS_VLAN_SHIFT); } @@ -2556,7 +2550,6 @@ static const struct net_device_ops igbvf_netdev_ops = { .ndo_change_mtu = igbvf_change_mtu, .ndo_do_ioctl = igbvf_ioctl, .ndo_tx_timeout = igbvf_tx_timeout, - .ndo_vlan_rx_register = igbvf_vlan_rx_register, .ndo_vlan_rx_add_vid = igbvf_vlan_rx_add_vid, .ndo_vlan_rx_kill_vid = igbvf_vlan_rx_kill_vid, #ifdef CONFIG_NET_POLL_CONTROLLER
- unify vlan and nonvlan rx path - kill adapter->vlgrp and igbvf_vlan_rx_register Signed-off-by: Jiri Pirko <jpirko@redhat.com> --- drivers/net/igbvf/igbvf.h | 4 +- drivers/net/igbvf/netdev.c | 55 +++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 33 deletions(-)