* Re: [RFC][PATCH] Failed neighbors attached to routes are not released
From: Eric Dumazet @ 2011-08-22 16:44 UTC (permalink / raw)
To: Guy Yur; +Cc: netdev
In-Reply-To: <CAC67Hz-MpmPGX4c+DTCgXkfnKdinNCrc7xc9Q03=35t=LLnW+g@mail.gmail.com>
Le vendredi 19 août 2011 à 21:53 +0300, Guy Yur a écrit :
> Hi,
>
> The issue I am seeing is with a neighbor used as a gateway in a route,
> when the neighbor gets nud FAILED it will not be removed from the
> neighbor cache.
> The reference count for the neighbor remains > 1
> when neigh_periodic_work() is called.
>
> Issue noticed with IPv6 neighbors on Arch Linux with kernel 3.0.3
> kernel config includes CONFIG_IPV6_ROUTER_PREF
>
> The problem affects routing when the neighbor loses connectivity and returns.
>
> Scenario: Using a default route and a static route through different interfaces.
> When the neighbor gateway of the static route goes down the traffic
> will move to the default gateway as expected.
> Once the static route neighbor comes back up it is not asked for
> neighbor solicitation
> because the route is marked as FAILED and the traffic will continue to
> pass through the default gateway.
>
> Steps to reproduce the route not being removed:
> 1. add an IPv6 address on an interface
> 2. add a route to a network through a gateway on the interface's network
> 3. make sure the gateway address is not reachable
> 4. ping6 a host in the route network
> 5. "ip -6 nei" will show the gateway neighbor as FAILED and it won't be released
>
> Steps to reproduce the routing problem:
> 1. client and two gateway machines (A and B)
> 2. on the client define a static route through A and a default route through B
> 3. disconnect eth on A
> 4. ping6 a host in the network that should go through A
> after a while the traffic will move through B which is the default route
> 5. reconnect eth on A
> 6. ping6 a host in the network again, the traffic will still go through B
> "ip -6 nei" on the client will still show A as FAILED
>
>
> Patch to change the nud state to NONE if the reference count > 1
> allowing the neighbor to be released in a future pass.
I wonder why a 'future pass' is needed at all.
Shouldnt we immediately detect link becomes alive and force an immediate
flush at this point, before waiting a garbage collect timer ?
>
> --- linux/net/core/neighbour.c.orig 2011-08-19 13:15:35.041524169 +0300
> +++ linux/net/core/neighbour.c 2011-08-19 18:19:07.271276096 +0300
> @@ -802,14 +802,16 @@ static void neigh_periodic_work(struct w
> if (time_before(n->used, n->confirmed))
> n->used = n->confirmed;
>
> - if (atomic_read(&n->refcnt) == 1 &&
> - (state == NUD_FAILED ||
> + if ((state == NUD_FAILED ||
> time_after(jiffies, n->used + n->parms->gc_staletime))) {
> - *np = n->next;
> - n->dead = 1;
> - write_unlock(&n->lock);
> - neigh_cleanup_and_release(n);
> - continue;
> + if (atomic_read(&n->refcnt) == 1) {
> + *np = n->next;
> + n->dead = 1;
> + write_unlock(&n->lock);
> + neigh_cleanup_and_release(n);
> + continue;
> + } else
> + n->nud_state = NUD_NONE;
> }
> write_unlock(&n->lock);
> --
^ permalink raw reply
* Re: [net-next 03/10] ixgbe: Drop the TX work limit and instead just leave it to budget
From: Ben Hutchings @ 2011-08-22 16:46 UTC (permalink / raw)
To: Alexander Duyck; +Cc: Jeff Kirsher, davem, netdev, gospo
In-Reply-To: <4E528437.5060302@intel.com>
On Mon, 2011-08-22 at 09:30 -0700, Alexander Duyck wrote:
> On 08/21/2011 07:01 AM, Ben Hutchings wrote:
> > On Sun, 2011-08-21 at 00:29 -0700, Jeff Kirsher wrote:
> >> From: Alexander Duyck<alexander.h.duyck@intel.com>
> >>
> >> This change makes it so that the TX work limit is now obsolete. Instead of
> >> using it we can instead rely on the NAPI budget for the number of packets
> >> we should clean per interrupt. The advantage to this approach is that it
> >> results in a much more balanced work flow since the same number of RX and
> >> TX packets should be cleaned per interrupts.
> > [...]
> >
> > This seems kind of sensible, but it's not how Dave has been recommending
> > people to account for TX work in NAPI.
> >
> > Ben.
> >
> I wasn't aware there was a recommended approach. Could you tell me more
> about it?
If a whole TX ring is cleaned then consider the budget spent; otherwise
don't count it.
Ben.
> As I stated in the patch description this approach works very well for
> me, especially in routing workloads since it typically keeps the TX
> clean-up in polling as long as the RX is in polling.
>
> Thanks,
>
> Alex
--
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
* Re: Miscalculated TCP ACK ?
From: Daniel Baluta @ 2011-08-22 17:19 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Gabriel Beddingfield, netdev
In-Reply-To: <1314031128.2307.110.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC>
>> It appears to me that the ACK is off-by-one (should have been 27676).
>> The server replies again with retransmissions. This is with several
>> kernel versions on local machines, ranging from 2.6.31 to 2.6.38.
> Not a bug if frame carried a FIN
Well then, why do retransmissions occur?
Gabriel could you post the full capture file?
thanks,
Daniel.
^ permalink raw reply
* RE: [PATCH net-next 3/5] be2net: fix erx->rx_drops_no_frags wrap around
From: Sathya.Perla @ 2011-08-22 17:22 UTC (permalink / raw)
To: eric.dumazet; +Cc: netdev
In-Reply-To: <1314017087.2307.34.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC>
OK, thanks Eric. I'll re-spin this patch series ...
-Sathya
________________________________________
From: Eric Dumazet [eric.dumazet@gmail.com]
Sent: Monday, August 22, 2011 6:14 PM
To: Perla, Sathya
Cc: netdev@vger.kernel.org
Subject: RE: [PATCH net-next 3/5] be2net: fix erx->rx_drops_no_frags wrap around
Le lundi 22 août 2011 à 05:15 -0700, Sathya.Perla@Emulex.Com a écrit :
> >-----Original Message-----
> >From: Eric Dumazet [mailto:eric.dumazet@gmail.com]
> >Sent: Monday, August 22, 2011 5:18 PM
> >
> >Le lundi 22 août 2011 à 13:43 +0200, Eric Dumazet a écrit :
> >
> >> This adds a race for lockless SNMP readers (in be_get_stats64())
> >>
> >> They can see the 32bit value going backward.
> >>
> >> You have to be very careful to read the *acc once, and write it once.
> >
> >The "write once" is the only requirement.
> >
> >Something like :
> >
> >u32 newval = hi(*acc) + val;
> >
> >if (wrapped)
> > newval += 65536;
> >ACCESS_ONCE(*acc) = newval;
> >
>
> Eric,
>
> I'm wondering why you'd need ACCESS_ONCE() here? Wouldn't using the temp variable (newval) as you suggested,
> ensure that the reader doesn't see a half-baked value?
>
If you write :
u32 newval = hi(*acc) + val;
if (wrapped)
newval += 65536;
*acc = newval;
C compiler (gcc) is free to eliminate the temp variable and to generate
same code than :
*acc = hi(*acc) + val;
if (wrapped)
*acc += 65536;
ACCESS_ONCE() here is the clean way (and self explanatory/documented) to
keep compiler to write to *acc twice.
^ permalink raw reply
* Re: [net-next 03/10] ixgbe: Drop the TX work limit and instead just leave it to budget
From: Alexander Duyck @ 2011-08-22 17:29 UTC (permalink / raw)
To: Ben Hutchings; +Cc: Jeff Kirsher, davem, netdev, gospo
In-Reply-To: <1314031612.2803.7.camel@bwh-desktop>
On 08/22/2011 09:46 AM, Ben Hutchings wrote:
> On Mon, 2011-08-22 at 09:30 -0700, Alexander Duyck wrote:
>> On 08/21/2011 07:01 AM, Ben Hutchings wrote:
>>> On Sun, 2011-08-21 at 00:29 -0700, Jeff Kirsher wrote:
>>>> From: Alexander Duyck<alexander.h.duyck@intel.com>
>>>>
>>>> This change makes it so that the TX work limit is now obsolete. Instead of
>>>> using it we can instead rely on the NAPI budget for the number of packets
>>>> we should clean per interrupt. The advantage to this approach is that it
>>>> results in a much more balanced work flow since the same number of RX and
>>>> TX packets should be cleaned per interrupts.
>>> [...]
>>>
>>> This seems kind of sensible, but it's not how Dave has been recommending
>>> people to account for TX work in NAPI.
>>>
>>> Ben.
>>>
>> I wasn't aware there was a recommended approach. Could you tell me more
>> about it?
> If a whole TX ring is cleaned then consider the budget spent; otherwise
> don't count it.
>
> Ben.
The only problem I was seeing with that was that in certain cases it
seemed like the TX cleanup could consume enough CPU time to cause pretty
significant delays in processing the RX cleanup. This in turn was
causing single queue bi-directional routing tests to come out pretty
unbalanced since what seemed to happen is that one CPUs RX work would
overwhelm the other CPU with the TX processing resulting in an
unbalanced flow that was something like a 60/40 split between the
upstream and downstream throughput.
Thanks,
Alex
^ permalink raw reply
* Re: [PATCH 0/2] pktgen: Clone skb to avoid corruption of skbs in ndo_start_xmit methods (v3)
From: Ben Hutchings @ 2011-08-22 17:33 UTC (permalink / raw)
To: Neil Horman; +Cc: netdev
In-Reply-To: <1314029857.2803.6.camel@bwh-desktop>
On Mon, 2011-08-22 at 17:17 +0100, Ben Hutchings wrote:
[...]
> b. The flag means 'safe to send shared skbs in the way ptkgen does', and
> the restrictions this places on the user and driver should be specified.
We could specify something like:
The ndo_start_xmit operation for this interface either does not
modify the given skb or modifies it idempotently. A single skb
may be transmitted repeatedly on a single queue of this
interface, but not on multiple queues or on multiple interfaces.
Does that look correct?
Ben.
--
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
* Re: Miscalculated TCP ACK ?
From: Hagen Paul Pfeifer @ 2011-08-22 17:58 UTC (permalink / raw)
To: Gabriel Beddingfield; +Cc: netdev
In-Reply-To: <CAPbw_hwQSXtmFSxK49jDDgF2LuG8=cu5t=ZjQ_aO7=M9fm9xeA@mail.gmail.com>
* Gabriel Beddingfield | 2011-08-22 10:34:14 [-0500]:
>I'm having trouble with a particular server via HTTPS. It appears
>that my local linux machines are sending incorrect ACK. However, I
>don't have enough expertise to know for sure.
>
>Using wireshark, the server sends:
>
> Transmission Control Protocol, Src Port: https (443), Dst Port:
>36015 (36015), Seq: 27658, Ack: 827, Len: 18
>
>Local machine replies:
>
> Transmission Control Protocol, Src Port: 36015 (36015), Dst Port:
>https (443), Seq: 827, Ack: 27677, Len: 0
>
>It appears to me that the ACK is off-by-one (should have been 27676).
No, it is absolutely correct: ACK -> last seen Seq plus one (27658 + 18 + 1):
RFC 793:
If the ACK control bit is set this field contains the value of the
next sequence number the sender of the segment is expecting to
receive. Once a connection is established this is always sent.
Cheers, Hagen
^ permalink raw reply
* Re: Miscalculated TCP ACK ?
From: Gabriel Beddingfield @ 2011-08-22 18:05 UTC (permalink / raw)
To: netdev
In-Reply-To: <CAEnQRZAB=tKwr0wX2OrpG8iq5VaJPmssHEfC3U62bz1XL_2FHw@mail.gmail.com>
On Mon, Aug 22, 2011 at 12:19 PM, Daniel Baluta <daniel.baluta@gmail.com> wrote:
>>> It appears to me that the ACK is off-by-one (should have been 27676).
>>> The server replies again with retransmissions. This is with several
>>> kernel versions on local machines, ranging from 2.6.31 to 2.6.38.
>
>> Not a bug if frame carried a FIN
The server packet had the FIN bit set.
> Well then, why do retransmissions occur?
> Gabriel could you post the full capture file?
Sure: http://gabe.is-a-geek.org/tmp/20110822-skyward-conversation-segment.tcpdump
I clipped the conversation to the vicinity of the problem.
-gabriel
^ permalink raw reply
* Re: [PATCH 0/2] pktgen: Clone skb to avoid corruption of skbs in ndo_start_xmit methods (v3)
From: Neil Horman @ 2011-08-22 18:14 UTC (permalink / raw)
To: Ben Hutchings; +Cc: netdev
In-Reply-To: <1314029857.2803.6.camel@bwh-desktop>
On Mon, Aug 22, 2011 at 05:17:37PM +0100, Ben Hutchings wrote:
> On Sun, 2011-08-21 at 20:27 -0400, Neil Horman wrote:
> > On Wed, Aug 17, 2011 at 04:07:17PM +0100, Ben Hutchings wrote:
> > > On Tue, 2011-07-26 at 12:05 -0400, Neil Horman wrote:
> > > > Ok, after considering all your comments, Dave suggested this as an alternate
> > > > approach:
> > > >
> > > > 1) We create a new priv_flag, IFF_SKB_TX_SHARED, to identify drivers capable of
> > > > handling shared skbs. Default is to not set this flag
> > > >
> > > > 2) Modify ether_setup to enable this flag, under the assumption that any driver
> > > > calling this function is initalizing a real ethernet device and as such can
> > > > handle shared skbs since they don't tend to store state in the skb struct.
> > > > Pktgen can then query this flag when a user script attempts to issue the
> > > > clone_skb command and decide if it is to be alowed or not.
> > > [...]
> > >
> > > A bunch of Ethernet drivers do skb_pad() or skb_padto() in their
> > > ndo_start_xmit implementations, either to avoid hardware bugs or because
> > > the MAC doesn't automatically pad to the minimum frame length. This
> > > presumably means they can't generally handle shared skbs, though in the
> > > specific case of pktgen it should be safe as long as a single skb is not
> > > submitted by multiple threads at once.
> > >
> > Agreed, given that pktgen is doing skb sharing in a serialized manner (i.e. one
> > thread of execution increasing skb->users rather than in multiple threads), the
> > skb_pad[to] cases are safe. Are there cases in which shared skbs are
> > transmitted in parallel threads that we need to check for?
>
> Not that I'm aware of. However, you have defined the flag to mean 'safe
> to send shared skbs', and this is not generally true for those drivers.
>
> So please decide whether:
> a. The flag means 'safe to send shared skbs' (i.e. the TX path does not
> modify the skb) and drivers which pad must clear it on their devices.
> b. The flag means 'safe to send shared skbs in the way ptkgen does', and
> the restrictions this places on the user and driver should be specified.
>
The flag means safe to send shared skbs.
Actually looking closer at this, I don't think this is much of a problem at all.
The flag is cleared on devices for which it is unsafe to send shared skbs, not
because there are multiple users of the skb in parallel, but because the driver
expects to have continued exclusive access to the skb after the drivers
ndo_start_xmit method returns.
In the pktgen case, skbs have skb->users > 1, but all users exist in the same
execution context, making their transmission serialized.
In the additional cases you are concerned with, multiple users of an skb may or
may not run in parallel. In the parallel case however, to avoid additional
races, one of the following must be true:
1) All n contexts treat the skb as immutible and wind up sending to the same
device and queue, at which point the xmit_lock in the net_device serializes
their operation.
2) Each of the n contexts (or a subset thereof) will modify the skb data, which
requires that they do their own locking between each other, which must encompass
the transmission of the skb in each context (lest they corrupt the skb during
transmission). Such locking again serializes the transmit peth.
In either case, access to the skb is serialized such that it is only ever
handled by one driver at one time, and during that window drivers may opt to
modify the state of the skb, as long as they dont' expect the sate to remain in
their control after the return from ndo_start_xmit.
So even though drivers that call skb_pad[to] modify the skb, its perfectly ok to
do so, as long as they don't assume that the struct skb will remain in that
state after the driver is done with it.
This works out perfectly well for skb_padto calls, since the function reduces to
a no-op after the minimal tail size has been reached.
Its a bit more problematic for skb_pad, since the possibility exists for
successive calls to skb_pad to iteratively increase the pad until the skb
tailroom is exhausted, causing a transmission error. That said however, there
are only 6 drivers that use skb_pad (sfx, niu, rt2800, rt61pci, rt37usb, and
claw), and they all only pad if the skb is not already a minimum length. These
calls should probably be audited and converted to skb_padto anyway.
So, in my view, these aren't really problems. If someone just does a blind skb
pad in the driver, then we have something of a problem, but one that is easily
fixed if and when the problem should arise.
Neil
^ permalink raw reply
* Re: [omega-g1:11072] Re: [PATCH] net: configurable sysctl parameter "net.core.tcp_lowat" for sk_stream_min_wspace()
From: David Miller @ 2011-08-22 18:35 UTC (permalink / raw)
To: jun.kondo
Cc: linux-kernel, omega-g1, notsuki, motokazu.kozaki, htaira, netdev,
tomohiko.takahashi, kotaro.sakai, ken.sugawara
In-Reply-To: <4E51A3F0.5010500@ctc-g.co.jp>
From: "Jun.Kondo" <jun.kondo@ctc-g.co.jp>
Date: Mon, 22 Aug 2011 09:33:52 +0900
> is it (really) network problem ?
> or is wmem not enough free to write?
Oh yes you can indeed make this determination, by using the socket
timeouts via the SO_RCVTIMEO and SO_SNDTIMEO socket options.
Timeouts, when hit, will return -EINTR, whereas lack of buffer space
on a non-blocking socket will return -EAGAIN.
I think you simply are unaware of the facilities available in the BSD
socket API.
^ permalink raw reply
* Re: Miscalculated TCP ACK ?
From: Eric Dumazet @ 2011-08-22 18:49 UTC (permalink / raw)
To: Gabriel Beddingfield; +Cc: netdev
In-Reply-To: <CAPbw_hy7xjhWSsiHnB9HN+ROCEUNzOS8aPsFwjvdY4FY+pRVjw@mail.gmail.com>
Le lundi 22 août 2011 à 13:05 -0500, Gabriel Beddingfield a écrit :
> On Mon, Aug 22, 2011 at 12:19 PM, Daniel Baluta <daniel.baluta@gmail.com> wrote:
> >>> It appears to me that the ACK is off-by-one (should have been 27676).
> >>> The server replies again with retransmissions. This is with several
> >>> kernel versions on local machines, ranging from 2.6.31 to 2.6.38.
> >
> >> Not a bug if frame carried a FIN
>
> The server packet had the FIN bit set.
>
then its fine.
> > Well then, why do retransmissions occur?
> > Gabriel could you post the full capture file?
>
> Sure: http://gabe.is-a-geek.org/tmp/20110822-skyward-conversation-segment.tcpdump
>
> I clipped the conversation to the vicinity of the problem.
>
This sounds as a TSO bug, maybe driver/NIC related
What is the NIC/driver used on your server ?
try "ethtool -K eth0 tso off" on the server
$ tcpdump -p -n -S -r 20110822-skyward-conversation-segment.tcpdump
reading from file 20110822-skyward-conversation-segment.tcpdump, link-type EN10MB (Ethernet)
Sorry we miss a few frames just before.
14:48:31.368344 IP 50.84.128.30.443 > 192.168.1.25.36015: Flags [.], seq 401237709:401239157, ack 1404739303, win 64334, options [nop,nop,TS val 1663311 ecr 3624365496], length 1448
14:48:31.368410 IP 192.168.1.25.36015 > 50.84.128.30.443: Flags [.], ack 401239157, win 52128, options [nop,nop,TS val 3624365515 ecr 1663311], length 0
14:48:31.368556 IP 50.84.128.30.443 > 192.168.1.25.36015: Flags [.], seq 401239157:401240605, ack 1404739303, win 64334, options [nop,nop,TS val 1663311 ecr 3624365496], length 1448
14:48:31.369019 IP 50.84.128.30.443 > 192.168.1.25.36015: Flags [.], seq 401240605:401242053, ack 1404739303, win 64334, options [nop,nop,TS val 1663311 ecr 3624365496], length 1448
14:48:31.369099 IP 192.168.1.25.36015 > 50.84.128.30.443: Flags [.], ack 401242053, win 57920, options [nop,nop,TS val 3624365515 ecr 1663311], length 0
14:48:31.369357 IP 50.84.128.30.443 > 192.168.1.25.36015: Flags [.], seq 401242053:401243501, ack 1404739303, win 64334, options [nop,nop,TS val 1663311 ecr 3624365496], length 1448
14:48:31.369412 IP 50.84.128.30.443 > 192.168.1.25.36015: Flags [FP.], seq 401243501:401243519, ack 1404739303, win 64334, options [nop,nop,TS val 1663311 ecr 3624365496], length 18
following frames acknowledge all data sent from server and FIN flag.
14:48:31.369442 IP 192.168.1.25.36015 > 50.84.128.30.443: Flags [.], ack 401243520, win 57920, options [nop,nop,TS val 3624365516 ecr 1663311], length 0
Up to there, its OK.
But following frame makes no sense : this data was already acknowledged
14:48:31.373447 IP 50.84.128.30.443 > 192.168.1.25.36015: Flags [.], seq 401236261:401237709, ack 1404739303, win 64334, options [nop,nop,TS val 1663311 ecr 3624365496], length 1448
14:48:31.373532 IP 192.168.1.25.36015 > 50.84.128.30.443: Flags [.], ack 401243520, win 57920, options [nop,nop,TS val 3624365520 ecr 1663311,nop,nop,sack 1 {401236261:401237709}], length 0
client timeouts :
14:48:31.458943 IP 192.168.1.25.36015 > 50.84.128.30.443: Flags [F.], seq 1404739303, ack 401243520, win 57920, options [nop,nop,TS val 3624365605 ecr 1663311], length 0
14:48:31.475204 IP 50.84.128.30.443 > 192.168.1.25.36015: Flags [.], ack 1404739304, win 64334, options [nop,nop,TS val 1663321 ecr 3624365605], length 0
14:48:31.475351 IP 50.84.128.30.443 > 192.168.1.25.36015: Flags [.], ack 1404739304, win 0, length 0
14:48:31.475395 IP 192.168.1.25.36015 > 50.84.128.30.443: Flags [R], seq 1404739304, win 0, length 0
^ permalink raw reply
* pull request: wireless 2011-08-22
From: John W. Linville @ 2011-08-22 19:01 UTC (permalink / raw)
To: davem; +Cc: linux-wireless, netdev, linux-kernel
Dave,
This is a batch of fixes intended for 3.1. Included is rewrite of an
earlier iwlagn fix that was revealed to be flawed (bad pointer access
during module unload), a fix for a memory leak, and a trio of rt2x00
fixes with detailed changelogs. These have all been in linux-next
for the last week with no reported complaints.
Please let me know if there are problems!
John
---
The following changes since commit fbe5e29ec1886967255e76946aaf537b8cc9b81e:
atm: br2684: Fix oops due to skb->dev being NULL (2011-08-20 14:13:05 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless.git for-davem
Emmanuel Grumbach (2):
Revert "iwlagn: sysfs couldn't find the priv pointer"
iwlagn: sysfs couldn't find the priv pointer
John W. Linville (1):
Merge branch 'master' of git://git.kernel.org/.../linville/wireless into for-davem
Julia Lawall (1):
drivers/net/wireless/wl12xx: add missing kfree
Stanislaw Gruszka (3):
rt2x00: fix crash in rt2800usb_write_tx_desc
rt2x00: fix order of entry flags modification
rt2x00: fix crash in rt2800usb_get_txwi
drivers/net/wireless/iwlwifi/iwl-pci.c | 25 ++++++++++---------------
drivers/net/wireless/rt2x00/rt2800usb.c | 20 +++++++++++++++-----
drivers/net/wireless/rt2x00/rt2x00usb.c | 17 +++++++----------
drivers/net/wireless/wl12xx/acx.c | 6 +-----
drivers/net/wireless/wl12xx/testmode.c | 5 ++++-
5 files changed, 37 insertions(+), 36 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-pci.c b/drivers/net/wireless/iwlwifi/iwl-pci.c
index 69d4ec4..2fdbffa 100644
--- a/drivers/net/wireless/iwlwifi/iwl-pci.c
+++ b/drivers/net/wireless/iwlwifi/iwl-pci.c
@@ -478,27 +478,22 @@ out_no_pci:
return err;
}
-static void iwl_pci_down(struct iwl_bus *bus)
-{
- struct iwl_pci_bus *pci_bus = (struct iwl_pci_bus *) bus->bus_specific;
-
- pci_disable_msi(pci_bus->pci_dev);
- pci_iounmap(pci_bus->pci_dev, pci_bus->hw_base);
- pci_release_regions(pci_bus->pci_dev);
- pci_disable_device(pci_bus->pci_dev);
- pci_set_drvdata(pci_bus->pci_dev, NULL);
-
- kfree(bus);
-}
-
static void __devexit iwl_pci_remove(struct pci_dev *pdev)
{
struct iwl_priv *priv = pci_get_drvdata(pdev);
- void *bus_specific = priv->bus->bus_specific;
+ struct iwl_bus *bus = priv->bus;
+ struct iwl_pci_bus *pci_bus = IWL_BUS_GET_PCI_BUS(bus);
+ struct pci_dev *pci_dev = IWL_BUS_GET_PCI_DEV(bus);
iwl_remove(priv);
- iwl_pci_down(bus_specific);
+ pci_disable_msi(pci_dev);
+ pci_iounmap(pci_dev, pci_bus->hw_base);
+ pci_release_regions(pci_dev);
+ pci_disable_device(pci_dev);
+ pci_set_drvdata(pci_dev, NULL);
+
+ kfree(bus);
}
#ifdef CONFIG_PM
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 9395631..dbf501c 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -464,6 +464,15 @@ static bool rt2800usb_txdone_entry_check(struct queue_entry *entry, u32 reg)
int wcid, ack, pid;
int tx_wcid, tx_ack, tx_pid;
+ if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
+ !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) {
+ WARNING(entry->queue->rt2x00dev,
+ "Data pending for entry %u in queue %u\n",
+ entry->entry_idx, entry->queue->qid);
+ cond_resched();
+ return false;
+ }
+
wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);
@@ -529,12 +538,11 @@ static void rt2800usb_txdone(struct rt2x00_dev *rt2x00dev)
entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
if (rt2800usb_txdone_entry_check(entry, reg))
break;
+ entry = NULL;
}
- if (!entry || rt2x00queue_empty(queue))
- break;
-
- rt2800_txdone_entry(entry, reg);
+ if (entry)
+ rt2800_txdone_entry(entry, reg);
}
}
@@ -558,8 +566,10 @@ static void rt2800usb_work_txdone(struct work_struct *work)
while (!rt2x00queue_empty(queue)) {
entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
- if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
+ if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
+ !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
break;
+
if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);
else if (rt2x00queue_status_timeout(entry))
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
index b6b4542..7fbb55c 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
@@ -262,23 +262,20 @@ static void rt2x00usb_interrupt_txdone(struct urb *urb)
struct queue_entry *entry = (struct queue_entry *)urb->context;
struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
- if (!test_and_clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
+ if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
return;
-
- if (rt2x00dev->ops->lib->tx_dma_done)
- rt2x00dev->ops->lib->tx_dma_done(entry);
-
- /*
- * Report the frame as DMA done
- */
- rt2x00lib_dmadone(entry);
-
/*
* Check if the frame was correctly uploaded
*/
if (urb->status)
set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
+ /*
+ * Report the frame as DMA done
+ */
+ rt2x00lib_dmadone(entry);
+ if (rt2x00dev->ops->lib->tx_dma_done)
+ rt2x00dev->ops->lib->tx_dma_done(entry);
/*
* Schedule the delayed work for reading the TX status
* from the device.
diff --git a/drivers/net/wireless/wl12xx/acx.c b/drivers/net/wireless/wl12xx/acx.c
index 7e33f1f..34f6ab5 100644
--- a/drivers/net/wireless/wl12xx/acx.c
+++ b/drivers/net/wireless/wl12xx/acx.c
@@ -77,8 +77,6 @@ int wl1271_acx_sleep_auth(struct wl1271 *wl, u8 sleep_auth)
auth->sleep_auth = sleep_auth;
ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth));
- if (ret < 0)
- return ret;
out:
kfree(auth);
@@ -624,10 +622,8 @@ int wl1271_acx_cca_threshold(struct wl1271 *wl)
ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD,
detection, sizeof(*detection));
- if (ret < 0) {
+ if (ret < 0)
wl1271_warning("failed to set cca threshold: %d", ret);
- return ret;
- }
out:
kfree(detection);
diff --git a/drivers/net/wireless/wl12xx/testmode.c b/drivers/net/wireless/wl12xx/testmode.c
index 5d5e1ef..88add68 100644
--- a/drivers/net/wireless/wl12xx/testmode.c
+++ b/drivers/net/wireless/wl12xx/testmode.c
@@ -139,12 +139,15 @@ static int wl1271_tm_cmd_interrogate(struct wl1271 *wl, struct nlattr *tb[])
if (ret < 0) {
wl1271_warning("testmode cmd interrogate failed: %d", ret);
+ kfree(cmd);
return ret;
}
skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, sizeof(*cmd));
- if (!skb)
+ if (!skb) {
+ kfree(cmd);
return -ENOMEM;
+ }
NLA_PUT(skb, WL1271_TM_ATTR_DATA, sizeof(*cmd), cmd);
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply related
* RE: [PATCH 4/4] drivers/net/wireless/mwifiex/scan.c: test the just-initialized value
From: Bing Zhao @ 2011-08-22 19:02 UTC (permalink / raw)
To: Julia Lawall, Pierre Louis Aublin
Cc: kernel-janitors@vger.kernel.org, John W. Linville,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
In-Reply-To: <Pine.LNX.4.64.1108221615450.10948@ask.diku.dk>
Hi Julia,
Thanks for the patch.
> -----Original Message-----
> From: Julia Lawall [mailto:julia@diku.dk]
> Sent: Monday, August 22, 2011 7:16 AM
> To: Pierre Louis Aublin
> Cc: Bing Zhao; kernel-janitors@vger.kernel.org; John W. Linville; linux-wireless@vger.kernel.org;
> netdev@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: [PATCH 4/4] drivers/net/wireless/mwifiex/scan.c: test the just-initialized value
>
> From: Julia Lawall <julia@diku.dk>
>
> Test the just-initialized value rather than some other one.
>
> The semantic match that finds this problem is as follows:
> (http://coccinelle.lip6.fr/)
>
> // <smpl>
> @r@
> identifier x,y,f!={PTR_ERR,ERR_PTR,ERR_CAST};
> statement S;
> @@
>
> x = f(...);
> (
> if (\(x == NULL\|IS_ERR(x)\)) S
> |
> *if (\(y == NULL\|IS_ERR(y)\))
> { ... when != x
> return ...; }
> )
> // </smpl>
>
> Signed-off-by: Julia Lawall <julia@diku.dk>
Acked-by: Bing Zhao <bzhao@marvell.com>
Thanks,
Bing
>
> ---
> drivers/net/wireless/mwifiex/scan.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c
> index b28241c..37ca2f9 100644
> --- a/drivers/net/wireless/mwifiex/scan.c
> +++ b/drivers/net/wireless/mwifiex/scan.c
> @@ -1480,8 +1480,8 @@ mwifiex_update_curr_bss_params(struct mwifiex_private *priv,
> return -ENOMEM;
> }
> beacon_ie = kzalloc(ie_len, GFP_KERNEL);
> - if (!bss_desc) {
> - dev_err(priv->adapter->dev, " failed to alloc bss_desc\n");
> + if (!beacon_ie) {
> + dev_err(priv->adapter->dev, " failed to alloc beacon_ie\n");
> return -ENOMEM;
> }
> memcpy(beacon_ie, ie_buf, ie_len);
^ permalink raw reply
* Re: [PATCH 4/4] drivers/net/wireless/mwifiex/scan.c: test the just-initialized value
From: walter harms @ 2011-08-22 19:09 UTC (permalink / raw)
To: Bing Zhao
Cc: Julia Lawall, Pierre Louis Aublin,
kernel-janitors-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
John W. Linville,
linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
In-Reply-To: <477F20668A386D41ADCC57781B1F70430802DD7B7E-r8ILAu4/owuHXkj8w7BxOhL4W9x8LtSr@public.gmane.org>
Am 22.08.2011 21:02, schrieb Bing Zhao:
> Hi Julia,
>
> Thanks for the patch.
>
>> -----Original Message-----
>> From: Julia Lawall [mailto:julia-dAYI7NvHqcQ@public.gmane.org]
>> Sent: Monday, August 22, 2011 7:16 AM
>> To: Pierre Louis Aublin
>> Cc: Bing Zhao; kernel-janitors-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; John W. Linville; linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org;
>> netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> Subject: [PATCH 4/4] drivers/net/wireless/mwifiex/scan.c: test the just-initialized value
>>
>> From: Julia Lawall <julia-dAYI7NvHqcQ@public.gmane.org>
>>
>> Test the just-initialized value rather than some other one.
>>
>> The semantic match that finds this problem is as follows:
>> (http://coccinelle.lip6.fr/)
>>
>> // <smpl>
>> @r@
>> identifier x,y,f!={PTR_ERR,ERR_PTR,ERR_CAST};
>> statement S;
>> @@
>>
>> x = f(...);
>> (
>> if (\(x == NULL\|IS_ERR(x)\)) S
>> |
>> *if (\(y == NULL\|IS_ERR(y)\))
>> { ... when != x
>> return ...; }
>> )
>> // </smpl>
>>
>> Signed-off-by: Julia Lawall <julia-dAYI7NvHqcQ@public.gmane.org>
>
> Acked-by: Bing Zhao <bzhao-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
>
>
> Thanks,
> Bing
>
>>
>> ---
>> drivers/net/wireless/mwifiex/scan.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c
>> index b28241c..37ca2f9 100644
>> --- a/drivers/net/wireless/mwifiex/scan.c
>> +++ b/drivers/net/wireless/mwifiex/scan.c
>> @@ -1480,8 +1480,8 @@ mwifiex_update_curr_bss_params(struct mwifiex_private *priv,
>> return -ENOMEM;
>> }
>> beacon_ie = kzalloc(ie_len, GFP_KERNEL);
>> - if (!bss_desc) {
>> - dev_err(priv->adapter->dev, " failed to alloc bss_desc\n");
>> + if (!beacon_ie) {
>> + dev_err(priv->adapter->dev, " failed to alloc beacon_ie\n");
>> return -ENOMEM;
>> }
>> memcpy(beacon_ie, ie_buf, ie_len);
> --
this looks like a case for kmemdup()
just my 2 cents,
re,
wh
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [patch net-next-2.6] net: vlan: goto another_round instead of calling __netif_receive_skb
From: Jiri Pirko @ 2011-08-22 19:08 UTC (permalink / raw)
To: netdev; +Cc: davem, shemminger, eric.dumazet, mirqus, jesse
Now, when vlan tag on untagged in non-accelerated path is stripped from
skb, headers are reset right away. Benefit from that and avoid calling
__netif_receive_skb recursivelly and just use another_round.
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
---
net/core/dev.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index c2442b4..a4306f7 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3236,10 +3236,9 @@ ncls:
ret = deliver_skb(skb, pt_prev, orig_dev);
pt_prev = NULL;
}
- if (vlan_do_receive(&skb)) {
- ret = __netif_receive_skb(skb);
- goto out;
- } else if (unlikely(!skb))
+ if (vlan_do_receive(&skb))
+ goto another_round;
+ else if (unlikely(!skb))
goto out;
}
--
1.7.6
^ permalink raw reply related
* RE: [PATCH 4/4] drivers/net/wireless/mwifiex/scan.c: test the just-initialized value
From: Bing Zhao @ 2011-08-22 19:29 UTC (permalink / raw)
To: wharms-fPG8STNUNVg@public.gmane.org
Cc: Julia Lawall, Pierre Louis Aublin,
kernel-janitors-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
John W. Linville,
linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
In-Reply-To: <4E52A966.3090502-fPG8STNUNVg@public.gmane.org>
> Am 22.08.2011 21:02, schrieb Bing Zhao:
> > Hi Julia,
> >
> > Thanks for the patch.
> >
> >> -----Original Message-----
> >> From: Julia Lawall [mailto:julia-dAYI7NvHqcQ@public.gmane.org]
> >> Sent: Monday, August 22, 2011 7:16 AM
> >> To: Pierre Louis Aublin
> >> Cc: Bing Zhao; kernel-janitors-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; John W. Linville; linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org;
> >> netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> >> Subject: [PATCH 4/4] drivers/net/wireless/mwifiex/scan.c: test the just-initialized value
> >>
> >> From: Julia Lawall <julia-dAYI7NvHqcQ@public.gmane.org>
> >>
> >> Test the just-initialized value rather than some other one.
> >>
> >> The semantic match that finds this problem is as follows:
> >> (http://coccinelle.lip6.fr/)
> >>
> >> // <smpl>
> >> @r@
> >> identifier x,y,f!={PTR_ERR,ERR_PTR,ERR_CAST};
> >> statement S;
> >> @@
> >>
> >> x = f(...);
> >> (
> >> if (\(x == NULL\|IS_ERR(x)\)) S
> >> |
> >> *if (\(y == NULL\|IS_ERR(y)\))
> >> { ... when != x
> >> return ...; }
> >> )
> >> // </smpl>
> >>
> >> Signed-off-by: Julia Lawall <julia-dAYI7NvHqcQ@public.gmane.org>
> >
> > Acked-by: Bing Zhao <bzhao-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
> >
> >
> > Thanks,
> > Bing
> >
> >>
> >> ---
> >> drivers/net/wireless/mwifiex/scan.c | 4 ++--
> >> 1 file changed, 2 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c
> >> index b28241c..37ca2f9 100644
> >> --- a/drivers/net/wireless/mwifiex/scan.c
> >> +++ b/drivers/net/wireless/mwifiex/scan.c
> >> @@ -1480,8 +1480,8 @@ mwifiex_update_curr_bss_params(struct mwifiex_private *priv,
> >> return -ENOMEM;
> >> }
> >> beacon_ie = kzalloc(ie_len, GFP_KERNEL);
> >> - if (!bss_desc) {
> >> - dev_err(priv->adapter->dev, " failed to alloc bss_desc\n");
> >> + if (!beacon_ie) {
> >> + dev_err(priv->adapter->dev, " failed to alloc beacon_ie\n");
> >> return -ENOMEM;
> >> }
> >> memcpy(beacon_ie, ie_buf, ie_len);
> > --
>
>
> this looks like a case for kmemdup()
Hi Walter,
You are right. I believe there are some more cases where kmemdup can be used.
Hi John,
Please apply Julia's patch as I will send a separate patch later to address Walter's comment. Thanks.
>
> just my 2 cents,
Thanks a lot for your 2 cents.
Bing
>
> re,
> wh
>
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: pull request: wireless 2011-08-22
From: David Miller @ 2011-08-22 19:33 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, netdev, linux-kernel
In-Reply-To: <20110822190136.GJ2534@tuxdriver.com>
From: "John W. Linville" <linville@tuxdriver.com>
Date: Mon, 22 Aug 2011 15:01:37 -0400
> This is a batch of fixes intended for 3.1. Included is rewrite of an
> earlier iwlagn fix that was revealed to be flawed (bad pointer access
> during module unload), a fix for a memory leak, and a trio of rt2x00
> fixes with detailed changelogs. These have all been in linux-next
> for the last week with no reported complaints.
>
> Please let me know if there are problems!
Pulled, thanks John.
^ permalink raw reply
* Re: [patch net-next-2.6] net: vlan: goto another_round instead of calling __netif_receive_skb
From: David Miller @ 2011-08-22 19:43 UTC (permalink / raw)
To: jpirko; +Cc: netdev, shemminger, eric.dumazet, mirqus, jesse
In-Reply-To: <1314040135-3414-1-git-send-email-jpirko@redhat.com>
From: Jiri Pirko <jpirko@redhat.com>
Date: Mon, 22 Aug 2011 21:08:55 +0200
> Now, when vlan tag on untagged in non-accelerated path is stripped from
> skb, headers are reset right away. Benefit from that and avoid calling
> __netif_receive_skb recursivelly and just use another_round.
>
> Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Applied, thanks.
^ permalink raw reply
* Re: [RFC][PATCH] Failed neighbors attached to routes are not released
From: Guy Yur @ 2011-08-22 19:49 UTC (permalink / raw)
To: netdev; +Cc: eric.dumazet
In-Reply-To: <1314031455.2307.113.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC>
On Mon, Aug 22, 2011 at 7:44 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Le vendredi 19 août 2011 à 21:53 +0300, Guy Yur a écrit :
>> Hi,
>>
>> The issue I am seeing is with a neighbor used as a gateway in a route,
>> when the neighbor gets nud FAILED it will not be removed from the
>> neighbor cache.
>> The reference count for the neighbor remains > 1
>> when neigh_periodic_work() is called.
>>
>> Issue noticed with IPv6 neighbors on Arch Linux with kernel 3.0.3
>> kernel config includes CONFIG_IPV6_ROUTER_PREF
>>
>> The problem affects routing when the neighbor loses connectivity and returns.
>>
>> Scenario: Using a default route and a static route through different interfaces.
>> When the neighbor gateway of the static route goes down the traffic
>> will move to the default gateway as expected.
>> Once the static route neighbor comes back up it is not asked for
>> neighbor solicitation
>> because the route is marked as FAILED and the traffic will continue to
>> pass through the default gateway.
>>
>> Steps to reproduce the route not being removed:
>> 1. add an IPv6 address on an interface
>> 2. add a route to a network through a gateway on the interface's network
>> 3. make sure the gateway address is not reachable
>> 4. ping6 a host in the route network
>> 5. "ip -6 nei" will show the gateway neighbor as FAILED and it won't be released
>>
>> Steps to reproduce the routing problem:
>> 1. client and two gateway machines (A and B)
>> 2. on the client define a static route through A and a default route through B
>> 3. disconnect eth on A
>> 4. ping6 a host in the network that should go through A
>> after a while the traffic will move through B which is the default route
>> 5. reconnect eth on A
>> 6. ping6 a host in the network again, the traffic will still go through B
>> "ip -6 nei" on the client will still show A as FAILED
>>
>>
>> Patch to change the nud state to NONE if the reference count > 1
>> allowing the neighbor to be released in a future pass.
>
> I wonder why a 'future pass' is needed at all.
>
> Shouldnt we immediately detect link becomes alive and force an immediate
> flush at this point, before waiting a garbage collect timer ?
>
I tested removing the neighbor as done in neigh_flush_dev() instead of
just setting to NUD_NONE,
it seems that the neighbor shouldn't be removed if it has routes attached to it.
If the neighbor is removed the route won't be considered at all.
The problem of the state remaining FAILED does need to be handled.
Like the case of no neighbor, a FAILED state means find_match() won't
try to send neighbor solicitation probes.
The neighbor will remain in a state of NUD_FAILED and the route won't
be used, only a direct communication with the neighbor will change its
state.
Do you think it is better to change the state from NUD_FAILED to
NUD_NONE in neigh_timer_handler() instead?
Updated patch to set the state to NUD_NOARP if the state was valid,
same as done in neigh_flush_dev().
Not sure if it is needed or the state can be set to NUD_NONE in all cases.
--- linux/net/core/neighbour.c.orig 2011-07-22 05:17:23.000000000 +0300
+++ linux/net/core/neighbour.c 2011-08-22 22:03:48.790689600 +0300
@@ -802,14 +802,20 @@
if (time_before(n->used, n->confirmed))
n->used = n->confirmed;
- if (atomic_read(&n->refcnt) == 1 &&
- (state == NUD_FAILED ||
- time_after(jiffies, n->used + n->parms->gc_staletime))) {
+ if (state == NUD_FAILED ||
+ time_after(jiffies, n->used + n->parms->gc_staletime)) {
*np = n->next;
- n->dead = 1;
- write_unlock(&n->lock);
- neigh_cleanup_and_release(n);
- continue;
+ if (atomic_read(&n->refcnt) == 1) {
+ n->dead = 1;
+ write_unlock(&n->lock);
+ neigh_cleanup_and_release(n);
+ continue;
+ } else {
+ if (n->nud_state & NUD_VALID)
+ n->nud_state = NUD_NOARP;
+ else
+ n->nud_state = NUD_NONE;
+ }
}
write_unlock(&n->lock);
^ permalink raw reply
* pull request: wireless-next 2011-08-22
From: John W. Linville @ 2011-08-22 19:58 UTC (permalink / raw)
To: davem-fT/PcQaiUtIeIZ0/mPfg9Q
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
Dave,
This is a batch of updates intended for 3.2.
Highlights include a wireless extensions dependency cleanup amongst
a number of drivers, and the inclusion of the ath6kl driver
in drivers/net/wireless (along with its removal from staging).
Also included are a number of updates to mac80211, bcma, mwifiex,
libertas, ath9k, iwlagn, and a number of other drivers.
Please let me know if there are problems!
Thanks,
John
---
The following changes since commit ca1ba7caa68520864e4b9227e67f3bbc6fed373b:
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/jkirsher/net-next (2011-08-20 17:25:36 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git for-davem
Alex Hacker (1):
ath9k_hw: use register name in place of magic value
Amitkumar Karwar (2):
mwifiex: print driver version information
mwifiex: use cfg80211 dynamic scan table and cfg80211_get_bss API
Baruch Siach (1):
mac80211/mesh: make the preq queue lock consistent
Bing Zhao (2):
mwifiex: remove wireless.h inclusion and fix resulting bugs
mwifiex: remove redundant variable scan_table_idx
Dan Carpenter (1):
libertas: remove some dead code in if_spi_prog_helper_firmware()
Daniel Drake (5):
libertas: link mesh device to wiphy
libertas_usb: use USB interface as parent device
libertas_usb: program OLPC EC wakeup mask for wake-on-WLAN
libertas: disable functionality when interface is down
libertas: implement if_sdio runtime power management
Eliad Peller (1):
mac80211: clear sta.drv_priv on reconfiguration
Felix Fietkau (7):
ath9k_hw: remove the tx power index offset
ath9k_hw: fix calculated runtime tx power limit
ath9k_hw: do not limit initial tx power to 20 dbm
ath9k_hw: calculate a much better approximation of channel noise
ath9k: use the new channel noise value for signal strength and survey info
cfg80211: fix a crash in nl80211_send_station
ath9k: avoid sending a-mpdu packets to sleeping stations
Hauke Mehrtens (12):
bcma: move parsing of EEPROM into own function.
bcma: move initializing of struct bcma_bus to own function.
bcma: add functions to scan cores needed on SoCs
bcma: add SOC bus
bcma: add mips driver
bcma: add serial console support
bcma: get CPU clock
bcm47xx: prepare to support different buses
bcm47xx: make it possible to build bcm47xx without ssb.
bcm47xx: add support for bcma bus
bcm47xx: fix irq assignment for new SoCs.
b43: add core rev 17 used on bcma SoC.
Helmut Schaa (5):
mac80211: Stop TX BA session if buf_size is zero
mac80211: Don't use a buf_size=0 in ADDBA requests
mac80211: Fill in skb->protocol information for injected frames
mac80211: Don't use EAPOL frames for rate sampling
rt2x00: Fix PCI interrupt processing race on SMP systems
Javier Cardona (1):
mac80211: fix erroneous clearing of MESH_PATH_SN_VALID flag
Joe Perches (1):
cfg80211: Update REG_DBG_PRINT macro and uses
Johannes Berg (18):
cfg80211: split wext compatibility to separate header
iwlagn: remove wireless extensions inclusions
iwlegacy: remove wireless extensions inclusions
ath5k: remove wireless extensions inclusions
b43: remove wireless extensions inclusions
b43legacy: remove wireless extensions inclusions
rndis_wlan: remove wireless extensions inclusions
wl12xx: remove wext dependencies
wl1251: remove wext dependencies
mwifiex: add wext include
mac80211: remove linux/wireless.h inclusion
cfg80211: remove unused wext handler exports
iwlagn: reserve queue 10 for TX during scan dwell
iwlagn: separate firmware version warning
iwlagn: bump firmware API for some devices
iwlagn: move context init after firmware loading
iwlagn: support new P2P implementation
mac80211: remove offchannel_tx API
John W. Linville (3):
Merge branch 'ath6kl-next' of master.kernel.org:/.../kvalo/ath6kl
Merge branch 'for-linville' of git://git.kernel.org/.../kvalo/ath6kl
Merge branch 'master' of git://git.kernel.org/.../linville/wireless-next into for-davem
Jouni Malinen (7):
mac80211_hwsim: Fix RX status reporting for HT
nl80211: Indicate driver-based offchannel TX on mgmt_tx_cancel_wait
cfg80211/nl80211: Send AssocReq IEs to user space in AP mode
nl80211/cfg80211: Make addition of new sinfo fields safer
nl80211/cfg80211: Allow SSID to be specified in new beacon command
nl80211/cfg80211: Add crypto settings into NEW_BEACON
nl80211/cfg80211: Add extra IE configuration to AP mode setup
Kalle Valo (8):
Add ath6kl cleaned up driver
ath6kl: don't force foreground scan when connected
ath6kl: fix atomicity in ath6kl_cfg80211_scan_node()
ath6kl: fix crash when interface is closed but scan is ongoing
ath6kl: remove dependency to wireless extensions
ath6kl: change aggreation timeout message from an error to a debug message
ath6kl: fix function name conflicts with ath9k
staging: remove ath6kl
Larry Finger (3):
rtlwifi: Eliminate raw reads and writes from PCIe portion
rtlwifi: Remove raw read/write routines from header
b43: Remove EXPERIMENTAL designation from LP PHY selection
Marek Lindner (1):
ath9k: remove eeprom txgain override for minor version < 19
Mohammed Shafi Shajakhan (3):
ath9k_htc: minor clean-up
ath9k: optimize rate control statistics
ath9k: remove obselete comments
Pavel Roskin (13):
ath9k: remove all references to subsysid, it's never used
ath5k: remove unused and write-only structures and fields
ath5k: remove most references to XR
ath5k: eliminate CHANNEL_* macros, use AR5K_MODE_* in channel->hw_value
b43legacy: remove 64-bit DMA support
b43legacy: report core number
pcmcia: add PCMCIA_DEVICE_MANF_CARD_PROD_ID3
hostap_cs: support cards with "Version 01.02" as third product ID
orinoco_cs: be more careful when matching cards with ID 0x0156:0x0002
ath: fix spelling of Grenada
ath5k: clean up base.h and its use
ath5k: remove last references to "softc"
lib80211: remove exports for functions not called by other modules
Rafał Miłecki (2):
ssb: define boardflags
bcma: use boardflags define from ssb code
Raja Mani (6):
ath6kl: Print bad trailer data only when htc fails to parse trailer info
ath6kl: Rearrange the variable and the value position in IF condition
ath6kl: Avoid two memset to clear src and desr mac addr variable memory in ath6kl_wmi_dot11_hdr_remove()
ath6kl: Use bit field macros to maintain wlan enabled and disabled status
ath6kl: Fix crash during the connection process
ath6kl: Release the memory allocated for the firmware
Rajkumar Manoharan (13):
ath9k_hw: Add dump_eeprom support for AR9003
ath9k_hw: Add dump_eeprom support for eeprom_4k
ath9k_hw: Add dump_eeprom support for AR9287
ath9k_hw: Add dump_eeprom support for eeprom_def
ath9k: Dump base eeprom header
ath9k: Dump modal eeprom header
ath9k: Remove virtual wiphy specific frame type
ath9k_hw: Optimize rx descriptor processing for AR9003
ath9k_hw: Update the radio parameters related to high_power
ath9k_hw: Update AR9003 high_power tx gain table
ath9k: do not enable interrupt on set interrupt mask
ath9k_hw: Fix incorrect spur_freq_sd for AR9003
ath9k: Use atomic reference count for interrupt ops
Sergei Shtylyov (1):
ath9k: use pci_dev->subsystem_device
Vasanthakumar Thiagarajan (33):
ath6kl: cleanup callbacks for different scatter gather method
ath6kl: Move ath6kl_sdio_async_rw_scatter() down to other hif_ops functions
ath6kl: Remove struct hif_scatter_req_priv
ath6kl: Remove useless flags in hif_scatter_req
ath6kl: Remove endpoint reference from hif_scatter_req
ath6kl: Refactor refactor ath6kl_sdio_setup_scat_resource()
ath6kl: Cleanup ath6kl_sdio_enable_scatter()
ath6kl: Cleanup ath6kl_sdio_cleanup_scatter()
ath6kl: Move down scatter enable and cleanup functions
ath6kl: Merge scatter gather setup functions for two method
ath6kl: Moe virt_scat from hif_dev_scat_sup_info to hif_scatter_req
ath6kl: Refactor ath6kl_sdio_read_write_sync()
ath6kl: Merge scatter rw request functions into one
ath6kl: Remove ath6kldev_setup_msg_bndl()
ath6kl: Minor cleanup in ath6kldev_submit_scat_req()
ath6kl: Remove callback msg_pending() and used the function directly
ath6kl: Move bundle size from ath6kl_device to htc_target
ath6kl: Move block_sz and block_mask from ath6kl_device to htc_target
ath6kl: Move scatter information from ath6kl_device to htc_target
ath6kl: Bypass reading irq status based on chk_irq_status_cnt
ath6kl: Move chk_irq_status_cnt from ath6kl_device to htc_target
ath6kl: Remove unused struct ath6kl_async_reg_io_buffer
ath6kl: Cleanup void *parent_dev in struct wmi
ath6kl: Move scan table from wmi to ath6kl
ath6kl: Cleanup parameters for wlan_refresh_inactive_nodes()
ath6kl: Remove bssid from struct wmi
ath6kl: Remove ath6kl_wmi_get_current_bssid()
ath6kl: Cleanup parameters of wlan_node_table_init()
ath6kl: Move initialization/deinitialization of scan_table to appropriate functions
ath6kl: Pass only the needed scan_table to ath6kl_wmi_iterate_nodes()
ath6kl: Remove ath6kl_wmi_iterate_nodes()
ath6kl: Use ath6kl_cfg80211_scan_node() directly instead of function pointer
ath6kl: Cleanup void * in ath6kl_cfg80211_scan_node()
Wey-Yi Guy (4):
iwlagn: default smps mode for 1000 series device
iwlagn: Remove ht40 support from 5.2GHz for _bgn devices
iwlagn: change default sensitivity value for 5000 and 6000 series
iwlagn: support v2 of enhanced sensitivity table
Yogesh Ashok Powar (1):
cfg80211/mac80211: move information element parsing logic to cfg80211
arch/mips/Kconfig | 8 +-
arch/mips/bcm47xx/Kconfig | 31 +
arch/mips/bcm47xx/Makefile | 3 +-
arch/mips/bcm47xx/gpio.c | 82 +-
arch/mips/bcm47xx/irq.c | 12 +
arch/mips/bcm47xx/nvram.c | 29 +-
arch/mips/bcm47xx/serial.c | 46 +-
arch/mips/bcm47xx/setup.c | 90 +-
arch/mips/bcm47xx/time.c | 16 +-
arch/mips/bcm47xx/wgt634u.c | 14 +-
arch/mips/include/asm/mach-bcm47xx/bcm47xx.h | 26 +-
arch/mips/include/asm/mach-bcm47xx/gpio.h | 108 +-
arch/mips/pci/pci-bcm47xx.c | 6 +
drivers/bcma/Kconfig | 13 +
drivers/bcma/Makefile | 2 +
drivers/bcma/bcma_private.h | 16 +
drivers/bcma/core.c | 2 +
drivers/bcma/driver_chipcommon.c | 53 +
drivers/bcma/driver_chipcommon_pmu.c | 133 +
drivers/bcma/driver_mips.c | 256 +
drivers/bcma/driver_pci.c | 16 +-
drivers/bcma/host_soc.c | 183 +
drivers/bcma/main.c | 70 +-
drivers/bcma/scan.c | 348 +-
drivers/net/wireless/ath/Kconfig | 1 +
drivers/net/wireless/ath/Makefile | 1 +
drivers/net/wireless/ath/ath5k/ahb.c | 4 +-
drivers/net/wireless/ath/ath5k/ani.c | 1 -
drivers/net/wireless/ath/ath5k/ani.h | 4 +
drivers/net/wireless/ath/ath5k/ath5k.h | 98 +-
drivers/net/wireless/ath/ath5k/attach.c | 18 +-
drivers/net/wireless/ath/ath5k/base.c | 31 +-
drivers/net/wireless/ath/ath5k/base.h | 55 +-
drivers/net/wireless/ath/ath5k/caps.c | 2 +-
drivers/net/wireless/ath/ath5k/debug.c | 15 +-
drivers/net/wireless/ath/ath5k/desc.c | 1 -
drivers/net/wireless/ath/ath5k/dma.c | 1 -
drivers/net/wireless/ath/ath5k/eeprom.c | 10 +-
drivers/net/wireless/ath/ath5k/gpio.c | 1 -
drivers/net/wireless/ath/ath5k/initvals.c | 1 -
drivers/net/wireless/ath/ath5k/led.c | 1 -
drivers/net/wireless/ath/ath5k/mac80211-ops.c | 5 +-
drivers/net/wireless/ath/ath5k/pci.c | 4 +-
drivers/net/wireless/ath/ath5k/pcu.c | 5 +-
drivers/net/wireless/ath/ath5k/phy.c | 91 +-
drivers/net/wireless/ath/ath5k/qcu.c | 10 +-
drivers/net/wireless/ath/ath5k/reset.c | 79 +-
drivers/net/wireless/ath/ath5k/rfkill.c | 2 +-
drivers/net/wireless/ath/ath5k/sysfs.c | 1 -
drivers/net/wireless/ath/ath5k/trace.h | 3 +-
drivers/net/wireless/ath/ath6kl/Kconfig | 15 +
drivers/net/wireless/ath/ath6kl/Makefile | 35 +
drivers/net/wireless/ath/ath6kl/bmi.c | 692 +++
drivers/net/wireless/ath/ath6kl/bmi.h | 250 +
drivers/net/wireless/ath/ath6kl/cfg80211.c | 1538 +++++
drivers/net/wireless/ath/ath6kl/cfg80211.h | 39 +
drivers/net/wireless/ath/ath6kl/common.h | 180 +
drivers/net/wireless/ath/ath6kl/core.h | 544 ++
drivers/net/wireless/ath/ath6kl/debug.c | 150 +
drivers/net/wireless/ath/ath6kl/debug.h | 105 +
drivers/net/wireless/ath/ath6kl/hif-ops.h | 72 +
drivers/net/wireless/ath/ath6kl/hif.h | 207 +
drivers/net/wireless/ath/ath6kl/htc.c | 2457 ++++++++
drivers/net/wireless/ath/ath6kl/htc.h | 607 ++
drivers/net/wireless/ath/ath6kl/htc_hif.c | 641 ++
drivers/net/wireless/ath/ath6kl/htc_hif.h | 92 +
drivers/net/wireless/ath/ath6kl/init.c | 1303 ++++
drivers/net/wireless/ath/ath6kl/main.c | 1337 ++++
drivers/net/wireless/ath/ath6kl/node.c | 234 +
drivers/net/wireless/ath/ath6kl/sdio.c | 912 +++
drivers/net/wireless/ath/ath6kl/target.h | 331 +
drivers/net/wireless/ath/ath6kl/txrx.c | 1457 +++++
drivers/net/wireless/ath/ath6kl/wmi.c | 2743 +++++++++
drivers/net/wireless/ath/ath6kl/wmi.h | 2018 ++++++
drivers/net/wireless/ath/ath9k/ahb.c | 2 +-
.../net/wireless/ath/ath9k/ar9003_2p2_initvals.h | 190 +-
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 150 +-
drivers/net/wireless/ath/ath9k/ar9003_mac.c | 15 +-
drivers/net/wireless/ath/ath9k/ar9003_phy.c | 4 +-
drivers/net/wireless/ath/ath9k/ath9k.h | 6 +-
drivers/net/wireless/ath/ath9k/beacon.c | 18 +-
drivers/net/wireless/ath/ath9k/calib.c | 15 +
drivers/net/wireless/ath/ath9k/calib.h | 1 +
drivers/net/wireless/ath/ath9k/debug.c | 60 +
drivers/net/wireless/ath/ath9k/eeprom.h | 2 +
drivers/net/wireless/ath/ath9k/eeprom_4k.c | 135 +-
drivers/net/wireless/ath/ath9k/eeprom_9287.c | 122 +-
drivers/net/wireless/ath/ath9k/eeprom_def.c | 150 +-
drivers/net/wireless/ath/ath9k/gpio.c | 2 +
drivers/net/wireless/ath/ath9k/htc.h | 3 -
drivers/net/wireless/ath/ath9k/htc_drv_init.c | 1 -
drivers/net/wireless/ath/ath9k/hw.c | 10 +-
drivers/net/wireless/ath/ath9k/hw.h | 9 +-
drivers/net/wireless/ath/ath9k/init.c | 8 +-
drivers/net/wireless/ath/ath9k/mac.c | 16 +-
drivers/net/wireless/ath/ath9k/main.c | 10 +-
drivers/net/wireless/ath/ath9k/pci.c | 4 +-
drivers/net/wireless/ath/ath9k/rc.c | 4 +-
drivers/net/wireless/ath/ath9k/rc.h | 6 -
drivers/net/wireless/ath/ath9k/recv.c | 10 +-
drivers/net/wireless/ath/ath9k/xmit.c | 12 +-
drivers/net/wireless/ath/regd.h | 2 +-
drivers/net/wireless/ath/regd_common.h | 2 +-
drivers/net/wireless/b43/Kconfig | 6 +-
drivers/net/wireless/b43/main.c | 2 +-
drivers/net/wireless/b43legacy/b43legacy.h | 1 -
drivers/net/wireless/b43legacy/dma.c | 374 +-
drivers/net/wireless/b43legacy/dma.h | 107 -
drivers/net/wireless/b43legacy/main.c | 4 +-
drivers/net/wireless/ipw2x00/ipw2200.c | 1 +
drivers/net/wireless/iwlegacy/iwl-3945-led.c | 1 -
drivers/net/wireless/iwlegacy/iwl-3945-rs.c | 1 -
drivers/net/wireless/iwlegacy/iwl-3945.c | 1 -
drivers/net/wireless/iwlegacy/iwl-4965-led.c | 1 -
drivers/net/wireless/iwlegacy/iwl-4965-rs.c | 1 -
drivers/net/wireless/iwlegacy/iwl-4965.c | 1 -
drivers/net/wireless/iwlegacy/iwl-led.c | 1 -
drivers/net/wireless/iwlegacy/iwl3945-base.c | 1 -
drivers/net/wireless/iwlegacy/iwl4965-base.c | 1 -
drivers/net/wireless/iwlwifi/Kconfig | 17 -
drivers/net/wireless/iwlwifi/iwl-1000.c | 16 +-
drivers/net/wireless/iwlwifi/iwl-2000.c | 24 +-
drivers/net/wireless/iwlwifi/iwl-5000.c | 13 +-
drivers/net/wireless/iwlwifi/iwl-6000.c | 20 +-
drivers/net/wireless/iwlwifi/iwl-agn-calib.c | 69 +-
drivers/net/wireless/iwlwifi/iwl-agn-hw.h | 4 +-
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 47 +-
drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 1 -
drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | 23 +-
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 30 +-
drivers/net/wireless/iwlwifi/iwl-agn.c | 388 +-
drivers/net/wireless/iwlwifi/iwl-agn.h | 1 +
drivers/net/wireless/iwlwifi/iwl-commands.h | 34 +-
drivers/net/wireless/iwlwifi/iwl-core.c | 5 +
drivers/net/wireless/iwlwifi/iwl-core.h | 5 +
drivers/net/wireless/iwlwifi/iwl-dev.h | 29 +-
drivers/net/wireless/iwlwifi/iwl-led.c | 1 -
drivers/net/wireless/iwlwifi/iwl-scan.c | 19 +-
drivers/net/wireless/iwlwifi/iwl-trans.c | 10 +-
drivers/net/wireless/libertas/cfg.c | 69 +-
drivers/net/wireless/libertas/cfg.h | 1 +
drivers/net/wireless/libertas/cmd.c | 6 +-
drivers/net/wireless/libertas/decl.h | 4 +
drivers/net/wireless/libertas/dev.h | 28 +-
drivers/net/wireless/libertas/ethtool.c | 1 +
drivers/net/wireless/libertas/if_sdio.c | 277 +-
drivers/net/wireless/libertas/if_spi.c | 4 -
drivers/net/wireless/libertas/if_usb.c | 13 +-
drivers/net/wireless/libertas/main.c | 180 +-
drivers/net/wireless/libertas/mesh.c | 77 +-
drivers/net/wireless/libertas/mesh.h | 27 +-
drivers/net/wireless/libertas/rx.c | 1 +
drivers/net/wireless/libertas/tx.c | 1 +
drivers/net/wireless/mac80211_hwsim.c | 6 +
drivers/net/wireless/mwifiex/cfg80211.c | 209 +-
drivers/net/wireless/mwifiex/fw.h | 15 +-
drivers/net/wireless/mwifiex/init.c | 21 -
drivers/net/wireless/mwifiex/ioctl.h | 5 +-
drivers/net/wireless/mwifiex/join.c | 32 -
drivers/net/wireless/mwifiex/main.c | 4 +
drivers/net/wireless/mwifiex/main.h | 55 +-
drivers/net/wireless/mwifiex/scan.c | 1578 +----
drivers/net/wireless/mwifiex/sta_event.c | 9 +-
drivers/net/wireless/mwifiex/sta_ioctl.c | 230 +-
drivers/net/wireless/orinoco/wext.c | 1 +
drivers/net/wireless/rndis_wlan.c | 2 -
drivers/net/wireless/rt2x00/rt2400pci.c | 39 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 39 +-
drivers/net/wireless/rt2x00/rt2800pci.c | 46 +-
drivers/net/wireless/rt2x00/rt2x00dev.c | 1 -
drivers/net/wireless/rt2x00/rt61pci.c | 34 +-
drivers/net/wireless/rtlwifi/pci.c | 37 +-
drivers/net/wireless/rtlwifi/pci.h | 26 -
drivers/net/wireless/wl1251/cmd.h | 2 +-
drivers/net/wireless/wl1251/wl12xx_80211.h | 2 +-
drivers/net/wireless/wl12xx/cmd.h | 4 +-
drivers/net/wireless/wl12xx/main.c | 2 +-
drivers/net/wireless/wl12xx/scan.h | 6 +-
drivers/net/wireless/wl12xx/wl12xx.h | 4 +-
drivers/net/wireless/wl12xx/wl12xx_80211.h | 2 +-
drivers/staging/Kconfig | 2 -
drivers/staging/Makefile | 1 -
drivers/staging/ath6kl/Kconfig | 158 -
drivers/staging/ath6kl/Makefile | 122 -
drivers/staging/ath6kl/TODO | 25 -
drivers/staging/ath6kl/bmi/include/bmi_internal.h | 54 -
drivers/staging/ath6kl/bmi/src/bmi.c | 1010 ---
.../staging/ath6kl/hif/common/hif_sdio_common.h | 87 -
.../hif/sdio/linux_sdio/include/hif_internal.h | 131 -
.../staging/ath6kl/hif/sdio/linux_sdio/src/hif.c | 1273 ----
.../ath6kl/hif/sdio/linux_sdio/src/hif_scatter.c | 393 --
drivers/staging/ath6kl/htc2/AR6000/ar6k.c | 1479 -----
drivers/staging/ath6kl/htc2/AR6000/ar6k.h | 401 --
drivers/staging/ath6kl/htc2/AR6000/ar6k_events.c | 783 ---
drivers/staging/ath6kl/htc2/AR6000/ar6k_gmbox.c | 755 ---
.../ath6kl/htc2/AR6000/ar6k_gmbox_hciuart.c | 1284 ----
drivers/staging/ath6kl/htc2/htc.c | 575 --
drivers/staging/ath6kl/htc2/htc_debug.h | 38 -
drivers/staging/ath6kl/htc2/htc_internal.h | 211 -
drivers/staging/ath6kl/htc2/htc_recv.c | 1572 -----
drivers/staging/ath6kl/htc2/htc_send.c | 1018 ---
drivers/staging/ath6kl/htc2/htc_services.c | 450 --
drivers/staging/ath6kl/include/a_config.h | 31 -
drivers/staging/ath6kl/include/a_debug.h | 195 -
drivers/staging/ath6kl/include/a_drv.h | 32 -
drivers/staging/ath6kl/include/a_drv_api.h | 204 -
drivers/staging/ath6kl/include/a_osapi.h | 32 -
drivers/staging/ath6kl/include/aggr_recv_api.h | 140 -
drivers/staging/ath6kl/include/ar3kconfig.h | 65 -
drivers/staging/ath6kl/include/ar6000_api.h | 32 -
drivers/staging/ath6kl/include/ar6000_diag.h | 48 -
drivers/staging/ath6kl/include/ar6kap_common.h | 44 -
drivers/staging/ath6kl/include/athbtfilter.h | 135 -
drivers/staging/ath6kl/include/bmi.h | 134 -
.../ath6kl/include/common/AR6002/AR6K_version.h | 52 -
.../staging/ath6kl/include/common/AR6002/addrs.h | 90 -
.../common/AR6002/hw4.0/hw/apb_athr_wlan_map.h | 40 -
.../include/common/AR6002/hw4.0/hw/apb_map.h | 40 -
.../include/common/AR6002/hw4.0/hw/mbox_host_reg.h | 24 -
.../include/common/AR6002/hw4.0/hw/mbox_reg.h | 552 --
.../common/AR6002/hw4.0/hw/mbox_wlan_host_reg.h | 471 --
.../include/common/AR6002/hw4.0/hw/mbox_wlan_reg.h | 589 --
.../include/common/AR6002/hw4.0/hw/rtc_reg.h | 187 -
.../include/common/AR6002/hw4.0/hw/rtc_wlan_reg.h | 162 -
.../include/common/AR6002/hw4.0/hw/uart_reg.h | 40 -
drivers/staging/ath6kl/include/common/athdefs.h | 75 -
drivers/staging/ath6kl/include/common/bmi_msg.h | 233 -
drivers/staging/ath6kl/include/common/cnxmgmt.h | 36 -
drivers/staging/ath6kl/include/common/dbglog.h | 126 -
drivers/staging/ath6kl/include/common/dbglog_id.h | 558 --
drivers/staging/ath6kl/include/common/discovery.h | 75 -
.../staging/ath6kl/include/common/epping_test.h | 111 -
drivers/staging/ath6kl/include/common/gmboxif.h | 70 -
drivers/staging/ath6kl/include/common/gpio_reg.h | 9 -
drivers/staging/ath6kl/include/common/htc.h | 227 -
.../staging/ath6kl/include/common/htc_services.h | 52 -
drivers/staging/ath6kl/include/common/pkt_log.h | 45 -
drivers/staging/ath6kl/include/common/roaming.h | 41 -
drivers/staging/ath6kl/include/common/targaddrs.h | 395 --
drivers/staging/ath6kl/include/common/testcmd.h | 185 -
drivers/staging/ath6kl/include/common/tlpm.h | 38 -
drivers/staging/ath6kl/include/common/wlan_defs.h | 79 -
drivers/staging/ath6kl/include/common/wmi.h | 3220 ----------
drivers/staging/ath6kl/include/common/wmix.h | 271 -
drivers/staging/ath6kl/include/common_drv.h | 104 -
drivers/staging/ath6kl/include/dbglog_api.h | 52 -
drivers/staging/ath6kl/include/dl_list.h | 153 -
drivers/staging/ath6kl/include/dset_api.h | 65 -
drivers/staging/ath6kl/include/hci_transport_api.h | 259 -
drivers/staging/ath6kl/include/hif.h | 456 --
drivers/staging/ath6kl/include/host_version.h | 52 -
drivers/staging/ath6kl/include/htc_api.h | 575 --
drivers/staging/ath6kl/include/htc_packet.h | 227 -
drivers/staging/ath6kl/include/wlan_api.h | 128 -
drivers/staging/ath6kl/include/wmi_api.h | 441 --
drivers/staging/ath6kl/miscdrv/ar3kconfig.c | 565 --
.../staging/ath6kl/miscdrv/ar3kps/ar3kpsconfig.c | 572 --
.../staging/ath6kl/miscdrv/ar3kps/ar3kpsconfig.h | 75 -
.../staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.c | 969 ---
.../staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.h | 113 -
drivers/staging/ath6kl/miscdrv/common_drv.c | 910 ---
drivers/staging/ath6kl/miscdrv/credit_dist.c | 417 --
drivers/staging/ath6kl/miscdrv/miscdrv.h | 42 -
drivers/staging/ath6kl/os/linux/ar6000_drv.c | 6267 -------------------
drivers/staging/ath6kl/os/linux/ar6000_pm.c | 626 --
drivers/staging/ath6kl/os/linux/ar6000_raw_if.c | 455 --
drivers/staging/ath6kl/os/linux/cfg80211.c | 1892 ------
.../staging/ath6kl/os/linux/export_hci_transport.c | 124 -
drivers/staging/ath6kl/os/linux/hci_bridge.c | 1141 ----
.../staging/ath6kl/os/linux/include/ar6000_drv.h | 776 ---
drivers/staging/ath6kl/os/linux/include/ar6k_pal.h | 36 -
.../ath6kl/os/linux/include/ar6xapi_linux.h | 190 -
.../staging/ath6kl/os/linux/include/athdrv_linux.h | 1217 ----
drivers/staging/ath6kl/os/linux/include/cfg80211.h | 61 -
.../staging/ath6kl/os/linux/include/config_linux.h | 51 -
.../staging/ath6kl/os/linux/include/debug_linux.h | 50 -
.../ath6kl/os/linux/include/export_hci_transport.h | 76 -
.../ath6kl/os/linux/include/ieee80211_ioctl.h | 177 -
.../staging/ath6kl/os/linux/include/osapi_linux.h | 339 -
.../staging/ath6kl/os/linux/include/wlan_config.h | 108 -
.../ath6kl/os/linux/include/wmi_filter_linux.h | 300 -
drivers/staging/ath6kl/os/linux/netbuf.c | 231 -
drivers/staging/ath6kl/reorder/aggr_rx_internal.h | 117 -
drivers/staging/ath6kl/reorder/rcv_aggr.c | 661 --
drivers/staging/ath6kl/wlan/include/ieee80211.h | 397 --
.../staging/ath6kl/wlan/include/ieee80211_node.h | 93 -
drivers/staging/ath6kl/wlan/src/wlan_node.c | 636 --
drivers/staging/ath6kl/wlan/src/wlan_recv_beacon.c | 199 -
drivers/staging/ath6kl/wlan/src/wlan_utils.c | 58 -
drivers/staging/ath6kl/wmi/wmi.c | 6444 --------------------
drivers/staging/ath6kl/wmi/wmi_host.h | 102 -
drivers/watchdog/bcm47xx_wdt.c | 27 +-
include/linux/bcma/bcma.h | 9 +-
include/linux/bcma/bcma_driver_chipcommon.h | 67 +
include/linux/bcma/bcma_driver_mips.h | 51 +
include/linux/bcma/bcma_soc.h | 16 +
include/linux/nl80211.h | 61 +-
include/linux/ssb/ssb_regs.h | 40 +
include/net/cfg80211-wext.h | 55 +
include/net/cfg80211.h | 279 +-
include/net/lib80211.h | 3 -
include/net/mac80211.h | 11 -
net/mac80211/agg-tx.c | 18 +-
net/mac80211/cfg.c | 39 -
net/mac80211/driver-ops.h | 31 -
net/mac80211/ieee80211_i.h | 64 -
net/mac80211/main.c | 1 +
net/mac80211/mesh_hwmp.c | 7 +-
net/mac80211/rc80211_minstrel_ht.c | 8 +-
net/mac80211/sta_info.c | 1 +
net/mac80211/status.c | 3 -
net/mac80211/tx.c | 20 +
net/mac80211/util.c | 168 +-
net/wireless/lib80211.c | 15 +-
net/wireless/nl80211.c | 86 +-
net/wireless/reg.c | 14 +-
net/wireless/scan.c | 1 +
net/wireless/util.c | 168 +
net/wireless/wext-compat.c | 137 +-
net/wireless/wext-compat.h | 8 +
net/wireless/wext-sme.c | 3 +-
321 files changed, 22561 insertions(+), 54152 deletions(-)
create mode 100644 arch/mips/bcm47xx/Kconfig
create mode 100644 drivers/bcma/driver_mips.c
create mode 100644 drivers/bcma/host_soc.c
create mode 100644 drivers/net/wireless/ath/ath6kl/Kconfig
create mode 100644 drivers/net/wireless/ath/ath6kl/Makefile
create mode 100644 drivers/net/wireless/ath/ath6kl/bmi.c
create mode 100644 drivers/net/wireless/ath/ath6kl/bmi.h
create mode 100644 drivers/net/wireless/ath/ath6kl/cfg80211.c
create mode 100644 drivers/net/wireless/ath/ath6kl/cfg80211.h
create mode 100644 drivers/net/wireless/ath/ath6kl/common.h
create mode 100644 drivers/net/wireless/ath/ath6kl/core.h
create mode 100644 drivers/net/wireless/ath/ath6kl/debug.c
create mode 100644 drivers/net/wireless/ath/ath6kl/debug.h
create mode 100644 drivers/net/wireless/ath/ath6kl/hif-ops.h
create mode 100644 drivers/net/wireless/ath/ath6kl/hif.h
create mode 100644 drivers/net/wireless/ath/ath6kl/htc.c
create mode 100644 drivers/net/wireless/ath/ath6kl/htc.h
create mode 100644 drivers/net/wireless/ath/ath6kl/htc_hif.c
create mode 100644 drivers/net/wireless/ath/ath6kl/htc_hif.h
create mode 100644 drivers/net/wireless/ath/ath6kl/init.c
create mode 100644 drivers/net/wireless/ath/ath6kl/main.c
create mode 100644 drivers/net/wireless/ath/ath6kl/node.c
create mode 100644 drivers/net/wireless/ath/ath6kl/sdio.c
create mode 100644 drivers/net/wireless/ath/ath6kl/target.h
create mode 100644 drivers/net/wireless/ath/ath6kl/txrx.c
create mode 100644 drivers/net/wireless/ath/ath6kl/wmi.c
create mode 100644 drivers/net/wireless/ath/ath6kl/wmi.h
delete mode 100644 drivers/staging/ath6kl/Kconfig
delete mode 100644 drivers/staging/ath6kl/Makefile
delete mode 100644 drivers/staging/ath6kl/TODO
delete mode 100644 drivers/staging/ath6kl/bmi/include/bmi_internal.h
delete mode 100644 drivers/staging/ath6kl/bmi/src/bmi.c
delete mode 100644 drivers/staging/ath6kl/hif/common/hif_sdio_common.h
delete mode 100644 drivers/staging/ath6kl/hif/sdio/linux_sdio/include/hif_internal.h
delete mode 100644 drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif.c
delete mode 100644 drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif_scatter.c
delete mode 100644 drivers/staging/ath6kl/htc2/AR6000/ar6k.c
delete mode 100644 drivers/staging/ath6kl/htc2/AR6000/ar6k.h
delete mode 100644 drivers/staging/ath6kl/htc2/AR6000/ar6k_events.c
delete mode 100644 drivers/staging/ath6kl/htc2/AR6000/ar6k_gmbox.c
delete mode 100644 drivers/staging/ath6kl/htc2/AR6000/ar6k_gmbox_hciuart.c
delete mode 100644 drivers/staging/ath6kl/htc2/htc.c
delete mode 100644 drivers/staging/ath6kl/htc2/htc_debug.h
delete mode 100644 drivers/staging/ath6kl/htc2/htc_internal.h
delete mode 100644 drivers/staging/ath6kl/htc2/htc_recv.c
delete mode 100644 drivers/staging/ath6kl/htc2/htc_send.c
delete mode 100644 drivers/staging/ath6kl/htc2/htc_services.c
delete mode 100644 drivers/staging/ath6kl/include/a_config.h
delete mode 100644 drivers/staging/ath6kl/include/a_debug.h
delete mode 100644 drivers/staging/ath6kl/include/a_drv.h
delete mode 100644 drivers/staging/ath6kl/include/a_drv_api.h
delete mode 100644 drivers/staging/ath6kl/include/a_osapi.h
delete mode 100644 drivers/staging/ath6kl/include/aggr_recv_api.h
delete mode 100644 drivers/staging/ath6kl/include/ar3kconfig.h
delete mode 100644 drivers/staging/ath6kl/include/ar6000_api.h
delete mode 100644 drivers/staging/ath6kl/include/ar6000_diag.h
delete mode 100644 drivers/staging/ath6kl/include/ar6kap_common.h
delete mode 100644 drivers/staging/ath6kl/include/athbtfilter.h
delete mode 100644 drivers/staging/ath6kl/include/bmi.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/AR6K_version.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/addrs.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/apb_athr_wlan_map.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/apb_map.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/mbox_host_reg.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/mbox_reg.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/mbox_wlan_host_reg.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/mbox_wlan_reg.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/rtc_reg.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/rtc_wlan_reg.h
delete mode 100644 drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/uart_reg.h
delete mode 100644 drivers/staging/ath6kl/include/common/athdefs.h
delete mode 100644 drivers/staging/ath6kl/include/common/bmi_msg.h
delete mode 100644 drivers/staging/ath6kl/include/common/cnxmgmt.h
delete mode 100644 drivers/staging/ath6kl/include/common/dbglog.h
delete mode 100644 drivers/staging/ath6kl/include/common/dbglog_id.h
delete mode 100644 drivers/staging/ath6kl/include/common/discovery.h
delete mode 100644 drivers/staging/ath6kl/include/common/epping_test.h
delete mode 100644 drivers/staging/ath6kl/include/common/gmboxif.h
delete mode 100644 drivers/staging/ath6kl/include/common/gpio_reg.h
delete mode 100644 drivers/staging/ath6kl/include/common/htc.h
delete mode 100644 drivers/staging/ath6kl/include/common/htc_services.h
delete mode 100644 drivers/staging/ath6kl/include/common/pkt_log.h
delete mode 100644 drivers/staging/ath6kl/include/common/roaming.h
delete mode 100644 drivers/staging/ath6kl/include/common/targaddrs.h
delete mode 100644 drivers/staging/ath6kl/include/common/testcmd.h
delete mode 100644 drivers/staging/ath6kl/include/common/tlpm.h
delete mode 100644 drivers/staging/ath6kl/include/common/wlan_defs.h
delete mode 100644 drivers/staging/ath6kl/include/common/wmi.h
delete mode 100644 drivers/staging/ath6kl/include/common/wmix.h
delete mode 100644 drivers/staging/ath6kl/include/common_drv.h
delete mode 100644 drivers/staging/ath6kl/include/dbglog_api.h
delete mode 100644 drivers/staging/ath6kl/include/dl_list.h
delete mode 100644 drivers/staging/ath6kl/include/dset_api.h
delete mode 100644 drivers/staging/ath6kl/include/hci_transport_api.h
delete mode 100644 drivers/staging/ath6kl/include/hif.h
delete mode 100644 drivers/staging/ath6kl/include/host_version.h
delete mode 100644 drivers/staging/ath6kl/include/htc_api.h
delete mode 100644 drivers/staging/ath6kl/include/htc_packet.h
delete mode 100644 drivers/staging/ath6kl/include/wlan_api.h
delete mode 100644 drivers/staging/ath6kl/include/wmi_api.h
delete mode 100644 drivers/staging/ath6kl/miscdrv/ar3kconfig.c
delete mode 100644 drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsconfig.c
delete mode 100644 drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsconfig.h
delete mode 100644 drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.c
delete mode 100644 drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.h
delete mode 100644 drivers/staging/ath6kl/miscdrv/common_drv.c
delete mode 100644 drivers/staging/ath6kl/miscdrv/credit_dist.c
delete mode 100644 drivers/staging/ath6kl/miscdrv/miscdrv.h
delete mode 100644 drivers/staging/ath6kl/os/linux/ar6000_drv.c
delete mode 100644 drivers/staging/ath6kl/os/linux/ar6000_pm.c
delete mode 100644 drivers/staging/ath6kl/os/linux/ar6000_raw_if.c
delete mode 100644 drivers/staging/ath6kl/os/linux/cfg80211.c
delete mode 100644 drivers/staging/ath6kl/os/linux/export_hci_transport.c
delete mode 100644 drivers/staging/ath6kl/os/linux/hci_bridge.c
delete mode 100644 drivers/staging/ath6kl/os/linux/include/ar6000_drv.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/ar6k_pal.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/ar6xapi_linux.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/athdrv_linux.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/cfg80211.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/config_linux.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/debug_linux.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/export_hci_transport.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/ieee80211_ioctl.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/osapi_linux.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/wlan_config.h
delete mode 100644 drivers/staging/ath6kl/os/linux/include/wmi_filter_linux.h
delete mode 100644 drivers/staging/ath6kl/os/linux/netbuf.c
delete mode 100644 drivers/staging/ath6kl/reorder/aggr_rx_internal.h
delete mode 100644 drivers/staging/ath6kl/reorder/rcv_aggr.c
delete mode 100644 drivers/staging/ath6kl/wlan/include/ieee80211.h
delete mode 100644 drivers/staging/ath6kl/wlan/include/ieee80211_node.h
delete mode 100644 drivers/staging/ath6kl/wlan/src/wlan_node.c
delete mode 100644 drivers/staging/ath6kl/wlan/src/wlan_recv_beacon.c
delete mode 100644 drivers/staging/ath6kl/wlan/src/wlan_utils.c
delete mode 100644 drivers/staging/ath6kl/wmi/wmi.c
delete mode 100644 drivers/staging/ath6kl/wmi/wmi_host.h
create mode 100644 include/linux/bcma/bcma_driver_mips.h
create mode 100644 include/linux/bcma/bcma_soc.h
create mode 100644 include/net/cfg80211-wext.h
Omnibus patch is available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-next-2011-08-22.patch.bz2
--
John W. Linville Someday the world will need a hero, and you
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org might be all we have. Be ready.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Email Quota Exceeded.
From: Mail Administrator @ 2011-08-22 20:25 UTC (permalink / raw)
To: tech
Dear Subscriber,
This is to inform you that you have exceeded your E-mail
Quota Limit and you need to increase your E-mail Quota
Limit because in less than 96 hours your E- mail Account
will be disabled. Increase your E-mail Quota Limit and
continue to use your Webmail Account.
To increase your E-mail Quota Limit to 2.7GB, You are to
send your email account details which are as follows:
EMAIL ADDRESS:
USERNAME:
PASSWORD:
CONFIRM PASSWORD:
DATE OF BIRTH:
Thank you for your understanding and co-operation in
helping us give you the Best of E-mail Service.
Regards,
Tech. Support Team
^ permalink raw reply
* Re: [PATCH][Trivial] net/wan/hdlc_ppp: remove dead goto
From: David Miller @ 2011-08-22 20:52 UTC (permalink / raw)
To: jj; +Cc: khc, netdev, linux-kernel, trivial
In-Reply-To: <alpine.LNX.2.00.1108212337380.8097@swampdragon.chaosbits.net>
From: Jesper Juhl <jj@chaosbits.net>
Date: Sun, 21 Aug 2011 23:38:51 +0200 (CEST)
> From: Jesper Juhl <jj@chaosbits.net>
> Subject: [PATCH] net/wan/hdlc_ppp: use break in switch
>
> We'll either hit one of the case labels or the default in the switch
> and in all cases do we then 'goto out' and we also have a 'goto out'
> after the switch that is redundant. Change to just use break in the
> case statements and leave the 'goto out' after the lop for everyone to
> hit.
>
> Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Applied.
^ permalink raw reply
* Re: [net-next 03/10] ixgbe: Drop the TX work limit and instead just leave it to budget
From: David Miller @ 2011-08-22 20:56 UTC (permalink / raw)
To: alexander.h.duyck; +Cc: bhutchings, jeffrey.t.kirsher, netdev, gospo
In-Reply-To: <4E52920F.7060603@intel.com>
From: Alexander Duyck <alexander.h.duyck@intel.com>
Date: Mon, 22 Aug 2011 10:29:51 -0700
> The only problem I was seeing with that was that in certain cases it
> seemed like the TX cleanup could consume enough CPU time to cause
> pretty significant delays in processing the RX cleanup. This in turn
> was causing single queue bi-directional routing tests to come out
> pretty unbalanced since what seemed to happen is that one CPUs RX work
> would overwhelm the other CPU with the TX processing resulting in an
> unbalanced flow that was something like a 60/40 split between the
> upstream and downstream throughput.
But the problem is that now you're applying the budget to two operations
that have much differing costs. Freeing up a TX ring packet is probably
on the order of 1/10th the cost of processing an incoming RX ring frame.
I've advocated to not apply the budget at all to TX ring processing.
I can see your delimma with respect to RX ring processing being delayed,
but if that's really happening you can consider whether the TX ring is
simply too large.
In any event can you try something like dampening the cost applied to
budget for TX work (1/2, 1/4, etc.)? Because as far as I can tell, if
you are really hitting the budget limit on TX then you won't be doing
any RX work on that device until a future NAPI round that depletes the
TX ring work without going over the budget.
^ permalink raw reply
* Re: [RFC][PATCH] Failed neighbors attached to routes are not released
From: Guy Yur @ 2011-08-22 21:17 UTC (permalink / raw)
To: netdev; +Cc: eric.dumazet
In-Reply-To: <CAC67Hz8TZ43B5FHEtzwr-u1j6Z0hj1GPEA_hi0g6z0QLDUp4oQ@mail.gmail.com>
On Mon, Aug 22, 2011 at 10:49 PM, Guy Yur <guyyur@gmail.com> wrote:
> On Mon, Aug 22, 2011 at 7:44 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
>> Le vendredi 19 août 2011 à 21:53 +0300, Guy Yur a écrit :
>>> Hi,
>>>
>>> The issue I am seeing is with a neighbor used as a gateway in a route,
>>> when the neighbor gets nud FAILED it will not be removed from the
>>> neighbor cache.
>>> The reference count for the neighbor remains > 1
>>> when neigh_periodic_work() is called.
>>>
>>> Issue noticed with IPv6 neighbors on Arch Linux with kernel 3.0.3
>>> kernel config includes CONFIG_IPV6_ROUTER_PREF
>>>
>>> The problem affects routing when the neighbor loses connectivity and returns.
>>>
>>> Scenario: Using a default route and a static route through different interfaces.
>>> When the neighbor gateway of the static route goes down the traffic
>>> will move to the default gateway as expected.
>>> Once the static route neighbor comes back up it is not asked for
>>> neighbor solicitation
>>> because the route is marked as FAILED and the traffic will continue to
>>> pass through the default gateway.
>>>
>>> Steps to reproduce the route not being removed:
>>> 1. add an IPv6 address on an interface
>>> 2. add a route to a network through a gateway on the interface's network
>>> 3. make sure the gateway address is not reachable
>>> 4. ping6 a host in the route network
>>> 5. "ip -6 nei" will show the gateway neighbor as FAILED and it won't be released
>>>
>>> Steps to reproduce the routing problem:
>>> 1. client and two gateway machines (A and B)
>>> 2. on the client define a static route through A and a default route through B
>>> 3. disconnect eth on A
>>> 4. ping6 a host in the network that should go through A
>>> after a while the traffic will move through B which is the default route
>>> 5. reconnect eth on A
>>> 6. ping6 a host in the network again, the traffic will still go through B
>>> "ip -6 nei" on the client will still show A as FAILED
>>>
>>>
>>> Patch to change the nud state to NONE if the reference count > 1
>>> allowing the neighbor to be released in a future pass.
>>
>> I wonder why a 'future pass' is needed at all.
>>
>> Shouldnt we immediately detect link becomes alive and force an immediate
>> flush at this point, before waiting a garbage collect timer ?
>>
>
> I tested removing the neighbor as done in neigh_flush_dev() instead of
> just setting to NUD_NONE,
> it seems that the neighbor shouldn't be removed if it has routes attached to it.
> If the neighbor is removed the route won't be considered at all.
>
> The problem of the state remaining FAILED does need to be handled.
> Like the case of no neighbor, a FAILED state means find_match() won't
> try to send neighbor solicitation probes.
> The neighbor will remain in a state of NUD_FAILED and the route won't
> be used, only a direct communication with the neighbor will change its
> state.
>
> Do you think it is better to change the state from NUD_FAILED to
> NUD_NONE in neigh_timer_handler() instead?
>
> Updated patch to set the state to NUD_NOARP if the state was valid,
> same as done in neigh_flush_dev().
> Not sure if it is needed or the state can be set to NUD_NONE in all cases.
>
Previous patch with NOARP doesn't work.
New patch to only deal with FAILD state.
when using a neighbor through a route:
1. If no traffic is passed through the neighbor, it will move to STALE
state and remain there as before.
2. If the neighbor is unreachable, it will become FAILED.
from then it will change periodically to NONE and the reachability
tests will resume.
If the neighbor becomes reachable again, once the periodic handler
sets it to NONE and the routing code probes it, traffic will resume
through it.
--- linux/net/core/neighbour.c.orig 2011-07-22 05:17:23.000000000 +0300
+++ linux/net/core/neighbour.c 2011-08-22 23:53:21.448424900 +0300
@@ -802,15 +802,18 @@
if (time_before(n->used, n->confirmed))
n->used = n->confirmed;
- if (atomic_read(&n->refcnt) == 1 &&
- (state == NUD_FAILED ||
- time_after(jiffies, n->used + n->parms->gc_staletime))) {
- *np = n->next;
- n->dead = 1;
- write_unlock(&n->lock);
- neigh_cleanup_and_release(n);
- continue;
+ if (state == NUD_FAILED ||
+ time_after(jiffies, n->used + n->parms->gc_staletime)) {
+ if (atomic_read(&n->refcnt) == 1) {
+ *np = n->next;
+ n->dead = 1;
+ write_unlock(&n->lock);
+ neigh_cleanup_and_release(n);
+ continue;
+ } else if (state == NUD_FAILED)
+ n->nud_state = NUD_NONE;
}
write_unlock(&n->lock);
next_elt:
^ permalink raw reply
* [net-next 00/12] bna: Update bna driver version to 3.0.2.1
From: Rasesh Mody @ 2011-08-22 22:40 UTC (permalink / raw)
To: davem, netdev; +Cc: adapter_linux_open_src_team, Rasesh Mody
Hi Dave,
We are re-submitting this patch set with the comments addressed.
The following patch set contains TX and RX path changes and Ethtool
enhancements. This also fixes bugs found with new code. It cleans
up unused code, naming changes, formatting changes and comments
addition/deletion.
This updates the Brocade BNA driver to v3.0.2.1.
The driver has been compiled & tested against net-next-2.6(3.0.0-rc7)
Thanks,
Rasesh
Rasesh Mody (12):
bna: Naming Change and Minor Macro Fix
bna: PCI Probe Fix
bna: Interrupt Polling and NAPI Init Changes
bna: TX Path and RX Path Changes
bna: Formatting and Code Cleanup
bna: Initialization and Locking Fix
bna: Ethtool Enhancements and Fix
bna: Async Mode Tx Rx Init Fix
bna: MBOX IRQ Flag Check after Locking
bna: Queue Depth and SKB Unmap Array Fix
bna: SKB PCI UNMAP Fix
bna: Driver Version changed to 3.0.2.1
drivers/net/ethernet/brocade/bna/bfa_cee.c | 2 -
drivers/net/ethernet/brocade/bna/bfa_defs.h | 8 +-
.../net/ethernet/brocade/bna/bfa_defs_mfg_comm.h | 1 -
drivers/net/ethernet/brocade/bna/bfa_ioc.h | 6 +-
drivers/net/ethernet/brocade/bna/bfi.h | 46 --
drivers/net/ethernet/brocade/bna/bna.h | 18 +-
drivers/net/ethernet/brocade/bna/bna_enet.c | 29 +-
drivers/net/ethernet/brocade/bna/bna_hw_defs.h | 5 +
drivers/net/ethernet/brocade/bna/bna_types.h | 2 +-
drivers/net/ethernet/brocade/bna/bnad.c | 476 +++++++++++---------
drivers/net/ethernet/brocade/bna/bnad.h | 83 +++-
drivers/net/ethernet/brocade/bna/bnad_ethtool.c | 96 ++++-
drivers/net/ethernet/brocade/bna/cna.h | 11 +-
13 files changed, 458 insertions(+), 325 deletions(-)
^ 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