Netdev List
 help / color / mirror / Atom feed
* [PATCH net-next 0/3] ipv6: sit: Implement TSO/GSO support
From: Eric Dumazet @ 2013-10-21  3:47 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, Jerry Chu, Eilon Greenstein, Erik Kline, Tom Herbert,
	Eric Dumazet

This patch serie implements GSO/TSO support for SIT tunnels

Broadcom bnx2x driver is now enabled for TSO support of SIT traffic

Before patches :

lpq84:~# ./netperf -H 2002:af6:1153:: -Cc
MIGRATED TCP STREAM TEST from ::0 (::) port 0 AF_INET6 to 2002:af6:1153:: () port 0 AF_INET6
Recv   Send    Send                          Utilization       Service Demand
Socket Socket  Message  Elapsed              Send     Recv     Send    Recv
Size   Size    Size     Time     Throughput  local    remote   local   remote
bytes  bytes   bytes    secs.    10^6bits/s  % S      % S      us/KB   us/KB

 87380  16384  16384    10.00      3168.31   4.81     4.64     2.988   2.877

After patches :

lpq84:~# ./netperf -H 2002:af6:1153:: -Cc
MIGRATED TCP STREAM TEST from ::0 (::) port 0 AF_INET6 to 2002:af6:1153:: () port 0 AF_INET6
Recv   Send    Send                          Utilization       Service Demand
Socket Socket  Message  Elapsed              Send     Recv     Send    Recv
Size   Size    Size     Time     Throughput  local    remote   local   remote
bytes  bytes   bytes    secs.    10^6bits/s  % S      % S      us/KB   us/KB

 87380  16384  16384    10.00      6006.97   1.86     5.48     0.608   1.795

Eric Dumazet (3):
  ipv6: gso: make ipv6_gso_segment() stackable
  ipv6: sit: add GSO/TSO support
  bnx2x: add TSO support for SIT tunnels

 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c |  3 ++-
 include/linux/netdev_features.h                  |  2 ++
 include/linux/skbuff.h                           |  6 +++--
 net/core/ethtool.c                               |  1 +
 net/ipv4/af_inet.c                               |  1 +
 net/ipv4/tcp_offload.c                           |  1 +
 net/ipv6/ip6_offload.c                           | 34 +++++++++++++++++++-----
 net/ipv6/sit.c                                   | 28 ++++++++++++-------
 net/ipv6/udp_offload.c                           |  1 +
 9 files changed, 59 insertions(+), 18 deletions(-)

-- 
1.8.4

^ permalink raw reply

* [PATCH net-next 1/3] ipv6: gso: make ipv6_gso_segment() stackable
From: Eric Dumazet @ 2013-10-21  3:47 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, Jerry Chu, Eilon Greenstein, Erik Kline, Tom Herbert,
	Eric Dumazet
In-Reply-To: <1382327251-21079-1-git-send-email-edumazet@google.com>

In order to support GSO on SIT tunnels, we need to make
inet_gso_segment() stackable.

It should not assume network header starts right after mac
header.

Signed-off-by: Eric Dumazet <edumazet@google.com>
---
 net/ipv6/ip6_offload.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
index 5c2fc1d..f9b33d8 100644
--- a/net/ipv6/ip6_offload.c
+++ b/net/ipv6/ip6_offload.c
@@ -90,6 +90,7 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
 	u8 *prevhdr;
 	int offset = 0;
 	bool tunnel;
+	int nhoff;
 
 	if (unlikely(skb_shinfo(skb)->gso_type &
 		     ~(SKB_GSO_UDP |
@@ -103,10 +104,16 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
 		       0)))
 		goto out;
 
+	skb_reset_network_header(skb);
+	nhoff = skb_network_header(skb) - skb_mac_header(skb);
 	if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h))))
 		goto out;
 
-	tunnel = skb->encapsulation;
+	tunnel = SKB_GSO_CB(skb)->encap_level > 0;
+	if (tunnel)
+		features = skb->dev->hw_enc_features & netif_skb_features(skb);
+	SKB_GSO_CB(skb)->encap_level += sizeof(*ipv6h);
+
 	ipv6h = ipv6_hdr(skb);
 	__skb_pull(skb, sizeof(*ipv6h));
 	segs = ERR_PTR(-EPROTONOSUPPORT);
@@ -123,13 +130,17 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
 		goto out;
 
 	for (skb = segs; skb; skb = skb->next) {
-		ipv6h = ipv6_hdr(skb);
-		ipv6h->payload_len = htons(skb->len - skb->mac_len -
-					   sizeof(*ipv6h));
+		ipv6h = (struct ipv6hdr *)(skb_mac_header(skb) + nhoff);
+		ipv6h->payload_len = htons(skb->len - nhoff - sizeof(*ipv6h));
+		if (tunnel) {
+			skb_reset_inner_headers(skb);
+			skb->encapsulation = 1;
+		}
+		skb->network_header = (u8 *)ipv6h - skb->head;
+
 		if (!tunnel && proto == IPPROTO_UDP) {
 			unfrag_ip6hlen = ip6_find_1stfragopt(skb, &prevhdr);
-			fptr = (struct frag_hdr *)(skb_network_header(skb) +
-				unfrag_ip6hlen);
+			fptr = (struct frag_hdr *)((u8 *)ipv6h + unfrag_ip6hlen);
 			fptr->frag_off = htons(offset);
 			if (skb->next != NULL)
 				fptr->frag_off |= htons(IP6_MF);
-- 
1.8.4

^ permalink raw reply related

* Re: [PATCH net-next] {selinux, af_key} Rework pfkey_sadb2xfrm_user_sec_ctx
From: Fan Du @ 2013-10-21  3:01 UTC (permalink / raw)
  To: David Miller; +Cc: steffen.klassert, netdev, Paul Moore
In-Reply-To: <20131018.155833.1412406960170647411.davem@davemloft.net>



On 2013年10月19日 03:58, David Miller wrote:
> From: Fan Du<fan.du@windriver.com>
> Date: Wed, 16 Oct 2013 14:15:14 +0800
>
>> Taking advantages of sadb_x_sec_ctx and xfrm_user_sec_ctx share the same
>> structure arrangement, rework pfkey_sadb2xfrm_user_sec_ctx by casting
>> sadb_x_sec_ctx into xfrm_user_sec_ctx with minor len fix.
>>
>> Then we can:
>>   -Avoid kmalloc/free memory for xfrm_user_sec_ctx, sadb_x_sec_ctx would be fine.
>>   -Fix missing return value check bug for pfkey_compile_policy when kmalloc fails
>>
>> Signed-off-by: Fan Du<fan.du@windriver.com>
>
> This isn't safe, one structure is packed and the other is not.

Might be. No clue why "one structure is packed and the other is not" happens :(
And why not pack the unpacked structure? or more generally does the packed structure
in this case must be packed in this case?(I doubt this.)

> Furthermore, unless there is some enormous gain (in this case there
> is not) losing the type checking by casting two data structures like
> this is undesirable.

Comparing with the hot path optimization, yes this proposal doesn't bring great
performance boosting. The aim of this patch is not the structure casting indeed
but the avoiding kmalloc/memcpy for a PAGE_SIZE string("context" in SELINUX word)
which maps into a ID for security checking against every AF_KEY operation.


-- 
浮沉随浪只记今朝笑

--fan

^ permalink raw reply

* Re: [PATCH net-next v3 03/07] tulip: Support for byte queue limits
From: Grant Grundler @ 2013-10-21  3:00 UTC (permalink / raw)
  To: Tino Reichardt; +Cc: open list:TULIP NETWORK DRI..., Grant Grundler
In-Reply-To: <1382296991-20289-4-git-send-email-milky-kernel@mcmilk.de>

On Sun, Oct 20, 2013 at 12:23 PM, Tino Reichardt <milky-kernel@mcmilk.de> wrote:
> Changes to tulip driver to use byte queue limits.
>
>
> Signed-off-by: Tino Reichardt <milky-kernel@mcmilk.de>

LGTM - I no longer have HW setup to test this. Only code reviewed. I'd
be happy to re-assign to anyone who is still using this HW and help
them review patches.

Acked-by: Grant Grundler <grundler@parisc-linux.org>

cheers,
grant

>
> ---
>  drivers/net/ethernet/dec/tulip/interrupt.c  | 4 ++++
>  drivers/net/ethernet/dec/tulip/tulip.h      | 1 +
>  drivers/net/ethernet/dec/tulip/tulip_core.c | 9 ++++++++-
>  3 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/dec/tulip/interrupt.c b/drivers/net/ethernet/dec/tulip/interrupt.c
> index 92306b3..7084267 100644
> --- a/drivers/net/ethernet/dec/tulip/interrupt.c
> +++ b/drivers/net/ethernet/dec/tulip/interrupt.c
> @@ -532,6 +532,7 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance)
>  #endif
>         unsigned int work_count = tulip_max_interrupt_work;
>         unsigned int handled = 0;
> +       unsigned int bytes_compl = 0;
>
>         /* Let's see whether the interrupt really is for us */
>         csr5 = ioread32(ioaddr + CSR5);
> @@ -634,6 +635,7 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance)
>                                                  PCI_DMA_TODEVICE);
>
>                                 /* Free the original skb. */
> +                               bytes_compl += tp->tx_buffers[entry].skb->len;
>                                 dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
>                                 tp->tx_buffers[entry].skb = NULL;
>                                 tp->tx_buffers[entry].mapping = 0;
> @@ -802,6 +804,8 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance)
>         }
>  #endif /* CONFIG_TULIP_NAPI */
>
> +       if (likely(tulip_bql_disable == false))
> +               netdev_completed_queue(dev, tx, bytes_compl);
>         if ((missed = ioread32(ioaddr + CSR8) & 0x1ffff)) {
>                 dev->stats.rx_dropped += missed & 0x10000 ? 0x10000 : missed;
>         }
> diff --git a/drivers/net/ethernet/dec/tulip/tulip.h b/drivers/net/ethernet/dec/tulip/tulip.h
> index 38431a1..3c62870 100644
> --- a/drivers/net/ethernet/dec/tulip/tulip.h
> +++ b/drivers/net/ethernet/dec/tulip/tulip.h
> @@ -513,6 +513,7 @@ void comet_timer(unsigned long data);
>
>  /* tulip_core.c */
>  extern int tulip_debug;
> +extern bool tulip_bql_disable;
>  extern const char * const medianame[];
>  extern const char tulip_media_cap[];
>  extern struct tulip_chip_table tulip_tbl[];
> diff --git a/drivers/net/ethernet/dec/tulip/tulip_core.c b/drivers/net/ethernet/dec/tulip/tulip_core.c
> index 4e8cfa2..d02eaa1 100644
> --- a/drivers/net/ethernet/dec/tulip/tulip_core.c
> +++ b/drivers/net/ethernet/dec/tulip/tulip_core.c
> @@ -106,11 +106,13 @@ static int csr0 = 0x00A00000 | 0x4800;
>  /* Time in jiffies before concluding the transmitter is hung. */
>  #define TX_TIMEOUT  (4*HZ)
>
> -
>  MODULE_AUTHOR("The Linux Kernel Team");
>  MODULE_DESCRIPTION("Digital 21*4* Tulip ethernet driver");
>  MODULE_LICENSE("GPL");
>  MODULE_VERSION(DRV_VERSION);
> +module_param(tulip_bql_disable, bool, 0);
> +MODULE_PARM_DESC(tulip_bql_disable,
> +       "Disable Byte Queue Limits functionality (default: false)");
>  module_param(tulip_debug, int, 0);
>  module_param(max_interrupt_work, int, 0);
>  module_param(rx_copybreak, int, 0);
> @@ -123,6 +125,7 @@ int tulip_debug = TULIP_DEBUG;
>  #else
>  int tulip_debug = 1;
>  #endif
> +bool tulip_bql_disable;
>
>  static void tulip_timer(unsigned long data)
>  {
> @@ -703,6 +706,8 @@ tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
>         wmb();
>
>         tp->cur_tx++;
> +       if (likely(tulip_bql_disable == false))
> +               netdev_sent_queue(dev, skb->len);
>
>         /* Trigger an immediate transmit demand. */
>         iowrite32(0, tp->base_addr + CSR1);
> @@ -746,6 +751,8 @@ static void tulip_clean_tx_ring(struct tulip_private *tp)
>                 tp->tx_buffers[entry].skb = NULL;
>                 tp->tx_buffers[entry].mapping = 0;
>         }
> +       if (likely(tulip_bql_disable == false))
> +               netdev_reset_queue(tp->dev);
>  }
>
>  static void tulip_down (struct net_device *dev)
> --
> 1.8.4.1
>

^ permalink raw reply

* [PATCH 15/15] net: packetengines: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:17 UTC (permalink / raw)
  To: 'David S. Miller'; +Cc: netdev, 'Jingoo Han'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/packetengines/hamachi.c   |    1 -
 drivers/net/ethernet/packetengines/yellowfin.c |    2 --
 2 files changed, 3 deletions(-)

diff --git a/drivers/net/ethernet/packetengines/hamachi.c b/drivers/net/ethernet/packetengines/hamachi.c
index cac33e5..b6bdeb3 100644
--- a/drivers/net/ethernet/packetengines/hamachi.c
+++ b/drivers/net/ethernet/packetengines/hamachi.c
@@ -1910,7 +1910,6 @@ static void hamachi_remove_one(struct pci_dev *pdev)
 		iounmap(hmp->base);
 		free_netdev(dev);
 		pci_release_regions(pdev);
-		pci_set_drvdata(pdev, NULL);
 	}
 }
 
diff --git a/drivers/net/ethernet/packetengines/yellowfin.c b/drivers/net/ethernet/packetengines/yellowfin.c
index d28593b..07a890e 100644
--- a/drivers/net/ethernet/packetengines/yellowfin.c
+++ b/drivers/net/ethernet/packetengines/yellowfin.c
@@ -513,7 +513,6 @@ err_out_unmap_rx:
 err_out_unmap_tx:
         pci_free_consistent(pdev, TX_TOTAL_SIZE, np->tx_ring, np->tx_ring_dma);
 err_out_cleardev:
-	pci_set_drvdata(pdev, NULL);
 	pci_iounmap(pdev, ioaddr);
 err_out_free_res:
 	pci_release_regions(pdev);
@@ -1392,7 +1391,6 @@ static void yellowfin_remove_one(struct pci_dev *pdev)
 	pci_release_regions (pdev);
 
 	free_netdev (dev);
-	pci_set_drvdata(pdev, NULL);
 }
 
 
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 14/15] net: neterion: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:16 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Jon Mason'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Acked-by: Jon Mason <jdmason@kudzu.us>
---
 drivers/net/ethernet/neterion/s2io.c           |    2 --
 drivers/net/ethernet/neterion/vxge/vxge-main.c |    2 --
 2 files changed, 4 deletions(-)

diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
index 51b0094..9eeddbd 100644
--- a/drivers/net/ethernet/neterion/s2io.c
+++ b/drivers/net/ethernet/neterion/s2io.c
@@ -8185,7 +8185,6 @@ mem_alloc_failed:
 	free_shared_mem(sp);
 	pci_disable_device(pdev);
 	pci_release_regions(pdev);
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(dev);
 
 	return ret;
@@ -8221,7 +8220,6 @@ static void s2io_rem_nic(struct pci_dev *pdev)
 	iounmap(sp->bar0);
 	iounmap(sp->bar1);
 	pci_release_regions(pdev);
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(dev);
 	pci_disable_device(pdev);
 }
diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c
index 5a20eaf..8614eeb 100644
--- a/drivers/net/ethernet/neterion/vxge/vxge-main.c
+++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c
@@ -4739,7 +4739,6 @@ _exit6:
 _exit5:
 	vxge_device_unregister(hldev);
 _exit4:
-	pci_set_drvdata(pdev, NULL);
 	vxge_hw_device_terminate(hldev);
 	pci_disable_sriov(pdev);
 _exit3:
@@ -4782,7 +4781,6 @@ static void vxge_remove(struct pci_dev *pdev)
 		vxge_free_mac_add_list(&vdev->vpaths[i]);
 
 	vxge_device_unregister(hldev);
-	pci_set_drvdata(pdev, NULL);
 	/* Do not call pci_disable_sriov here, as it will break child devices */
 	vxge_hw_device_terminate(hldev);
 	iounmap(vdev->bar0);
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 13/15] net: natsemi: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:15 UTC (permalink / raw)
  To: 'David S. Miller'; +Cc: netdev, 'Jingoo Han'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/natsemi/natsemi.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/natsemi/natsemi.c b/drivers/net/ethernet/natsemi/natsemi.c
index 7a5e295..64ec2a4 100644
--- a/drivers/net/ethernet/natsemi/natsemi.c
+++ b/drivers/net/ethernet/natsemi/natsemi.c
@@ -970,7 +970,6 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)
 
  err_ioremap:
 	pci_release_regions(pdev);
-	pci_set_drvdata(pdev, NULL);
 
  err_pci_request_regions:
 	free_netdev(dev);
@@ -3220,7 +3219,6 @@ static void natsemi_remove1(struct pci_dev *pdev)
 	pci_release_regions (pdev);
 	iounmap(ioaddr);
 	free_netdev (dev);
-	pci_set_drvdata(pdev, NULL);
 }
 
 #ifdef CONFIG_PM
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 11/15] net: ksz884x: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:14 UTC (permalink / raw)
  To: 'David S. Miller'; +Cc: netdev, 'Jingoo Han'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/micrel/ksz884x.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/micrel/ksz884x.c b/drivers/net/ethernet/micrel/ksz884x.c
index 8ebc352..6462dc5 100644
--- a/drivers/net/ethernet/micrel/ksz884x.c
+++ b/drivers/net/ethernet/micrel/ksz884x.c
@@ -7150,8 +7150,6 @@ static void pcidev_exit(struct pci_dev *pdev)
 	struct platform_info *info = pci_get_drvdata(pdev);
 	struct dev_info *hw_priv = &info->dev_info;
 
-	pci_set_drvdata(pdev, NULL);
-
 	release_mem_region(pci_resource_start(pdev, 0),
 		pci_resource_len(pdev, 0));
 	for (i = 0; i < hw_priv->hw.dev_count; i++) {
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 12/15] net: myri10ge: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:15 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Hyong-Youb Kim'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/myricom/myri10ge/myri10ge.c |    1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
index 1975550..68026f7 100644
--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
@@ -4208,7 +4208,6 @@ static void myri10ge_remove(struct pci_dev *pdev)
 	set_fw_name(mgp, NULL, false);
 	free_netdev(netdev);
 	pci_disable_device(pdev);
-	pci_set_drvdata(pdev, NULL);
 }
 
 #define PCI_DEVICE_ID_MYRICOM_MYRI10GE_Z8E 	0x0008
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 10/15] net: sky2: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:14 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Mirko Lindner',
	'Stephen Hemminger'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/marvell/sky2.c |    3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
index e09a8c6..a7df981 100644
--- a/drivers/net/ethernet/marvell/sky2.c
+++ b/drivers/net/ethernet/marvell/sky2.c
@@ -5081,7 +5081,6 @@ err_out_free_regions:
 err_out_disable:
 	pci_disable_device(pdev);
 err_out:
-	pci_set_drvdata(pdev, NULL);
 	return err;
 }
 
@@ -5124,8 +5123,6 @@ static void sky2_remove(struct pci_dev *pdev)
 
 	iounmap(hw->regs);
 	kfree(hw);
-
-	pci_set_drvdata(pdev, NULL);
 }
 
 static int sky2_suspend(struct device *dev)
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 09/15] net: skge: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:13 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Mirko Lindner',
	'Stephen Hemminger'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/marvell/skge.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c
index ecc7f7b..5978461 100644
--- a/drivers/net/ethernet/marvell/skge.c
+++ b/drivers/net/ethernet/marvell/skge.c
@@ -4046,7 +4046,6 @@ err_out_free_regions:
 	pci_release_regions(pdev);
 err_out_disable_pdev:
 	pci_disable_device(pdev);
-	pci_set_drvdata(pdev, NULL);
 err_out:
 	return err;
 }
@@ -4090,7 +4089,6 @@ static void skge_remove(struct pci_dev *pdev)
 
 	iounmap(hw->regs);
 	kfree(hw);
-	pci_set_drvdata(pdev, NULL);
 }
 
 #ifdef CONFIG_PM_SLEEP
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 08/15] net: jme: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:13 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Guo-Fu Tseng'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/jme.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c
index b56d2a2..f5685c0 100644
--- a/drivers/net/ethernet/jme.c
+++ b/drivers/net/ethernet/jme.c
@@ -3192,7 +3192,6 @@ jme_init_one(struct pci_dev *pdev,
 err_out_unmap:
 	iounmap(jme->regs);
 err_out_free_netdev:
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(netdev);
 err_out_release_regions:
 	pci_release_regions(pdev);
@@ -3210,7 +3209,6 @@ jme_remove_one(struct pci_dev *pdev)
 
 	unregister_netdev(netdev);
 	iounmap(jme->regs);
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(netdev);
 	pci_release_regions(pdev);
 	pci_disable_device(pdev);
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 07/15] net: e100: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:13 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Jeff Kirsher',
	'Aaron Brown'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/intel/e100.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
index ada6e21..cbaba44 100644
--- a/drivers/net/ethernet/intel/e100.c
+++ b/drivers/net/ethernet/intel/e100.c
@@ -2985,7 +2985,6 @@ err_out_free_res:
 err_out_disable_pdev:
 	pci_disable_device(pdev);
 err_out_free_dev:
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(netdev);
 	return err;
 }
@@ -3003,7 +3002,6 @@ static void e100_remove(struct pci_dev *pdev)
 		free_netdev(netdev);
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
-		pci_set_drvdata(pdev, NULL);
 	}
 }
 
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 06/15] net: icplus: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:12 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Francois Romieu',
	'Sorbica Shieh'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/icplus/ipg.c |    1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/ethernet/icplus/ipg.c b/drivers/net/ethernet/icplus/ipg.c
index bdf5023..25045ae 100644
--- a/drivers/net/ethernet/icplus/ipg.c
+++ b/drivers/net/ethernet/icplus/ipg.c
@@ -2183,7 +2183,6 @@ static void ipg_remove(struct pci_dev *pdev)
 
 	free_netdev(dev);
 	pci_disable_device(pdev);
-	pci_set_drvdata(pdev, NULL);
 }
 
 static const struct net_device_ops ipg_netdev_ops = {
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 05/15] net: fealnx: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:12 UTC (permalink / raw)
  To: 'David S. Miller'; +Cc: netdev, 'Jingoo Han'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/fealnx.c |    1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/ethernet/fealnx.c b/drivers/net/ethernet/fealnx.c
index c706b7a..4b22a95 100644
--- a/drivers/net/ethernet/fealnx.c
+++ b/drivers/net/ethernet/fealnx.c
@@ -699,7 +699,6 @@ static void fealnx_remove_one(struct pci_dev *pdev)
 		pci_iounmap(pdev, np->mem);
 		free_netdev(dev);
 		pci_release_regions(pdev);
-		pci_set_drvdata(pdev, NULL);
 	} else
 		printk(KERN_ERR "fealnx: remove for unknown device\n");
 }
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 04/15] net: be2net: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:11 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Sathya Perla',
	'Subbu Seetharaman', 'Ajit Khaparde'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/emulex/benet/be_main.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index f0866e2..393e3dc 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -4204,7 +4204,6 @@ static void be_remove(struct pci_dev *pdev)
 
 	pci_disable_pcie_error_reporting(pdev);
 
-	pci_set_drvdata(pdev, NULL);
 	pci_release_regions(pdev);
 	pci_disable_device(pdev);
 
@@ -4534,7 +4533,6 @@ ctrl_clean:
 	be_ctrl_cleanup(adapter);
 free_netdev:
 	free_netdev(netdev);
-	pci_set_drvdata(pdev, NULL);
 rel_reg:
 	pci_release_regions(pdev);
 disable_dev:
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 03/15] net: dl2k: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:11 UTC (permalink / raw)
  To: 'David S. Miller'; +Cc: netdev, 'Jingoo Han'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/dlink/dl2k.c |    1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/ethernet/dlink/dl2k.c b/drivers/net/ethernet/dlink/dl2k.c
index afa8e3a..4fb756d 100644
--- a/drivers/net/ethernet/dlink/dl2k.c
+++ b/drivers/net/ethernet/dlink/dl2k.c
@@ -1746,7 +1746,6 @@ rio_remove1 (struct pci_dev *pdev)
 		pci_release_regions (pdev);
 		pci_disable_device (pdev);
 	}
-	pci_set_drvdata (pdev, NULL);
 }
 
 static struct pci_driver rio_driver = {
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 02/15] net: sundance: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:10 UTC (permalink / raw)
  To: 'David S. Miller'
  Cc: netdev, 'Jingoo Han', 'Denis Kirjanov'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/dlink/sundance.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/dlink/sundance.c b/drivers/net/ethernet/dlink/sundance.c
index bf3bf6f..113cd79 100644
--- a/drivers/net/ethernet/dlink/sundance.c
+++ b/drivers/net/ethernet/dlink/sundance.c
@@ -703,7 +703,6 @@ err_out_unmap_tx:
 	dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE,
 		np->tx_ring, np->tx_ring_dma);
 err_out_cleardev:
-	pci_set_drvdata(pdev, NULL);
 	pci_iounmap(pdev, ioaddr);
 err_out_res:
 	pci_release_regions(pdev);
@@ -1941,7 +1940,6 @@ static void sundance_remove1(struct pci_dev *pdev)
 	    pci_iounmap(pdev, np->base);
 	    pci_release_regions(pdev);
 	    free_netdev(dev);
-	    pci_set_drvdata(pdev, NULL);
 	}
 }
 
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 01/15] net: tulip: remove unnecessary pci_set_drvdata()
From: Jingoo Han @ 2013-10-21  2:09 UTC (permalink / raw)
  To: 'David S. Miller'; +Cc: netdev, 'Jingoo Han'
In-Reply-To: <003801cece02$6abb0160$40310420$%han@samsung.com>

The driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
---
 drivers/net/ethernet/dec/tulip/de2104x.c     |    1 -
 drivers/net/ethernet/dec/tulip/dmfe.c        |    3 ---
 drivers/net/ethernet/dec/tulip/tulip_core.c  |    1 -
 drivers/net/ethernet/dec/tulip/uli526x.c     |    2 --
 drivers/net/ethernet/dec/tulip/winbond-840.c |    3 ---
 drivers/net/ethernet/dec/tulip/xircom_cb.c   |    2 --
 6 files changed, 12 deletions(-)

diff --git a/drivers/net/ethernet/dec/tulip/de2104x.c b/drivers/net/ethernet/dec/tulip/de2104x.c
index eaab73c..38148b0 100644
--- a/drivers/net/ethernet/dec/tulip/de2104x.c
+++ b/drivers/net/ethernet/dec/tulip/de2104x.c
@@ -2110,7 +2110,6 @@ static void de_remove_one(struct pci_dev *pdev)
 	iounmap(de->regs);
 	pci_release_regions(pdev);
 	pci_disable_device(pdev);
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(dev);
 }
 
diff --git a/drivers/net/ethernet/dec/tulip/dmfe.c b/drivers/net/ethernet/dec/tulip/dmfe.c
index 8313930..5ad9e3e 100644
--- a/drivers/net/ethernet/dec/tulip/dmfe.c
+++ b/drivers/net/ethernet/dec/tulip/dmfe.c
@@ -523,7 +523,6 @@ err_out_res:
 err_out_disable:
 	pci_disable_device(pdev);
 err_out_free:
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(dev);
 
 	return err;
@@ -548,8 +547,6 @@ static void dmfe_remove_one(struct pci_dev *pdev)
 					db->buf_pool_ptr, db->buf_pool_dma_ptr);
 		pci_release_regions(pdev);
 		free_netdev(dev);	/* free board information */
-
-		pci_set_drvdata(pdev, NULL);
 	}
 
 	DMFE_DBUG(0, "dmfe_remove_one() exit", 0);
diff --git a/drivers/net/ethernet/dec/tulip/tulip_core.c b/drivers/net/ethernet/dec/tulip/tulip_core.c
index 4e8cfa2..add05f1 100644
--- a/drivers/net/ethernet/dec/tulip/tulip_core.c
+++ b/drivers/net/ethernet/dec/tulip/tulip_core.c
@@ -1939,7 +1939,6 @@ static void tulip_remove_one(struct pci_dev *pdev)
 	pci_iounmap(pdev, tp->base_addr);
 	free_netdev (dev);
 	pci_release_regions (pdev);
-	pci_set_drvdata (pdev, NULL);
 
 	/* pci_power_off (pdev, -1); */
 }
diff --git a/drivers/net/ethernet/dec/tulip/uli526x.c b/drivers/net/ethernet/dec/tulip/uli526x.c
index 93845af..a5397b1 100644
--- a/drivers/net/ethernet/dec/tulip/uli526x.c
+++ b/drivers/net/ethernet/dec/tulip/uli526x.c
@@ -429,7 +429,6 @@ err_out_release:
 err_out_disable:
 	pci_disable_device(pdev);
 err_out_free:
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(dev);
 
 	return err;
@@ -450,7 +449,6 @@ static void uli526x_remove_one(struct pci_dev *pdev)
 				db->buf_pool_ptr, db->buf_pool_dma_ptr);
 	pci_release_regions(pdev);
 	pci_disable_device(pdev);
-	pci_set_drvdata(pdev, NULL);
 	free_netdev(dev);
 }
 
diff --git a/drivers/net/ethernet/dec/tulip/winbond-840.c b/drivers/net/ethernet/dec/tulip/winbond-840.c
index c7b04ec..62fe512 100644
--- a/drivers/net/ethernet/dec/tulip/winbond-840.c
+++ b/drivers/net/ethernet/dec/tulip/winbond-840.c
@@ -468,7 +468,6 @@ static int w840_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)
 	return 0;
 
 err_out_cleardev:
-	pci_set_drvdata(pdev, NULL);
 	pci_iounmap(pdev, ioaddr);
 err_out_free_res:
 	pci_release_regions(pdev);
@@ -1542,8 +1541,6 @@ static void w840_remove1(struct pci_dev *pdev)
 		pci_iounmap(pdev, np->base_addr);
 		free_netdev(dev);
 	}
-
-	pci_set_drvdata(pdev, NULL);
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/net/ethernet/dec/tulip/xircom_cb.c b/drivers/net/ethernet/dec/tulip/xircom_cb.c
index 9b84cb0..ab7ebac 100644
--- a/drivers/net/ethernet/dec/tulip/xircom_cb.c
+++ b/drivers/net/ethernet/dec/tulip/xircom_cb.c
@@ -289,7 +289,6 @@ out:
 err_unmap:
 	pci_iounmap(pdev, private->ioaddr);
 reg_fail:
-	pci_set_drvdata(pdev, NULL);
 	dma_free_coherent(d, 8192, private->tx_buffer, private->tx_dma_handle);
 tx_buf_fail:
 	dma_free_coherent(d, 8192, private->rx_buffer, private->rx_dma_handle);
@@ -317,7 +316,6 @@ static void xircom_remove(struct pci_dev *pdev)
 
 	unregister_netdev(dev);
 	pci_iounmap(pdev, card->ioaddr);
-	pci_set_drvdata(pdev, NULL);
 	dma_free_coherent(d, 8192, card->tx_buffer, card->tx_dma_handle);
 	dma_free_coherent(d, 8192, card->rx_buffer, card->rx_dma_handle);
 	free_netdev(dev);
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 00/15] net: ethernet: remove unnecessary pci_set_drvdata() part 2
From: Jingoo Han @ 2013-10-21  2:08 UTC (permalink / raw)
  To: 'David S. Miller'; +Cc: netdev, 'Jingoo Han'

Since commit 0998d0631001288a5974afc0b2a5f568bcdecb4d
(device-core: Ensure drvdata = NULL when no driver is bound),
the driver core clears the driver data to NULL after device_release
or on probe failure. Thus, it is not needed to manually clear the
device driver data to NULL.

---
 drivers/net/ethernet/dec/tulip/de2104x.c         |    1 -
 drivers/net/ethernet/dec/tulip/dmfe.c            |    3 ---
 drivers/net/ethernet/dec/tulip/tulip_core.c      |    1 -
 drivers/net/ethernet/dec/tulip/uli526x.c         |    2 --
 drivers/net/ethernet/dec/tulip/winbond-840.c     |    3 ---
 drivers/net/ethernet/dec/tulip/xircom_cb.c       |    2 --
 drivers/net/ethernet/dlink/dl2k.c                |    1 -
 drivers/net/ethernet/dlink/sundance.c            |    2 --
 drivers/net/ethernet/emulex/benet/be_main.c      |    2 --
 drivers/net/ethernet/fealnx.c                    |    1 -
 drivers/net/ethernet/icplus/ipg.c                |    1 -
 drivers/net/ethernet/intel/e100.c                |    2 --
 drivers/net/ethernet/jme.c                       |    2 --
 drivers/net/ethernet/marvell/skge.c              |    2 --
 drivers/net/ethernet/marvell/sky2.c              |    3 ---
 drivers/net/ethernet/micrel/ksz884x.c            |    2 --
 drivers/net/ethernet/myricom/myri10ge/myri10ge.c |    1 -
 drivers/net/ethernet/natsemi/natsemi.c           |    2 --
 drivers/net/ethernet/neterion/s2io.c             |    2 --
 drivers/net/ethernet/neterion/vxge/vxge-main.c   |    2 --
 drivers/net/ethernet/packetengines/hamachi.c     |    1 -
 drivers/net/ethernet/packetengines/yellowfin.c   |    2 --
 22 files changed, 40 deletions(-)

^ permalink raw reply

* Re: [PATCH net-next] bonding: move bond-specific init after enslave happens
From: Ding Tianhong @ 2013-10-21  1:35 UTC (permalink / raw)
  To: Veaceslav Falico; +Cc: netdev, jiri, Jay Vosburgh, Andy Gospodarek
In-Reply-To: <1382273273-27344-1-git-send-email-vfalico@redhat.com>

On 2013/10/20 20:47, Veaceslav Falico wrote:
> As Jiri noted, currently we first do all bonding-specific initialization
> (specifically - bond_select_active_slave(bond)) before we actually attach
> the slave (so that it becomes visible through bond_for_each_slave() and
> friends). This might result in bond_select_active_slave() not seeing the
> first/new slave and, thus, not actually selecting an active slave.
> 
> Fix this by moving all the bond-related init part after we've actually
> completely initialized and linked (via bond_master_upper_dev_link()) the
> new slave.
> 
> After this we have all the initialization of the new slave *before*
> linking, and all the stuff that needs to be done on bonding *after* it. It
> has also a bonus effect - we can remove the locking on the new slave init
> completely, and only use it for bond_select_active_slave().
> 
> Reported-by: Jiri Pirko <jiri@resnulli.us>
> CC: Jay Vosburgh <fubar@us.ibm.com>
> CC: Andy Gospodarek <andy@greyhouse.net>
> Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
> ---
>  drivers/net/bonding/bond_main.c | 29 ++++++++++-------------------
>  1 file changed, 10 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
> index d90734f..047c0fb 100644
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -1471,22 +1471,14 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
>  		goto err_close;
>  	}
>  
> -	write_lock_bh(&bond->lock);
> -
>  	prev_slave = bond_last_slave(bond);
>  	bond_attach_slave(bond, new_slave);
>  
>  	new_slave->delay = 0;
>  	new_slave->link_failure_count = 0;
>  
> -	write_unlock_bh(&bond->lock);
> -
> -	bond_compute_features(bond);
> -
>  	bond_update_speed_duplex(new_slave);
>  
> -	read_lock(&bond->lock);
> -
>  	new_slave->last_arp_rx = jiffies -
>  		(msecs_to_jiffies(bond->params.arp_interval) + 1);
>  	for (i = 0; i < BOND_MAX_ARP_TARGETS; i++)
> @@ -1547,12 +1539,9 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
>  		}
>  	}
>  
> -	write_lock_bh(&bond->curr_slave_lock);
> -
>  	switch (bond->params.mode) {
>  	case BOND_MODE_ACTIVEBACKUP:
>  		bond_set_slave_inactive_flags(new_slave);
> -		bond_select_active_slave(bond);
>  		break;
>  	case BOND_MODE_8023AD:
>  		/* in 802.3ad mode, the internal mechanism
> @@ -1578,7 +1567,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
>  	case BOND_MODE_ALB:
>  		bond_set_active_slave(new_slave);
>  		bond_set_slave_inactive_flags(new_slave);
> -		bond_select_active_slave(bond);
>  		break;
>  	default:
>  		pr_debug("This slave is always active in trunk mode\n");
> @@ -1596,10 +1584,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
>  		break;
>  	} /* switch(bond_mode) */
>  
> -	write_unlock_bh(&bond->curr_slave_lock);
> -
> -	bond_set_carrier(bond);
> -
>  #ifdef CONFIG_NET_POLL_CONTROLLER
>  	slave_dev->npinfo = bond->dev->npinfo;
>  	if (slave_dev->npinfo) {
> @@ -1614,8 +1598,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
>  	}
>  #endif
>  
> -	read_unlock(&bond->lock);
> -
>  	res = netdev_rx_handler_register(slave_dev, bond_handle_frame,
>  					 new_slave);
>  	if (res) {
> @@ -1629,6 +1611,16 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
>  		goto err_unregister;
>  	}
>  
> +	bond_compute_features(bond);
> +	bond_set_carrier(bond);
> +
> +	if (USES_PRIMARY(bond->params.mode)) {
> +		read_lock(&bond->lock);
> +		write_lock_bh(&bond->curr_slave_lock);
> +		bond_select_active_slave(bond);
> +		write_unlock_bh(&bond->curr_slave_lock);
> +		read_unlock(&bond->lock);
> +	}
>  

agree to move the lock, and I think bond_attach_slave() should add here,
as it look more logical, the slave_cnt should not add before the slave truly
add to the bond.

Regards.
Ding

>  	pr_info("%s: enslaving %s as a%s interface with a%s link.\n",
>  		bond_dev->name, slave_dev->name,
> @@ -1686,7 +1678,6 @@ err_free:
>  	kfree(new_slave);
>  
>  err_undo_flags:
> -	bond_compute_features(bond);
>  	/* Enslave of first slave has failed and we need to fix master's mac */
>  	if (!bond_has_slaves(bond) &&
>  	    ether_addr_equal(bond_dev->dev_addr, slave_dev->dev_addr))
> 

^ permalink raw reply

* Re: [PATCHSET net-next v3 00/07] Support for byte queue limits on various drivers
From: Francois Romieu @ 2013-10-20 22:07 UTC (permalink / raw)
  To: Tino Reichardt; +Cc: netdev, David S. Miller
In-Reply-To: <1382296991-20289-1-git-send-email-milky-kernel@mcmilk.de>

Tino Reichardt <milky-kernel@mcmilk.de> :
[...]
> this patchset is intended for net-next/linux-3.13.
> 
> It adds support for byte queue limits on various network drivers.
> 
> Since not all of them are fully tested by now, I added an bql_disable
> module parameter, which can be used to disable the BQL code.

(regarding the r8169 changes)

The module parameter is pointless: you previously said you tested the
r8169 changes, there is a whole release cycle ahead and we already
have enough kernels that can be choosen amongst if some specific
feature turns unexpectedly wrong.

This way you won't have to ponder if you should keep the original
author's Signed-off-by in the r8169 driver or not.

-- 
Ueimor

^ permalink raw reply

* Re: [PATCHSET net-next v3 00/07] Support for byte queue limits on various drivers
From: Andi Kleen @ 2013-10-20 21:13 UTC (permalink / raw)
  To: Tino Reichardt; +Cc: netdev, David S. Miller
In-Reply-To: <1382296991-20289-1-git-send-email-milky-kernel@mcmilk.de>

Tino Reichardt <milky-kernel@mcmilk.de> writes:
>
> Since not all of them are fully tested by now, I added an bql_disable
> module parameter, which can be used to disable the BQL code.
>
> "if (likely(bql_disable == false))" was replaced by
> "if (unlikely(bql_disable))" ...

If it's untested it should probably be disabled by default,
until someone tests it.

-Andi

-- 
ak@linux.intel.com -- Speaking for myself only

^ permalink raw reply

* Fw: [Bug 63321] New: tcp_fastretrans_alert
From: Stephen Hemminger @ 2013-10-20 20:40 UTC (permalink / raw)
  To: netdev



Begin forwarded message:

Date: Sun, 20 Oct 2013 06:20:25 -0700
From: "bugzilla-daemon@bugzilla.kernel.org" <bugzilla-daemon@bugzilla.kernel.org>
To: "stephen@networkplumber.org" <stephen@networkplumber.org>
Subject: [Bug 63321] New: tcp_fastretrans_alert


https://bugzilla.kernel.org/show_bug.cgi?id=63321

            Bug ID: 63321
           Summary: tcp_fastretrans_alert
           Product: Networking
           Version: 2.5
    Kernel Version: 3.11.6
          Hardware: x86-64
                OS: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: IPV4
          Assignee: shemminger@linux-foundation.org
          Reporter: warrior-elite@yandex.ru
        Regression: No

[  865.064799] ------------[ cut here ]------------
[  865.064813] WARNING: CPU: 0 PID: 0 at
/home/apw/COD/linux/net/ipv4/tcp_input.c:2711
tcp_fastretrans_alert+0x5df/0x620()
[  865.064815] Modules linked in: pci_stub vboxpci(OF) vboxnetadp(OF)
vboxnetflt(OF) joydev hid_generic usbhid hid vboxdrv(OF) binfmt_misc
snd_hda_codec_realtek ppdev uvcvideo videobuf2_vmalloc videobuf2_memops
videobuf2_core videodev snd_usb_audio snd_usbmidi_lib nvidia(POF) snd_hda_intel
snd_hda_codec snd_hwdep snd_pcm kvm_amd kvm snd_page_alloc snd_seq_midi
snd_seq_midi_event snd_rawmidi snd_seq microcode snd_seq_device snd_timer snd
serio_raw soundcore edac_core k10temp edac_mce_amd drm sp5100_tco ohci_pci
i2c_piix4 wmi mac_hid parport_pc lp parport pata_acpi ahci r8169 pata_atiixp
libahci mii
[  865.064843] CPU: 0 PID: 0 Comm: swapper/0 Tainted: PF          O
3.11.6-031106-generic #201310181453
[  865.064845] Hardware name: Gigabyte Technology Co., Ltd.
GA-MA770-UD3/GA-MA770-UD3, BIOS FKb 07/08/2010
[  865.064846]  0000000000000a97 ffff88012fc039a0 ffffffff81714a56
000000000000259d
[  865.064849]  0000000000000000 ffff88012fc039e0 ffffffff8106539c
ffff88012fc03a00
[  865.064851]  ffff880114f45400 000000000000000c 0000000000004120
0000000000000001
[  865.064853] Call Trace:
[  865.064855]  <IRQ>  [<ffffffff81714a56>] dump_stack+0x46/0x58
[  865.064861]  [<ffffffff8106539c>] warn_slowpath_common+0x8c/0xc0
[  865.064863]  [<ffffffff810653ea>] warn_slowpath_null+0x1a/0x20
[  865.064865]  [<ffffffff8165f9df>] tcp_fastretrans_alert+0x5df/0x620
[  865.064867]  [<ffffffff816608c8>] tcp_ack+0x498/0x630
[  865.064868]  [<ffffffff8166109a>] tcp_rcv_established+0x31a/0x780
[  865.064871]  [<ffffffff8166b3b5>] tcp_v4_do_rcv+0x155/0x240
[  865.064873]  [<ffffffff8166d230>] tcp_v4_rcv+0x5f0/0x770
[  865.064875]  [<ffffffff81099f42>] ? try_to_wake_up+0x192/0x210
[  865.064878]  [<ffffffff81647a6e>] ip_local_deliver_finish+0xce/0x250
[  865.064880]  [<ffffffff81647d7b>] ip_local_deliver+0x4b/0x90
[  865.064881]  [<ffffffff81647761>] ip_rcv_finish+0x121/0x360
[  865.064883]  [<ffffffff81647ff6>] ip_rcv+0x236/0x350
[  865.064886]  [<ffffffff81611a2a>] __netif_receive_skb_core+0x5ca/0x720
[  865.064888]  [<ffffffff81611ba1>] __netif_receive_skb+0x21/0x70
[  865.064890]  [<ffffffff81611c13>] netif_receive_skb+0x23/0x90
[  865.064891]  [<ffffffff81612330>] napi_gro_receive+0xb0/0x130
[  865.064898]  [<ffffffffa00217f2>] rtl_rx+0xe2/0x320 [r8169]
[  865.064903]  [<ffffffffa00254c5>] rtl8169_poll+0x105/0x120 [r8169]
[  865.064905]  [<ffffffff8108d00e>] ? hrtimer_get_next_event+0xce/0xd0
[  865.064907]  [<ffffffff81612ca4>] net_rx_action+0x134/0x260
[  865.064910]  [<ffffffff814734c1>] ? add_interrupt_randomness+0x41/0x190
[  865.064913]  [<ffffffff8106a510>] __do_softirq+0xe0/0x280
[  865.064915]  [<ffffffff8172005e>] ? _raw_spin_lock+0xe/0x20
[  865.064918]  [<ffffffff8172ae9c>] call_softirq+0x1c/0x30
[  865.064921]  [<ffffffff81015e35>] do_softirq+0x65/0xa0
[  865.064923]  [<ffffffff8106a82e>] irq_exit+0x9e/0xc0
[  865.064924]  [<ffffffff8172b7a3>] do_IRQ+0x63/0xe0
[  865.064926]  [<ffffffff8172066d>] common_interrupt+0x6d/0x6d
[  865.064927]  <EOI>  [<ffffffff810504f6>] ? native_safe_halt+0x6/0x10
[  865.064932]  [<ffffffff8101c803>] default_idle+0x23/0xe0
[  865.064934]  [<ffffffff8101c93a>] amd_e400_idle+0x7a/0x100
[  865.064936]  [<ffffffff8101d096>] arch_cpu_idle+0x26/0x30
[  865.064938]  [<ffffffff810ba77e>] cpu_idle_loop+0x7e/0x250
[  865.064940]  [<ffffffff810ba9bb>] cpu_startup_entry+0x6b/0x70
[  865.064943]  [<ffffffff816fcbd7>] rest_init+0x77/0x80
[  865.064946]  [<ffffffff81d24f23>] start_kernel+0x407/0x414
[  865.064948]  [<ffffffff81d249ae>] ? do_early_param+0x87/0x87
[  865.064950]  [<ffffffff81d24120>] ? early_idt_handlers+0x120/0x120
[  865.064952]  [<ffffffff81d245e8>] x86_64_start_reservations+0x2a/0x2c
[  865.064954]  [<ffffffff81d246f2>] x86_64_start_kernel+0x108/0x117
[  865.064955] ---[ end trace 7fed0fa1e4d5f06f ]---

-- 
You are receiving this mail because:
You are the assignee for the bug.

^ permalink raw reply

* Re: [PATCHSET net-next v3 00/07] Support for byte queue limits on various drivers
From: Tino Reichardt @ 2013-10-20 20:19 UTC (permalink / raw)
  To: netdev
In-Reply-To: <1382296991-20289-1-git-send-email-milky-kernel@mcmilk.de>

* Tino Reichardt <milky-kernel@mcmilk.de> wrote:
> Hello again,
> 
> this patchset is intended for net-next/linux-3.13.
> 
> It adds support for byte queue limits on various network drivers.
> 
> Since not all of them are fully tested by now, I added an bql_disable
> module parameter, which can be used to disable the BQL code.
> 
> "if (likely(bql_disable == false))" was replaced by
> "if (unlikely(bql_disable))" ...


Please ignore Patchset v3... "unlikely(bql_disable)" is of cause not
correct :(


Please use "[PATCHSET net-next v3 00/07]" instead.

Sorry for all the noise here ;)

-- 
Best regards, TR

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox