From: David S. Miller Date: Tue, 3 Aug 2010 05:22:46 +0000 (-0700) Subject: Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 X-Git-Tag: v2.6.36-rc1~571^2~9 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=00dad5e479531e379aba7358600cc768725d4f1f;p=linux.git Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 Conflicts: drivers/net/e1000e/hw.h net/bridge/br_device.c net/bridge/br_input.c --- 00dad5e479531e379aba7358600cc768725d4f1f diff --cc drivers/net/e1000e/hw.h index 0cd569a57f6d,664ed5812cff..a419b0715985 --- a/drivers/net/e1000e/hw.h +++ b/drivers/net/e1000e/hw.h @@@ -312,8 -308,8 +312,8 @@@ enum e1e_registers #define E1000_KMRNCTRLSTA_INBAND_PARAM 0x9 /* Kumeran InBand Parameters */ #define E1000_KMRNCTRLSTA_DIAG_NELPBK 0x1000 /* Nearend Loopback mode */ #define E1000_KMRNCTRLSTA_K1_CONFIG 0x7 - #define E1000_KMRNCTRLSTA_K1_ENABLE 0x140E + #define E1000_KMRNCTRLSTA_K1_ENABLE 0x0002 -#define E1000_KMRNCTRLSTA_K1_DISABLE 0x1400 +#define E1000_KMRNCTRLSTA_HD_CTRL 0x0002 #define IFE_PHY_EXTENDED_STATUS_CONTROL 0x10 #define IFE_PHY_SPECIAL_CONTROL 0x11 /* 100BaseTx PHY Special Control */ diff --cc net/bridge/br_device.c index 075c435ad22d,f49bcd9d9113..cf09fe591fc2 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@@ -48,13 -46,12 +48,16 @@@ netdev_tx_t br_dev_xmit(struct sk_buff skb_reset_mac_header(skb); skb_pull(skb, ETH_HLEN); + rcu_read_lock(); if (is_multicast_ether_addr(dest)) { + if (unlikely(netpoll_tx_running(dev))) { + br_flood_deliver(br, skb); + goto out; + } - if (br_multicast_rcv(br, NULL, skb)) + if (br_multicast_rcv(br, NULL, skb)) { + kfree_skb(skb); goto out; + } mdst = br_mdb_get(br, skb); if (mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) diff --cc net/bridge/br_input.c index 5fc1c5b1c360,114365c9eb1c..826cd5221536 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c @@@ -110,12 -108,13 +110,12 @@@ drop goto out; } - /* note: already called with rcu_read_lock (preempt_disabled) */ + /* note: already called with rcu_read_lock */ static int br_handle_local_finish(struct sk_buff *skb) { - struct net_bridge_port *p = rcu_dereference(skb->dev->br_port); + struct net_bridge_port *p = br_port_get_rcu(skb->dev); - if (p) - br_fdb_update(p->br, p, eth_hdr(skb)->h_source); + br_fdb_update(p->br, p, eth_hdr(skb)->h_source); return 0; /* process further */ } @@@ -132,13 -131,12 +132,12 @@@ static inline int is_link_local(const u } /* - * Called via br_handle_frame_hook. * Return NULL if skb is handled - * note: already called with rcu_read_lock (preempt_disabled) from - * netif_receive_skb + * note: already called with rcu_read_lock */ -struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) +struct sk_buff *br_handle_frame(struct sk_buff *skb) { + struct net_bridge_port *p; const unsigned char *dest = eth_hdr(skb)->h_dest; int (*rhook)(struct sk_buff *skb);