Google
  Web www.spinics.net

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]

Add to Google Powered by Linux