* Re: [RFC PATCH] udp: don't rereference dst_entry dev pointer on rcv
From: David Miller @ 2013-03-07 23:15 UTC (permalink / raw)
To: eric.dumazet; +Cc: tparkin, netdev
In-Reply-To: <1362696444.15793.220.camel@edumazet-glaptop>
From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Thu, 07 Mar 2013 14:47:24 -0800
> On Thu, 2013-03-07 at 22:36 +0000, Tom Parkin wrote:
>> When a fragmented IP packet is queued during device teardown, it is possible
>> for the reassembled packet to hit the UDP rcv path with a NULL dst_entry dev
>> pointer. Drop such packets to prevent an oops.
>> ---
>> net/ipv4/udp.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
>> index 0a073a2..c38a4b1 100644
>> --- a/net/ipv4/udp.c
>> +++ b/net/ipv4/udp.c
>> @@ -1700,6 +1700,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
>> return __udp4_lib_mcast_deliver(net, skb, uh,
>> saddr, daddr, udptable);
>>
>> + if (skb_dst(skb)->dev == NULL)
>> + goto drop;
>> +
>> sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
>>
>> if (sk != NULL) {
>
>
> Hmm... couldnt it be tested in reassembly layer instead ?
>
> Why is it specific to UDP ?
Furthermore, when devices are unregistered we set the route's device
pointer to point to the loopback device, not NULL, exactly to avoid
this kind of problem.
I don't see anything in our generic DST handler nor the ipv4 specific
route handling, that would set dst->dev to NULL.
You really have to show us how this can actually happen.
^ permalink raw reply
* Re: [PATCH] ipv6 addrconf: Fix addrconf_ifid_eui64 of 802.15.4 devices
From: Eric Dumazet @ 2013-03-07 22:57 UTC (permalink / raw)
To: Ben Hutchings
Cc: Alexander Aring, davem, kuznet, jmorris, yoshfuji,
linux-zigbee-devel, netdev
In-Reply-To: <1362696088.2936.47.camel@bwh-desktop.uk.solarflarecom.com>
On Thu, 2013-03-07 at 22:41 +0000, Ben Hutchings wrote:
> On Thu, 2013-03-07 at 21:13 +0100, Alexander Aring wrote:
> > The function addrconf_ifid_eui64 will copy eui into dev->dev_addr.
> > We need first to manipulate eui[0] before we call memcpy afterwards.
>
> memcpy() does not work that way.
>
> > Broken since commit:
> > 5e98a36ed4bf6ea396170e3af0dd4fcbe51d772f
> >
> > Since this commit I got many trouble with the ieee802154 stack.
>
> Your change is effectively reverting that commit.
Reverting the commit seems the solution ;)
^ permalink raw reply
* Re: [RFC PATCH] udp: don't rereference dst_entry dev pointer on rcv
From: Eric Dumazet @ 2013-03-07 22:47 UTC (permalink / raw)
To: Tom Parkin; +Cc: netdev
In-Reply-To: <1362695800-8633-2-git-send-email-tparkin@katalix.com>
On Thu, 2013-03-07 at 22:36 +0000, Tom Parkin wrote:
> When a fragmented IP packet is queued during device teardown, it is possible
> for the reassembled packet to hit the UDP rcv path with a NULL dst_entry dev
> pointer. Drop such packets to prevent an oops.
> ---
> net/ipv4/udp.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
> index 0a073a2..c38a4b1 100644
> --- a/net/ipv4/udp.c
> +++ b/net/ipv4/udp.c
> @@ -1700,6 +1700,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
> return __udp4_lib_mcast_deliver(net, skb, uh,
> saddr, daddr, udptable);
>
> + if (skb_dst(skb)->dev == NULL)
> + goto drop;
> +
> sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
>
> if (sk != NULL) {
Hmm... couldnt it be tested in reassembly layer instead ?
Why is it specific to UDP ?
^ permalink raw reply
* Re: [PATCH] ipv6 addrconf: Fix addrconf_ifid_eui64 of 802.15.4 devices
From: Ben Hutchings @ 2013-03-07 22:41 UTC (permalink / raw)
To: Alexander Aring
Cc: davem, kuznet, jmorris, yoshfuji, linux-zigbee-devel, netdev
In-Reply-To: <1362687183-3425-1-git-send-email-alex.aring@gmail.com>
On Thu, 2013-03-07 at 21:13 +0100, Alexander Aring wrote:
> The function addrconf_ifid_eui64 will copy eui into dev->dev_addr.
> We need first to manipulate eui[0] before we call memcpy afterwards.
memcpy() does not work that way.
> Broken since commit:
> 5e98a36ed4bf6ea396170e3af0dd4fcbe51d772f
>
> Since this commit I got many trouble with the ieee802154 stack.
Your change is effectively reverting that commit.
Ben.
> Signed-off-by: Alexander Aring <alex.aring@gmail.com>
> ---
> net/ipv6/addrconf.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index fa36a67..4460237 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -1731,8 +1731,8 @@ static int addrconf_ifid_eui64(u8 *eui, struct net_device *dev)
> {
> if (dev->addr_len != IEEE802154_ADDR_LEN)
> return -1;
> - memcpy(eui, dev->dev_addr, 8);
> eui[0] ^= 2;
> + memcpy(eui, dev->dev_addr, 8);
> return 0;
> }
>
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply
* [RFC PATCH] udp: don't rereference dst_entry dev pointer on rcv
From: Tom Parkin @ 2013-03-07 22:36 UTC (permalink / raw)
To: netdev; +Cc: Tom Parkin
In-Reply-To: <1362695800-8633-1-git-send-email-tparkin@katalix.com>
When a fragmented IP packet is queued during device teardown, it is possible
for the reassembled packet to hit the UDP rcv path with a NULL dst_entry dev
pointer. Drop such packets to prevent an oops.
---
net/ipv4/udp.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 0a073a2..c38a4b1 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1700,6 +1700,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
return __udp4_lib_mcast_deliver(net, skb, uh,
saddr, daddr, udptable);
+ if (skb_dst(skb)->dev == NULL)
+ goto drop;
+
sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
if (sk != NULL) {
--
1.7.9.5
^ permalink raw reply related
* [RFC PATCH] prevent oops in udp rcv path
From: Tom Parkin @ 2013-03-07 22:36 UTC (permalink / raw)
To: netdev; +Cc: Tom Parkin
During stress testing of some l2tp patches, I've been able to cause an oops in
the udp rcv path by tearing down l2tp sessions while they're passing data.
The oops text is below -- this is for a udp-encap l2tp tunnel containing a
number of ethernet pseudowires.
So far, I've only managed to reproduce this oops with a PREEMPT kernel running
on a VM. Based on my debugging here it seems that the failure case is caused
by a fragmented IP packet being queued/reassembled across the device shutdown
event. When such a packet hits udp_rcv, skb_dst(skb)->dev is NULL, which
leads to an oops when the receive code attempts to associate the skb with a
udp socket.
The accompanying patch, which I don't really propose as a fix so much as an
illustration of what goes wrong, "fixes" this problem by dropping packets with
a NULL dev field in the dst_entry.
I'm not sure what is the real root cause of this bug, though -- hence the RFC.
BUG: unable to handle kernel NULL pointer dereference at 0000000000000478
IP: [<ffffffff81618c54>] __udp4_lib_rcv+0x514/0xa80
PGD ac38067 PUD 11492067 PMD 0
Oops: 0000 [#1] PREEMPT SMP
Modules linked in: l2tp_eth l2tp_netlink l2tp_core microcode psmouse seri0
CPU 0
Pid: 12607, comm: ip Tainted: G W 3.8.0-l2tp-pw-fixups-2-dev-6+x
RIP: 0010:[<ffffffff81618c54>] [<ffffffff81618c54>] __udp4_lib_rcv+0x5140
RSP: 0000:ffff880014403a10 EFLAGS: 00010286
RAX: 0000000000000000 RBX: ffff880010c3f700 RCX: 000000006800000a
RDX: 0000000000008813 RSI: 000000008300000a RDI: 0000000000000246
RBP: ffff880014403a90 R08: 0000000000008813 R09: 0000000000000003
R10: 000000008300000a R11: 0000000000000001 R12: ffff88000c232ea2
R13: 0000000000000011 R14: ffffffff81cc19c0 R15: 00000000000005de
FS: 00007f2d5efd6700(0000) GS:ffff880014400000(0000) knlGS:00000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000478 CR3: 0000000011c35000 CR4: 00000000000006f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process ip (pid: 12607, threadinfo ffff88000c05c000, task ffff88000bc1a2e)
Stack:
ffff880014403a50 da950d56ef5b821f ffff88000c05dfd8 000000008300000a
0000000000000003 ffff88006800000a 8813881314403a50 ffffffff81ce5750
ffff880014403a90 6800000a8300000a 0000000000000246 ffff880010c3f700
Call Trace:
<IRQ>
[<ffffffff816191da>] udp_rcv+0x1a/0x20
[<ffffffff815e0a96>] ip_local_deliver_finish+0xd6/0x530
[<ffffffff815e0a0a>] ? ip_local_deliver_finish+0x4a/0x530
[<ffffffff815e1b44>] ip_local_deliver+0x134/0x410
[<ffffffff815e1080>] ip_rcv_finish+0x190/0x8d0
[<ffffffff815e203d>] ip_rcv+0x21d/0x300
[<ffffffff815a531b>] __netif_receive_skb_core+0xa7b/0xd50
[<ffffffff815a49e2>] ? __netif_receive_skb_core+0x142/0xd50
[<ffffffff815a5611>] __netif_receive_skb+0x21/0x70
[<ffffffff815a5823>] netif_receive_skb+0x23/0x1f0
[<ffffffff815a6678>] napi_gro_receive+0xe8/0x140
[<ffffffffa0002aa8>] e1000_clean_rx_irq+0x2b8/0x520 [e1000]
[<ffffffffa000317e>] e1000_clean+0x28e/0x990 [e1000]
[<ffffffff810af709>] ? __lock_acquire+0x469/0x1e60
[<ffffffff815a73a9>] net_rx_action+0x179/0x3c0
[<ffffffff810ad496>] ? mark_held_locks+0x86/0x150
[<ffffffff81084718>] ? sched_clock_cpu+0xb8/0x130
[<ffffffff8104b548>] __do_softirq+0xe8/0x460
[<ffffffff8136876d>] ? do_raw_spin_unlock+0x5d/0xb0
[<ffffffff816e1a7c>] call_softirq+0x1c/0x30
[<ffffffff810042a5>] do_softirq+0xa5/0xe0
[<ffffffff8104ba6e>] irq_exit+0x9e/0xc0
[<ffffffff816e1b73>] do_IRQ+0x63/0xd0
[<ffffffff816d85b2>] common_interrupt+0x72/0x72
<EOI>
[<ffffffff81134c62>] ? find_get_page+0xb2/0x230
[<ffffffff81134d95>] ? find_get_page+0x1e5/0x230
[<ffffffff81134bb5>] ? find_get_page+0x5/0x230
[<ffffffff81009d22>] ? native_sched_clock+0x22/0x80
[<ffffffff8113696b>] filemap_fault+0x8b/0x4f0
[<ffffffff8115b929>] __do_fault+0x69/0x4c0
[<ffffffff810af709>] ? __lock_acquire+0x469/0x1e60
[<ffffffff8115e800>] handle_pte_fault+0x90/0x850
[<ffffffff81084575>] ? sched_clock_local+0x25/0x90
[<ffffffff811601e1>] handle_mm_fault+0x241/0x340
[<ffffffff816dbba7>] __do_page_fault+0x197/0x5e0
[<ffffffff811ad7f9>] ? fget_light+0x3e9/0x4e0
[<ffffffff813622bd>] ? trace_hardirqs_off_thunk+0x3a/0x3c
[<ffffffff816dbffe>] do_page_fault+0xe/0x10
[<ffffffff816d88e8>] page_fault+0x28/0x30
Code: 45 85 c9 75 07 44 8b 8b a0 00 00 00 85 f6 8b 4a 10 44 8b 52 0c 0f 8
RIP [<ffffffff81618c54>] __udp4_lib_rcv+0x514/0xa80
RSP <ffff880014403a10>
CR2: 0000000000000478
---[ end trace da950d56ef5b8221 ]---
Tom Parkin (1):
udp: don't rereference dst_entry dev pointer on rcv
net/ipv4/udp.c | 3 +++
1 file changed, 3 insertions(+)
--
1.7.9.5
^ permalink raw reply
* [PATCH RFC] ipv6: use stronger hash for reassembly queue hash table
From: Hannes Frederic Sowa @ 2013-03-07 21:42 UTC (permalink / raw)
To: netdev; +Cc: eric.dumazet, yoshfuji
ipv6_addr_hash can yield the exact same hash value for countless ip
addresses from one /64 subnet. Let's make it a bit harder to create a
long list of reassembly queues in the hash table by using a stronger hash.
I spotted this just by looking at the source and did not verify if it
is really the case, so this patch has RFC status. But the jhash change
should not really hurt anyway. This patch is only compile tested.
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
---
net/ipv6/reassembly.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
index 3c6a772..4d39cf3 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -79,7 +79,7 @@ unsigned int inet6_hash_frag(__be32 id, const struct in6_addr *saddr,
{
u32 c;
- c = jhash_3words(ipv6_addr_hash(saddr), ipv6_addr_hash(daddr),
+ c = jhash_3words(ipv6_addr_jhash(saddr), ipv6_addr_hash(daddr),
(__force u32)id, rnd);
return c & (INETFRAGS_HASHSZ - 1);
--
1.8.1.4
^ permalink raw reply related
* Re: [PATCH] macvlan: Set IFF_UNICAST_FLT flag to prevent unnecessary promisc mode.
From: David Miller @ 2013-03-07 21:37 UTC (permalink / raw)
To: vyasevic; +Cc: netdev
In-Reply-To: <1362687708-8685-1-git-send-email-vyasevic@redhat.com>
From: Vlad Yasevich <vyasevic@redhat.com>
Date: Thu, 7 Mar 2013 15:21:48 -0500
> Macvlan already supports hw address filters. Set the IFF_UNICAST_FLT
> so that it doesn't needlesly enter PROMISC mode when macvlans are
> stacked.
>
> Signed-of-by: Vlad Yasevich <vyasevic@redhat.com>
Applied, thanks Vlad.
^ permalink raw reply
* Re: [PATCH] team: unsyc the devices addresses when port is removed
From: David Miller @ 2013-03-07 21:36 UTC (permalink / raw)
To: jiri; +Cc: vyasevic, netdev
In-Reply-To: <20130307183000.GA1532@minipsycho.orion>
From: Jiri Pirko <jiri@resnulli.us>
Date: Thu, 7 Mar 2013 19:30:00 +0100
> Thu, Mar 07, 2013 at 06:59:25PM CET, vyasevic@redhat.com wrote:
>>When a team port is removed, unsync all devices addresses that may have
>>been synched to the port devices.
>
>
> This is looking good to me. Thanks for spotting this bug.
>
> Acked-by: Jiri Pirko <jiri@resnulli.us>
Applied, thanks everyone.
^ permalink raw reply
* Re: [Patch net] bridge: add missing vid to br_mdb_get()
From: David Miller @ 2013-03-07 21:34 UTC (permalink / raw)
To: vyasevic; +Cc: amwang, netdev, stephen
In-Reply-To: <5138AFBC.4070303@redhat.com>
From: Vlad Yasevich <vyasevic@redhat.com>
Date: Thu, 07 Mar 2013 10:18:20 -0500
> On 03/07/2013 08:05 AM, Cong Wang wrote:
>> From: Cong Wang <amwang@redhat.com>
>>
>> Obviously, vid should be considered when searching for multicast
>> group.
>>
>> Cc: Vlad Yasevich <vyasevic@redhat.com>
>
> Don't know how I missied that...
>
> Acked-by: Vlad Yasevich <vyasevich@redhat.com>
>
>> Cc: Stephen Hemminger <stephen@networkplumber.org>
>> Cc: "David S. Miller" <davem@davemloft.net>
>> Signed-off-by: Cong Wang <amwang@redhat.com>
Applied.
^ permalink raw reply
* Re: [PATCH net-next] ipv6 flowlabel: add __rcu annotations
From: David Miller @ 2013-03-07 21:34 UTC (permalink / raw)
To: eric.dumazet; +Cc: netdev, yoshfuji
In-Reply-To: <1362666032.15793.212.camel@edumazet-glaptop>
From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Thu, 07 Mar 2013 06:20:32 -0800
> From: Eric Dumazet <edumazet@google.com>
>
> Commit 18367681a10b (ipv6 flowlabel: Convert np->ipv6_fl_list to RCU.)
> omitted proper __rcu annotations.
>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Applied, thanks.
^ permalink raw reply
* Re: [PATCH] Fix: sparse warning in inet_csk_prepare_forced_close
From: David Miller @ 2013-03-07 21:31 UTC (permalink / raw)
To: christoph.paasch; +Cc: netdev
In-Reply-To: <1362659673-28895-1-git-send-email-christoph.paasch@uclouvain.be>
From: Christoph Paasch <christoph.paasch@uclouvain.be>
Date: Thu, 7 Mar 2013 13:34:33 +0100
> In e337e24d66 (inet: Fix kmemleak in tcp_v4/6_syn_recv_sock and
> dccp_v4/6_request_recv_sock) I introduced the function
> inet_csk_prepare_forced_close, which does a call to bh_unlock_sock().
> This produces a sparse-warning.
>
> This patch adds the missing __releases.
>
> Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
> ---
> net/ipv4/inet_connection_sock.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
> index 7d1874b..804c98f 100644
> --- a/net/ipv4/inet_connection_sock.c
> +++ b/net/ipv4/inet_connection_sock.c
> @@ -735,6 +735,7 @@ EXPORT_SYMBOL(inet_csk_destroy_sock);
> * tcp/dccp_create_openreq_child().
> */
> void inet_csk_prepare_forced_close(struct sock *sk)
> +__releases(&sk->sk_lock.slock)
This should be indented by one TAB, I fixed this while applying your
patch, thanks.
^ permalink raw reply
* Re: [Patch net-next] bridge: use ipv4_is_local_multicast() helper
From: David Miller @ 2013-03-07 21:30 UTC (permalink / raw)
To: amwang; +Cc: netdev, stephen
In-Reply-To: <1362659546-22455-1-git-send-email-amwang@redhat.com>
From: Cong Wang <amwang@redhat.com>
Date: Thu, 7 Mar 2013 20:32:26 +0800
> Cc: Stephen Hemminger <stephen@networkplumber.org>
> Cc: "David S. Miller" <davem@davemloft.net>
> Signed-off-by: Cong Wang <amwang@redhat.com>
Applied, thanks.
^ permalink raw reply
* [PATCH net 2/2] bnx2x: Fix SFP+ misconfiguration in iSCSI boot scenario
From: Yaniv Rosner @ 2013-03-07 23:27 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Yaniv Rosner, Eilon Greenstein
In-Reply-To: <1362698854-6786-1-git-send-email-yanivr@broadcom.com>
Fix a problem in which iSCSI-boot installation fails when switching SFP+ boot
port and moving the SFP+ module prior to boot. The SFP+ insertion triggers an
interrupt which configures the SFP+ module wrongly before interface is loaded.
Signed-off-by: Yaniv Rosner <yanivr@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 6 +++++-
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h | 1 +
2 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
index 032d48e..3985533 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
@@ -8647,7 +8647,9 @@ void bnx2x_handle_module_detect_int(struct link_params *params)
MDIO_WC_DEVAD,
MDIO_WC_REG_DIGITAL5_MISC6,
&rx_tx_in_reset);
- if (!rx_tx_in_reset) {
+ if ((!rx_tx_in_reset) &&
+ (params->link_flags &
+ PHY_INITIALIZED)) {
bnx2x_warpcore_reset_lane(bp, phy, 1);
bnx2x_warpcore_config_sfi(phy, params);
bnx2x_warpcore_reset_lane(bp, phy, 0);
@@ -12528,6 +12530,7 @@ int bnx2x_phy_init(struct link_params *params, struct link_vars *vars)
vars->mac_type = MAC_TYPE_NONE;
vars->phy_flags = 0;
vars->check_kr2_recovery_cnt = 0;
+ params->link_flags = PHY_INITIALIZED;
/* Driver opens NIG-BRB filters */
bnx2x_set_rx_filter(params, 1);
/* Check if link flap can be avoided */
@@ -12692,6 +12695,7 @@ int bnx2x_lfa_reset(struct link_params *params,
struct bnx2x *bp = params->bp;
vars->link_up = 0;
vars->phy_flags = 0;
+ params->link_flags &= ~PHY_INITIALIZED;
if (!params->lfa_base)
return bnx2x_link_reset(params, vars, 1);
/*
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
index f92fcf7..56c2aae 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
@@ -309,6 +309,7 @@ struct link_params {
req_flow_ctrl is set to AUTO */
u16 link_flags;
#define LINK_FLAGS_INT_DISABLED (1<<0)
+#define PHY_INITIALIZED (1<<1)
u32 lfa_base;
};
--
1.7.7.1
^ permalink raw reply related
* [PATCH net 1/2] bnx2x: Fix intermittent long KR2 link up time
From: Yaniv Rosner @ 2013-03-07 23:27 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Yaniv Rosner, Eilon Greenstein
In-Reply-To: <1362698854-6786-1-git-send-email-yanivr@broadcom.com>
When a KR2 device is connected to a KR link-partner, sometimes it requires
disabling KR2 for the link to come up. To get a KR2 link up later, in case no
base pages are seen, the KR2 is restored. The problem was that some link
partners cleared their advertised BP/NP after around two seconds, causing the
driver to disable/enable KR2 link all the time.
The fix was to wait at least 5 seconds before checking KR2 recovery.
Signed-off-by: Yaniv Rosner <yanivr@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
---
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 11 +++++++++++
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h | 3 ++-
2 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
index 31c5787..032d48e 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
@@ -12527,6 +12527,7 @@ int bnx2x_phy_init(struct link_params *params, struct link_vars *vars)
vars->flow_ctrl = BNX2X_FLOW_CTRL_NONE;
vars->mac_type = MAC_TYPE_NONE;
vars->phy_flags = 0;
+ vars->check_kr2_recovery_cnt = 0;
/* Driver opens NIG-BRB filters */
bnx2x_set_rx_filter(params, 1);
/* Check if link flap can be avoided */
@@ -13411,6 +13412,7 @@ static void bnx2x_disable_kr2(struct link_params *params,
vars->link_attr_sync &= ~LINK_ATTR_SYNC_KR2_ENABLE;
bnx2x_update_link_attr(params, vars->link_attr_sync);
+ vars->check_kr2_recovery_cnt = CHECK_KR2_RECOVERY_CNT;
/* Restart AN on leading lane */
bnx2x_warpcore_restart_AN_KR(phy, params);
}
@@ -13439,6 +13441,15 @@ static void bnx2x_check_kr2_wa(struct link_params *params,
return;
}
+ /* Once KR2 was disabled, wait 5 seconds before checking KR2 recovery
+ * since some switches tend to reinit the AN process and clear the
+ * advertised BP/NP after ~2 seconds causing the KR2 to be disabled
+ * and recovered many times
+ */
+ if (vars->check_kr2_recovery_cnt > 0) {
+ vars->check_kr2_recovery_cnt--;
+ return;
+ }
lane = bnx2x_get_warpcore_lane(phy, params);
CL22_WR_OVER_CL45(bp, phy, MDIO_REG_BANK_AER_BLOCK,
MDIO_AER_BLOCK_AER_REG, lane);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
index be5c195..f92fcf7 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
@@ -342,7 +342,8 @@ struct link_vars {
u32 link_status;
u32 eee_status;
u8 fault_detected;
- u8 rsrv1;
+ u8 check_kr2_recovery_cnt;
+#define CHECK_KR2_RECOVERY_CNT 5
u16 periodic_flags;
#define PERIODIC_FLAGS_LINK_EVENT 0x0001
--
1.7.7.1
^ permalink raw reply related
* [PATCH net 0/2] bnx2x: Link fixes
From: Yaniv Rosner @ 2013-03-07 23:27 UTC (permalink / raw)
To: David Miller; +Cc: netdev, Yaniv Rosner
Hi Dave,
The following patch series has two small link fixes.
Please consider applying it to net.
Thanks,
Yaniv
^ permalink raw reply
* [RFC PATCH v2 net-next 3/3] bridge: Implement IFF_UNICAST_FLT
From: Vlad Yasevich @ 2013-03-07 21:28 UTC (permalink / raw)
To: netdev; +Cc: bridge, Vlad Yasevich
In-Reply-To: <1362691728-13289-1-git-send-email-vyasevic@redhat.com>
Implement IFF_UNICAST_FLT on the bridge. Unicast addresses added
to the bridge device are synched to the uplink devices. This
allows for uplink devices to change while preserving mac assignment.
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
---
net/bridge/br_device.c | 11 ++++++++++-
net/bridge/br_fdb.c | 6 ++++++
net/bridge/br_if.c | 2 ++
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index 37f611f..91fff56 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -106,6 +106,15 @@ static int br_dev_open(struct net_device *dev)
static void br_dev_set_multicast_list(struct net_device *dev)
{
+ struct net_bridge *br = netdev_priv(dev);
+ struct net_bridge_port *port;
+
+ rcu_read_lock();
+ list_for_each_entry_rcu(port, &br->port_list, list) {
+ if (port->flags & BR_UPLINK)
+ dev_uc_sync(uplink->dev, dev);
+ }
+ rcu_read_unlock();
}
static int br_dev_stop(struct net_device *dev)
@@ -384,7 +393,7 @@ void br_dev_setup(struct net_device *dev)
SET_ETHTOOL_OPS(dev, &br_ethtool_ops);
SET_NETDEV_DEVTYPE(dev, &br_type);
dev->tx_queue_len = 0;
- dev->priv_flags = IFF_EBRIDGE;
+ dev->priv_flags = IFF_EBRIDGE | IFF_UNICAST_FLT;
dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA |
NETIF_F_GSO_MASK | NETIF_F_HW_CSUM | NETIF_F_LLTX |
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index b0812c9..ef7b51e 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -677,6 +677,9 @@ int br_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
struct net_port_vlans *pv;
unsigned short vid = VLAN_N_VID;
+ if ((ndm->ndm_flags & NTF_SELF) && (dev->priv_flags & IFF_EBRIDGE))
+ return ndo_dflt_fdb_add(ndm, tb, dev, addr, nlh_flags);
+
if (!(ndm->ndm_state & (NUD_PERMANENT|NUD_NOARP|NUD_REACHABLE))) {
pr_info("bridge: RTM_NEWNEIGH with invalid state %#x\n", ndm->ndm_state);
return -EINVAL;
@@ -774,6 +777,9 @@ int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
struct net_port_vlans *pv;
unsigned short vid = VLAN_N_VID;
+ if ((ndm->ndm_flags & NTF_SELF) && (dev->priv_flags & IFF_EBRIDGE))
+ return ndo_dflt_fdb_del(ndm, tb, dev, addr);
+
if (tb[NDA_VLAN]) {
if (nla_len(tb[NDA_VLAN]) != sizeof(unsigned short)) {
pr_info("bridge: RTM_NEWNEIGH with invalid vlan\n");
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index 02b4440..5196a79 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -145,6 +145,8 @@ static void del_nbp(struct net_bridge_port *p)
nbp_vlan_flush(p);
br_fdb_delete_by_port(br, p, 1);
+ if (p->flags & BR_UPLINK)
+ dev_uc_unsync(dev, br->dev);
list_del_rcu(&p->list);
--
1.7.7.6
^ permalink raw reply related
* [RFC PATCH v2 net-next 2/3] bridge: Allow an ability to designate an uplink port
From: Vlad Yasevich @ 2013-03-07 21:28 UTC (permalink / raw)
To: netdev; +Cc: bridge, Vlad Yasevich
In-Reply-To: <1362691728-13289-1-git-send-email-vyasevic@redhat.com>
Allow a ports to be designated as uplink. Multiple ports
may be designated as uplinks and they will be kept in a
list.
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
---
include/uapi/linux/if_link.h | 1 +
net/bridge/br_netlink.c | 2 ++
net/bridge/br_private.h | 1 +
net/bridge/br_sysfs_if.c | 2 ++
4 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
index c4edfe1..b9444e9 100644
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -220,6 +220,7 @@ enum {
IFLA_BRPORT_GUARD, /* bpdu guard */
IFLA_BRPORT_PROTECT, /* root port protection */
IFLA_BRPORT_FAST_LEAVE, /* multicast fast leave */
+ IFLA_BRPORT_UPLINK, /* uplink port */
__IFLA_BRPORT_MAX
};
#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 27aa3ee..e08a50e 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -283,6 +283,7 @@ static const struct nla_policy ifla_brport_policy[IFLA_BRPORT_MAX + 1] = {
[IFLA_BRPORT_MODE] = { .type = NLA_U8 },
[IFLA_BRPORT_GUARD] = { .type = NLA_U8 },
[IFLA_BRPORT_PROTECT] = { .type = NLA_U8 },
+ [IFLA_BRPORT_UPLINK] = { .type = NLA_U8 },
};
/* Change the state of the port and notify spanning tree */
@@ -329,6 +330,7 @@ static int br_setport(struct net_bridge_port *p, struct nlattr *tb[])
br_set_port_flag(p, tb, IFLA_BRPORT_MODE, BR_HAIRPIN_MODE);
br_set_port_flag(p, tb, IFLA_BRPORT_GUARD, BR_BPDU_GUARD);
br_set_port_flag(p, tb, IFLA_BRPORT_FAST_LEAVE, BR_MULTICAST_FAST_LEAVE);
+ br_set_port_flag(p, tb, IFLA_BRPORT_UPLINK, BR_UPLINK);
if (tb[IFLA_BRPORT_COST]) {
err = br_stp_set_path_cost(p, nla_get_u32(tb[IFLA_BRPORT_COST]));
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 4a0fa29..44ae584 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -156,6 +156,7 @@ struct net_bridge_port
#define BR_BPDU_GUARD 0x00000002
#define BR_ROOT_BLOCK 0x00000004
#define BR_MULTICAST_FAST_LEAVE 0x00000008
+#define BR_UPLINK 0x00000010
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
u32 multicast_startup_queries_sent;
diff --git a/net/bridge/br_sysfs_if.c b/net/bridge/br_sysfs_if.c
index a1ef1b6..1f28cd4 100644
--- a/net/bridge/br_sysfs_if.c
+++ b/net/bridge/br_sysfs_if.c
@@ -158,6 +158,7 @@ static BRPORT_ATTR(flush, S_IWUSR, NULL, store_flush);
BRPORT_ATTR_FLAG(hairpin_mode, BR_HAIRPIN_MODE);
BRPORT_ATTR_FLAG(bpdu_guard, BR_BPDU_GUARD);
BRPORT_ATTR_FLAG(root_block, BR_ROOT_BLOCK);
+BRPORT_ATTR_FLAG(uplink, BR_UPLINK);
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
static ssize_t show_multicast_router(struct net_bridge_port *p, char *buf)
@@ -195,6 +196,7 @@ static const struct brport_attribute *brport_attrs[] = {
&brport_attr_hairpin_mode,
&brport_attr_bpdu_guard,
&brport_attr_root_block,
+ &brport_attr_uplink,
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
&brport_attr_multicast_router,
&brport_attr_multicast_fast_leave,
--
1.7.7.6
^ permalink raw reply related
* Re: [PATCH V2] bgmac: register MII bus
From: David Miller @ 2013-03-07 21:28 UTC (permalink / raw)
To: zajec5; +Cc: netdev
In-Reply-To: <1362657208-6790-1-git-send-email-zajec5@gmail.com>
From: Rafał Miłecki <zajec5@gmail.com>
Date: Thu, 7 Mar 2013 12:53:28 +0100
> Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Applied to net-next, thanks.
^ permalink raw reply
* [RFC PATCH v2 net-next 1/3] bridge: Add sysfs interface to control promisc mode
From: Vlad Yasevich @ 2013-03-07 21:28 UTC (permalink / raw)
To: netdev; +Cc: bridge, Vlad Yasevich
In-Reply-To: <1362691728-13289-1-git-send-email-vyasevic@redhat.com>
Add an sysfs interface to turn promiscusous mode on and off on
the bridge. By default all interfaces in the bridge
are in promisc mode. When promisc mode is turned off, it is
turned off on all bridge ports and the bridge turns on IFF_ALLMULTI
to handle multicast traffic.
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
---
net/bridge/br_device.c | 41 +++++++++++++++++++++++++++++++++++++++++
net/bridge/br_if.c | 22 +++++++++++++++++-----
net/bridge/br_private.h | 2 ++
net/bridge/br_sysfs_br.c | 17 +++++++++++++++++
4 files changed, 77 insertions(+), 5 deletions(-)
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index d5f1d3f..37f611f 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -185,6 +185,46 @@ static int br_set_mac_address(struct net_device *dev, void *p)
return 0;
}
+int br_set_promisc(struct net_bridge *br, unsigned long val)
+{
+ struct net_bridge_port *p;
+
+ if (!rtnl_trylock())
+ return restart_syscall();
+
+ spin_lock_bh(&br->lock);
+
+ if (val) {
+ if (br->promisc_enabled)
+ goto unlock;
+
+ br->promisc_enabled = 1;
+ /* For each port on the bridge, turn on promisc mode and
+ * turn off ALLMULTI to handle multicast traffic.
+ */
+ list_for_each_entry(p, &br->port_list, list) {
+ dev_set_promiscuity(p->dev, 1);
+ dev_set_allmulti(p->dev, -1);
+ }
+
+ } else {
+ if (!br->promisc_enabled)
+ goto unlock;
+
+ br->promisc_enabled = 0;
+ /* For each port on the bridge, turn off promisc mode */
+ list_for_each_entry(p, &br->port_list, list) {
+ dev_set_allmulti(p->dev, 1);
+ dev_set_promiscuity(p->dev, -1);
+ }
+ }
+unlock:
+ spin_unlock_bh(&br->lock);
+ rtnl_unlock();
+ return 0;
+}
+
+
static void br_getinfo(struct net_device *dev, struct ethtool_drvinfo *info)
{
strlcpy(info->driver, "bridge", sizeof(info->driver));
@@ -371,6 +411,7 @@ void br_dev_setup(struct net_device *dev)
br->bridge_hello_time = br->hello_time = 2 * HZ;
br->bridge_forward_delay = br->forward_delay = 15 * HZ;
br->ageing_time = 300 * HZ;
+ br->promisc_enabled = 1;
br_netfilter_rtable_init(br);
br_stp_timer_init(br);
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index ef1b914..02b4440 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -132,7 +132,10 @@ static void del_nbp(struct net_bridge_port *p)
sysfs_remove_link(br->ifobj, p->dev->name);
- dev_set_promiscuity(dev, -1);
+ if (br->promisc_enabled)
+ dev_set_promiscuity(dev, -1);
+ else
+ dev_set_allmulti(dev, -1);
spin_lock_bh(&br->lock);
br_stp_disable_port(p);
@@ -350,9 +353,15 @@ int br_add_if(struct net_bridge *br, struct net_device *dev)
call_netdevice_notifiers(NETDEV_JOIN, dev);
- err = dev_set_promiscuity(dev, 1);
- if (err)
- goto put_back;
+ if (br->promisc_enabled) {
+ err = dev_set_promiscuity(dev, 1);
+ if (err)
+ goto put_back;
+ } else {
+ err = dev_set_allmulti(dev, 1);
+ if (err)
+ goto put_back;
+ }
err = kobject_init_and_add(&p->kobj, &brport_ktype, &(dev->dev.kobj),
SYSFS_BRIDGE_PORT_ATTR);
@@ -414,7 +423,10 @@ err2:
kobject_put(&p->kobj);
p = NULL; /* kobject_put frees */
err1:
- dev_set_promiscuity(dev, -1);
+ if (br->promisc_enabled)
+ dev_set_promiscuity(dev, -1);
+ else
+ dev_set_allmulti(dev, -1);
put_back:
dev_put(dev);
kfree(p);
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 6d314c4..4a0fa29 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -277,6 +277,7 @@ struct net_bridge
struct timer_list topology_change_timer;
struct timer_list gc_timer;
struct kobject *ifobj;
+ u8 promisc_enabled;
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
u8 vlan_enabled;
struct net_port_vlans __rcu *vlan_info;
@@ -327,6 +328,7 @@ extern void br_dev_setup(struct net_device *dev);
extern void br_dev_delete(struct net_device *dev, struct list_head *list);
extern netdev_tx_t br_dev_xmit(struct sk_buff *skb,
struct net_device *dev);
+extern int br_set_promisc(struct net_bridge *br, unsigned long val);
#ifdef CONFIG_NET_POLL_CONTROLLER
static inline struct netpoll_info *br_netpoll_info(struct net_bridge *br)
{
diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c
index 8baa9c0..5489219 100644
--- a/net/bridge/br_sysfs_br.c
+++ b/net/bridge/br_sysfs_br.c
@@ -710,6 +710,22 @@ static DEVICE_ATTR(vlan_filtering, S_IRUGO | S_IWUSR,
show_vlan_filtering, store_vlan_filtering);
#endif
+static ssize_t show_promisc(struct device *d,
+ struct device_attribute *attr, char *buf)
+{
+ struct net_bridge *br = to_bridge(d);
+ return sprintf(buf, "%d\n", br->promisc_enabled);
+}
+
+static ssize_t store_promisc(struct device *d,
+ struct device_attribute *attr,
+ const char *buf, size_t len)
+{
+ return store_bridge_parm(d, buf, len, br_set_promisc);
+}
+static DEVICE_ATTR(promisc, S_IRUGO | S_IWUSR, show_promisc,
+ store_promisc);
+
static struct attribute *bridge_attrs[] = {
&dev_attr_forward_delay.attr,
&dev_attr_hello_time.attr,
@@ -753,6 +769,7 @@ static struct attribute *bridge_attrs[] = {
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
&dev_attr_vlan_filtering.attr,
#endif
+ &dev_attr_promisc.attr,
NULL
};
--
1.7.7.6
^ permalink raw reply related
* [RFC PATCH v2 net-next 0/3] Allow bridge to function in non-promisc mode
From: Vlad Yasevich @ 2013-03-07 21:28 UTC (permalink / raw)
To: netdev; +Cc: Vlad Yasevich, bridge
The series adds an ability to configure the bridge into a non-primiscuous
mode. Instead, it provides the ability to identitfy some set of bridge
ports as uplinks and allows for MAC addresses to be programmed onto
those ports. In case the port hardware does not support mac filter,
that port will be placed in promiscuous mode.
Default bridge operation continues to remain as "promiscuous". The new
functionality has to be enabled via sysfs (similar to other bridge extensions).
The uplink mode is implemented as a flag on a bridge port. The api to
change that flag follows the existing api to enable/disable other existing
flags.
All comments are welcome.
Changes since v1:
* Fixed submit log
* Simplifyied uplink logic. Uplink is now a flag per port. This removes the
need for a separate list.
* Clean-up hw list once the port has been removed.
Vlad Yasevich (3):
bridge: Add sysfs interface to control promisc mode
bridge: Allow an ability to designate an uplink port
bridge: Implement IFF_UNICAST_FLT
include/uapi/linux/if_link.h | 1 +
net/bridge/br_device.c | 52 +++++++++++++++++++++++++++++++++++++++++-
net/bridge/br_fdb.c | 6 +++++
net/bridge/br_if.c | 22 +++++++++++++----
net/bridge/br_netlink.c | 2 +
net/bridge/br_private.h | 3 ++
net/bridge/br_sysfs_br.c | 17 +++++++++++++
net/bridge/br_sysfs_if.c | 2 +
8 files changed, 99 insertions(+), 6 deletions(-)
--
1.7.7.6
^ permalink raw reply
* Re: [PATCH] fix a typo in afkey
From: David Miller @ 2013-03-07 21:27 UTC (permalink / raw)
To: martinbj2008
Cc: steffen.klassert, herbert, netdev, linux-kernel, junwei.zhang
In-Reply-To: <1362638927-5617-1-git-send-email-martinbj2008@gmail.com>
From: Martin Zhang <martinbj2008@gmail.com>
Date: Thu, 7 Mar 2013 14:48:47 +0800
> From: Junwei Zhang <junwei.zhang@6wind.com>
>
> Signed-off-by: Martin Zhang <martinbj2008@gmail.com>
Applied, thanks.
^ permalink raw reply
* Re: [PATCH] netlabel: correctly list all the static label mappings
From: Paul Moore @ 2013-03-07 21:26 UTC (permalink / raw)
To: David Miller; +Cc: netdev
In-Reply-To: <20130307.162119.846409617201380362.davem@davemloft.net>
On Thursday, March 07, 2013 04:21:19 PM David Miller wrote:
> From: Paul Moore <pmoore@redhat.com>
> Date: Wed, 06 Mar 2013 16:45:24 -0500
>
> > When we have a large number of static label mappings that spill across
> > the netlink message boundary we fail to properly save our state in the
> > netlink_callback struct which causes us to repeat the same listings.
> > This patch fixes this problem by saving the state correctly between
> > calls to the NetLabel static label netlink "dumpit" routines.
> >
> > Signed-off-by: Paul Moore <pmoore@redhat.com>
>
> Applied and queued up for -stable, thanks.
>
> > Cc: stable@vger.kernel.org
>
> Please just ask me to queue up networking fixes for stable, rather
> than CC:'ing it to stable.
No problem, I'll do that in the future.
Thanks.
--
paul moore
security and virtualization @ redhat
^ permalink raw reply
* Re: [PATCH net-next] be2net: Update copyright year
From: David Miller @ 2013-03-07 21:26 UTC (permalink / raw)
To: sarveshwar.bandi; +Cc: netdev, vasundhara.volam
In-Reply-To: <9231cdea-20d5-4913-8f40-877821b04969@CMEXHTCAS2.ad.emulex.com>
From: <sarveshwar.bandi@emulex.com>
Date: Thu, 7 Mar 2013 11:35:05 +0530
> From: Vasundhara Volam <vasundhara.volam@emulex.com>
>
> Signed-off-by: Vasundhara Volam <vasundhara.volam@emulex.com>
> Signed-off-by: Sarveshwar Bandi <sarveshwar.bandi@emulex.com>
Applied.
^ permalink raw reply
* Re: [PATCH] vhost_net: remove tx polling state
From: David Miller @ 2013-03-07 21:25 UTC (permalink / raw)
To: jasowang; +Cc: netdev, virtualization, linux-kernel, kvm, mst
In-Reply-To: <1362630716-57674-1-git-send-email-jasowang@redhat.com>
From: Jason Wang <jasowang@redhat.com>
Date: Thu, 7 Mar 2013 12:31:56 +0800
> After commit 2b8b328b61c799957a456a5a8dab8cc7dea68575 (vhost_net: handle polling
> errors when setting backend), we in fact track the polling state through
> poll->wqh, so there's no need to duplicate the work with an extra
> vhost_net_polling_state. So this patch removes this and make the code simpler.
>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
Can I get an ACK or two from some VHOST folks?
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox