diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-31 21:43:13 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-31 21:43:13 -0400 |
| commit | fd37ce34bd512f2b1a503f82abf8768da556a955 (patch) | |
| tree | 557ff43ff5291d1704527e31293633fbc2f956d5 | |
| parent | 4b24ff71108164e047cf2c95990b77651163e315 (diff) | |
| parent | caacf05e5ad1abf0a2864863da4e33024bc68ec6 (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.txt | 6 | ||||
| -rw-r--r-- | drivers/isdn/hardware/mISDN/avmfritz.c | 7 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 71 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/tg3.h | 8 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qlge/qlge_main.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/seeq/seeq8005.c | 4 | ||||
| -rw-r--r-- | drivers/net/tun.c | 6 | ||||
| -rw-r--r-- | include/net/inet_sock.h | 9 | ||||
| -rw-r--r-- | include/net/ip_fib.h | 6 | ||||
| -rw-r--r-- | include/net/netns/ipv4.h | 2 | ||||
| -rw-r--r-- | include/net/route.h | 3 | ||||
| -rw-r--r-- | net/bridge/br_sysfs_if.c | 6 | ||||
| -rw-r--r-- | net/core/rtnetlink.c | 8 | ||||
| -rw-r--r-- | net/ipv4/fib_frontend.c | 1 | ||||
| -rw-r--r-- | net/ipv4/fib_semantics.c | 42 | ||||
| -rw-r--r-- | net/ipv4/fib_trie.c | 53 | ||||
| -rw-r--r-- | net/ipv4/ip_input.c | 2 | ||||
| -rw-r--r-- | net/ipv4/route.c | 183 | ||||
| -rw-r--r-- | net/ipv4/sysctl_net_ipv4.c | 11 | ||||
| -rw-r--r-- | net/ipv4/tcp_input.c | 3 | ||||
| -rw-r--r-- | net/ipv4/tcp_ipv4.c | 12 | ||||
| -rw-r--r-- | net/ipv4/tcp_minisocks.c | 3 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_policy.c | 1 | ||||
| -rw-r--r-- | net/ipv6/ip6_input.c | 2 | ||||
| -rw-r--r-- | net/ipv6/route.c | 8 |
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 | ||
| 51 | rt_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 | |||
| 57 | IP Fragmentation: | 51 | IP Fragmentation: |
| 58 | 52 | ||
| 59 | ipfrag_high_thresh - INTEGER | 53 | ipfrag_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); | ||
