RE: [PATCH 1/1 net-2.6] s2io: enabling VLAN tag stripping at driver initialization | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
Breno/Jeff,
This patch looks good.
Thanks,
Ram
> -----Original Message-----
> From: Breno Leitao [mailto:leitao@xxxxxxxxxxxxxxxxxx]
> Sent: Thursday, September 04, 2008 1:53 PM
> To: Ramkrishna Vepa
> Cc: Rastapur Santosh; Sivakumar Subramani; Sreenivasa Honnur;
> jeff@xxxxxxxxxx; Jay Vosburgh; netdev; Lorandi
> Subject: Re: [PATCH 1/1 net-2.6] s2io: enabling VLAN tag stripping at
> driver initialization
>
> Actually s2io has a bug in VLAN support. VLAN doesn't work except if
> you'd opened the interface in promiscuous mode before.
> This happens because VLAN tag stripping is not correctly marked as
> enabled at device startup
>
> Also, the vlan_strip_flag field was moved to the private network
> structure.
>
> Signed-off-by: Breno Leitao <leitao@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Jay Vosburgh <fubar@xxxxxxxxxx>
>
> ---
>
> diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
> index a2b0730..1386d76 100644
> --- a/drivers/net/s2io.c
> +++ b/drivers/net/s2io.c
> @@ -371,9 +371,6 @@ static void s2io_vlan_rx_register(struct
net_device
> *dev,
> flags[i]);
> }
>
> -/* A flag indicating whether 'RX_PA_CFG_STRIP_VLAN_TAG' bit is set or
not
> */
> -static int vlan_strip_flag;
> -
> /* Unregister the vlan */
> static void s2io_vlan_rx_kill_vid(struct net_device *dev, unsigned
long
> vid)
> {
> @@ -2303,7 +2300,7 @@ static int start_nic(struct s2io_nic *nic)
> val64 = readq(&bar0->rx_pa_cfg);
> val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG;
> writeq(val64, &bar0->rx_pa_cfg);
> - vlan_strip_flag = 0;
> + nic->vlan_strip_flag = 0;
> }
>
> /*
> @@ -5010,7 +5007,7 @@ static void s2io_set_multicast(struct net_device
> *dev)
> val64 = readq(&bar0->rx_pa_cfg);
> val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG;
> writeq(val64, &bar0->rx_pa_cfg);
> - vlan_strip_flag = 0;
> + sp->vlan_strip_flag = 0;
> }
>
> val64 = readq(&bar0->mac_cfg);
> @@ -5032,7 +5029,7 @@ static void s2io_set_multicast(struct net_device
> *dev)
> val64 = readq(&bar0->rx_pa_cfg);
> val64 |= RX_PA_CFG_STRIP_VLAN_TAG;
> writeq(val64, &bar0->rx_pa_cfg);
> - vlan_strip_flag = 1;
> + sp->vlan_strip_flag = 1;
> }
>
> val64 = readq(&bar0->mac_cfg);
> @@ -8206,6 +8203,11 @@ s2io_init_nic(struct pci_dev *pdev, const
struct
> pci_device_id *pre)
> /* Initialize device name */
> sprintf(sp->name, "%s Neterion %s", dev->name,
sp->product_name);
>
> + if (vlan_tag_strip)
> + sp->vlan_strip_flag = 1;
> + else
> + sp->vlan_strip_flag = 0;
> +
> /*
> * Make Link state as off at this point, when the Link change
> * interrupt comes the state will be automatically changed to
> @@ -8311,7 +8313,7 @@ static int check_L2_lro_capable(u8 *buffer,
struct
> iphdr **ip,
> * If vlan stripping is disabled and the frame is VLAN
tagged,
> * shift the offset by the VLAN header size bytes.
> */
> - if ((!vlan_strip_flag) &&
> + if ((!sp->vlan_strip_flag) &&
> (rxdp->Control_1 & RXD_FRAME_VLAN_TAG))
> ip_off += HEADER_VLAN_SIZE;
> } else {
> @@ -8592,7 +8594,7 @@ static void queue_rx_frame(struct sk_buff *skb,
u16
> vlan_tag)
>
> skb->protocol = eth_type_trans(skb, dev);
> if (sp->vlgrp && vlan_tag
> - && (vlan_strip_flag)) {
> + && (sp->vlan_strip_flag)) {
> /* Queueing the vlan frame to the upper layer */
> if (sp->config.napi)
> vlan_hwaccel_receive_skb(skb, sp->vlgrp,
vlan_tag);
> diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h
> index 6722a2f..55cb943 100644
> --- a/drivers/net/s2io.h
> +++ b/drivers/net/s2io.h
> @@ -962,6 +962,7 @@ struct s2io_nic {
> int task_flag;
> unsigned long long start_time;
> struct vlan_group *vlgrp;
> + int vlan_strip_flag;
> #define MSIX_FLG 0xA5
> int num_entries;
> struct msix_entry *entries;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Kernel List] [Site Home] [Ethernet Bridging] [Git] [IETF Annouce] [Linux Assembly] [VLAN] [Networking] [Security] [Bugtraq] [Rubini] [Photo] [Singles Social Netowrking] [Yosemite] [MIPS Linux] [ARM Linux] [Linux Virtualization] [Linux Security] [Linux IDE] [Linux RAID] [Linux SCSI] [Linux Wireless] [DDR & Rambus] [Free Dating] [Linux Resources] [Wireless Reading Device]
![]() |
![]() |