aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-07-31 21:43:13 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-07-31 21:43:13 -0400
commitfd37ce34bd512f2b1a503f82abf8768da556a955 (patch)
tree557ff43ff5291d1704527e31293633fbc2f956d5
parent4b24ff71108164e047cf2c95990b77651163e315 (diff)
parentcaacf05e5ad1abf0a2864863da4e33024bc68ec6 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking update from David S. Miller: "I think Eric Dumazet and I have dealt with all of the known routing cache removal fallout. Some other minor fixes all around. 1) Fix RCU of cached routes, particular of output routes which require liberation via call_rcu() instead of call_rcu_bh(). From Eric Dumazet. 2) Make sure we purge net device references in cached routes properly. 3) TG3 driver bug fixes from Michael Chan. 4) Fix reported 'expires' value in ipv6 routes, from Li Wei. 5) TUN driver ioctl leaks kernel bytes to userspace, from Mathias Krause." * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (22 commits) ipv4: Properly purge netdev references on uncached routes. ipv4: Cache routes in nexthop exception entries. ipv4: percpu nh_rth_output cache ipv4: Restore old dst_free() behavior. bridge: make port attributes const ipv4: remove rt_cache_rebuild_count net: ipv4: fix RCU races on dst refcounts net: TCP early demux cleanup tun: Fix formatting. net/tun: fix ioctl() based info leaks tg3: Update version to 3.124 tg3: Fix race condition in tg3_get_stats64() tg3: Add New 5719 Read DMA workaround tg3: Fix Read DMA workaround for 5719 A0. tg3: Request APE_LOCK_PHY before PHY access ipv6: fix incorrect route 'expires' value passed to userspace mISDN: Bugfix only few bytes are transfered on a connection seeq: use PTR_RET at init_module of driver bnx2x: remove cast around the kmalloc in bnx2x_prev_mark_path ipv4: clean up put_child ...
-rw-r--r--Documentation/networking/ip-sysctl.txt6
-rw-r--r--drivers/isdn/hardware/mISDN/avmfritz.c7
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c3
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c71
-rw-r--r--drivers/net/ethernet/broadcom/tg3.h8
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_main.c1
-rw-r--r--drivers/net/ethernet/seeq/seeq8005.c4
-rw-r--r--drivers/net/tun.c6
-rw-r--r--include/net/inet_sock.h9
-rw-r--r--include/net/ip_fib.h6
-rw-r--r--include/net/netns/ipv4.h2
-rw-r--r--include/net/route.h3
-rw-r--r--net/bridge/br_sysfs_if.c6
-rw-r--r--net/core/rtnetlink.c8
-rw-r--r--net/ipv4/fib_frontend.c1
-rw-r--r--net/ipv4/fib_semantics.c42
-rw-r--r--net/ipv4/fib_trie.c53
-rw-r--r--net/ipv4/ip_input.c2
-rw-r--r--net/ipv4/route.c183
-rw-r--r--net/ipv4/sysctl_net_ipv4.c11
-rw-r--r--net/ipv4/tcp_input.c3
-rw-r--r--net/ipv4/tcp_ipv4.c12
-rw-r--r--net/ipv4/tcp_minisocks.c3
-rw-r--r--net/ipv4/xfrm4_policy.c1
-rw-r--r--net/ipv6/ip6_input.c2
-rw-r--r--net/ipv6/route.c8
26 files changed, 316 insertions, 145 deletions
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index 406a5226220d..ca447b35b833 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -48,12 +48,6 @@ min_adv_mss - INTEGER
48 The advertised MSS depends on the first hop route MTU, but will 48 The advertised MSS depends on the first hop route MTU, but will
49 never be lower than this setting. 49 never be lower than this setting.
50 50
51rt_cache_rebuild_count - INTEGER
52 The per net-namespace route cache emergency rebuild threshold.
53 Any net-namespace having its route cache rebuilt due to
54 a hash bucket chain being too long more than this many times
55 will have its route caching disabled
56
57IP Fragmentation: 51IP Fragmentation:
58 52
59ipfrag_high_thresh - INTEGER 53ipfrag_high_thresh - INTEGER
diff --git a/drivers/isdn/hardware/mISDN/avmfritz.c b/drivers/isdn/hardware/mISDN/avmfritz.c
index c08fc605e56b..fa6ca4733725 100644
--- a/drivers/isdn/hardware/mISDN/avmfritz.c
+++ b/drivers/isdn/hardware/mISDN/avmfritz.c
@@ -449,7 +449,8 @@ hdlc_fill_fifo(struct bchannel *bch)
449{ 449{
450 struct fritzcard *fc = bch->hw; 450 struct fritzcard *fc = bch->hw;
451 struct hdlc_hw *hdlc; 451 struct hdlc_hw *hdlc;
452 int count, fs, cnt = 0, idx, fillempty = 0; 452 int count, fs, cnt = 0, idx;
453 bool fillempty = false;
453 u8 *p; 454 u8 *p;
454 u32 *ptr, val, addr; 455 u32 *ptr, val, addr;
455 456
@@ -462,7 +463,7 @@ hdlc_fill_fifo(struct bchannel *bch)
462 return; 463 return;
463 count = fs; 464 count = fs;
464 p = bch->fill; 465 p = bch->fill;
465 fillempty = 1; 466 fillempty = true;
466 } else { 467 } else {
467 count = bch->tx_skb->len - bch->tx_idx; 468 count = bch->tx_skb->len - bch->tx_idx;
468 if (count <= 0) 469 if (count <= 0)
@@ -477,7 +478,7 @@ hdlc_fill_fifo(struct bchannel *bch)
477 hdlc->ctrl.sr.cmd |= HDLC_CMD_XME; 478 hdlc->ctrl.sr.cmd |= HDLC_CMD_XME;
478 } 479 }
479 ptr = (u32 *)p; 480 ptr = (u32 *)p;
480 if (fillempty) { 481 if (!fillempty) {
481 pr_debug("%s.B%d: %d/%d/%d", fc->name, bch->nr, count, 482 pr_debug("%s.B%d: %d/%d/%d", fc->name, bch->nr, count,
482 bch->tx_idx, bch->tx_skb->len); 483 bch->tx_idx, bch->tx_skb->len);
483 bch->tx_idx += count; 484 bch->tx_idx += count;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 9aaf863b4237..dd451c3dd83d 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -9360,8 +9360,7 @@ static int __devinit bnx2x_prev_mark_path(struct bnx2x *bp)
9360 struct bnx2x_prev_path_list *tmp_list; 9360 struct bnx2x_prev_path_list *tmp_list;
9361 int rc; 9361 int rc;
9362 9362
9363 tmp_list = (struct bnx2x_prev_path_list *) 9363 tmp_list = kmalloc(sizeof(struct bnx2x_prev_path_list), GFP_KERNEL);
9364 kmalloc(sizeof(struct bnx2x_prev_path_list), GFP_KERNEL);
9365 if (!tmp_list) { 9364 if (!tmp_list) {
9366 BNX2X_ERR("Failed to allocate 'bnx2x_prev_path_list'\n"); 9365 BNX2X_ERR("Failed to allocate 'bnx2x_prev_path_list'\n");
9367 return -ENOMEM; 9366 return -ENOMEM;
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 9a009fd6ea1b..bf906c51d82a 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -92,7 +92,7 @@ static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
92 92
93#define DRV_MODULE_NAME "tg3" 93#define DRV_MODULE_NAME "tg3"
94#define TG3_MAJ_NUM 3 94#define TG3_MAJ_NUM 3
95#define TG3_MIN_NUM 123 95#define TG3_MIN_NUM 124
96#define DRV_MODULE_VERSION \ 96#define DRV_MODULE_VERSION \
97 __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM) 97 __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
98#define DRV_MODULE_RELDATE "March 21, 2012" 98#define DRV_MODULE_RELDATE "March 21, 2012"
@@ -672,6 +672,12 @@ static int tg3_ape_lock(struct tg3 *tp, int locknum)
672 else 672 else
673 bit = 1 << tp->pci_fn; 673 bit = 1 << tp->pci_fn;
674 break; 674 break;
675 case TG3_APE_LOCK_PHY0:
676 case TG3_APE_LOCK_PHY1:
677 case TG3_APE_LOCK_PHY2:
678 case TG3_APE_LOCK_PHY3:
679 bit = APE_LOCK_REQ_DRIVER;
680 break;
675 default: 681 default:
676 return -EINVAL; 682 return -EINVAL;
677 } 683 }
@@ -723,6 +729,12 @@ static void tg3_ape_unlock(struct tg3 *tp, int locknum)
723 else 729 else
724 bit = 1 << tp->pci_fn; 730 bit = 1 << tp->pci_fn;
725 break; 731 break;
732 case TG3_APE_LOCK_PHY0:
733 case TG3_APE_LOCK_PHY1:
734 case TG3_APE_LOCK_PHY2:
735 case TG3_APE_LOCK_PHY3:
736 bit = APE_LOCK_GRANT_DRIVER;
737 break;
726 default: 738 default:
727 return; 739 return;
728 } 740 }
@@ -1052,6 +1064,8 @@ static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1052 udelay(80); 1064 udelay(80);
1053 } 1065 }
1054 1066
1067 tg3_ape_lock(tp, tp->phy_ape_lock);
1068
1055 *val = 0x0; 1069 *val = 0x0;
1056 1070
1057 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1071 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
@@ -1086,6 +1100,8 @@ static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1086 udelay(80); 1100 udelay(80);
1087 } 1101 }
1088 1102
1103 tg3_ape_unlock(tp, tp->phy_ape_lock);
1104
1089 return ret; 1105 return ret;
1090} 1106}
1091 1107
@@ -1105,6 +1121,8 @@ static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1105 udelay(80); 1121 udelay(80);
1106 } 1122 }
1107 1123
1124 tg3_ape_lock(tp, tp->phy_ape_lock);