Skip to contentSkip to conversation

ath9k: several fixes ported to 2.6.27

PATCH In review Luis R. Rodriguez 6 participants 26 messages Dec 2, 2008 – Dec 8, 2008 3 messages not in the archive Networking drivers (wireless)

lore
Share & tools
lore
#0 lore raw

cover ath9k: several fixes ported to 2.6.27

This fixes a few issues seen on MacBook Pros:

http://bugzilla.kernel.org/show_bug.cgi?id=11811

I've ported them to 2.6.27 to help with them being applied sooner. I've tried to keep them as small as possible. I don't have the ports for 2.6.28 though I think John will be sending them soon through his pending-fixes branch.

These are already applied on wireless-testing.

Luis

#1 lore raw

PATCH 1/1 ath9k: Fix SW-IOMMU bounce buffer starvation

This should fix the SW-IOMMU bounce buffer starvation seen ok kernel.org bugzilla 11811:

http://bugzilla.kernel.org/show_bug.cgi?id=11811

Users on MacBook Pro 3.1/MacBook v2 would see something like:

DMA: Out of SW-IOMMU space for 4224 bytes at device 0000:0b:00.0

Unfortunately its only easy to trigger on MacBook Pro 3.1/MacBook v2 so far so its difficult to debug (even with swiotlb=force).

We were pci_unmap_single()'ing less bytes than what we called for with pci_map_single() and as such we were starving the swiotlb from its 64MB amount of bounce buffers. We remain consistent and now always use sc->rxbufsize for RX. While at it we update the beacon DMA maps as well to only use the data portion of the skb, previous to this we were pci_map_single()'ing more data for beaconing than what we tell the hardware it can use, therefore pushing more iotlb abuse.

Still not sure why this is so easily triggerable on MacBook Pro 3.1, it may be the hardware configuration tends to use more memory > 3GB mark for DMA.

---
 drivers/net/wireless/ath9k/recv.c |    8 +++-----
 1 files changed, 3 insertions(+), 5 deletions(-)
drivers/net/wireless/ath9k/recv.c +3 -5
index 20ddb7a..4d23827 100644
@@ -1011,7 +1011,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
 
 		pci_dma_sync_single_for_cpu(sc->pdev,
 					    bf->bf_buf_addr,
-					    skb_tailroom(skb),
+					    sc->sc_rxbufsize,
 					    PCI_DMA_FROMDEVICE);
 		pci_unmap_single(sc->pdev,
 				 bf->bf_buf_addr,
@@ -1303,8 +1303,7 @@ dma_addr_t ath_skb_map_single(struct ath_softc *sc,
 	 * NB: do NOT use skb->len, which is 0 on initialization.
 	 * Use skb's entire data area instead.
 	 */
-	*pa = pci_map_single(sc->pdev, skb->data,
-		skb_end_pointer(skb) - skb->head, direction);
+	*pa = pci_map_single(sc->pdev, skb->data, sc->sc_rxbufsize, direction);
 	return *pa;
 }
 
@@ -1314,6 +1313,5 @@ void ath_skb_unmap_single(struct ath_softc *sc,
 			  dma_addr_t *pa)
 {
 	/* Unmap skb's entire data area */
-	pci_unmap_single(sc->pdev, *pa,
-		skb_end_pointer(skb) - skb->head, direction);
+	pci_unmap_single(sc->pdev, *pa, sc->sc_rxbufsize, direction);
 }
Signature · 1 line
1.5.6.rc2.15.g457bb.dirty
#2 lore raw

PATCH 1/1 ath9k: correct expected max RX buffer size

We should only tell the hardware its capable of DMA'ing to us only what we asked dev_alloc_skb(). Prior to this it is possible a large RX'd frame could have corrupted DMA data but for us but we were saved only because we were previously also pci_map_single()'ing the same large value. The issue prior to this though was we were unmapping a smaller amount which the prior DMA patch fixed.

---
 drivers/net/wireless/ath9k/recv.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/wireless/ath9k/recv.c +1 -1
index 4d23827..0941589 100644
@@ -52,7 +52,7 @@ static void ath_rx_buf_link(struct ath_softc *sc, struct ath_buf *bf)
 	/* setup rx descriptors */
 	ath9k_hw_setuprxdesc(ah,
 			     ds,
-			     skb_tailroom(skb),   /* buffer size */
+			     sc->sc_rxbufsize,
 			     0);
 
 	if (sc->sc_rxlink == NULL)
Signature · 1 line
1.5.6.rc2.15.g457bb.dirty
#3 lore raw

PATCH 1/3 ath9k: Handle -ENOMEM on RX gracefully

We would get an oops on RX on -ENOMEM by passing NULL to the hardware on ath_rx_buf_link(). The oops would look something like this:

ath_rx_tasklet
...

RIP: ath_rx_buf_link

We correct this by handling the allocation for the next skb we will put in our RX tail directly on the ath_rx_tasklet() *prior* to sending up the last hardware processed skb. If we run out of memory this gauranteees we have skbs to work with while it simply drops new received frames.

---
 drivers/net/wireless/ath9k/recv.c |   18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)
drivers/net/wireless/ath9k/recv.c +14 -4
index 0941589..a4f92b2 100644
@@ -441,18 +441,16 @@ static void ath_rx_requeue(struct ath_softc *sc, struct sk_buff *skb)
  */
 static int ath_rx_indicate(struct ath_softc *sc,
 			   struct sk_buff *skb,
+			   struct sk_buff *nskb,
 			   struct ath_recv_status *status,
 			   u16 keyix)
 {
 	struct ath_buf *bf = ATH_RX_CONTEXT(skb)->ctx_rxbuf;
-	struct sk_buff *nskb;
 	int type;
 
 	/* indicate frame to the stack, which will free the old skb. */
 	type = ath__rx_indicate(sc, skb, status, keyix);
 
-	/* allocate a new skb and queue it to for H/W processing */
-	nskb = ath_rxbuf_alloc(sc, sc->sc_rxbufsize);
 	if (nskb != NULL) {
 		bf->bf_mpdu = nskb;
 		bf->bf_buf_addr = ath_skb_map_single(sc,
@@ -741,6 +739,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
 	struct ath_desc *ds;
 	struct ieee80211_hdr *hdr;
 	struct sk_buff *skb = NULL;
+	struct sk_buff *nskb = NULL;
 	struct ath_recv_status rx_status;
 	struct ath_hal *ah = sc->sc_ah;
 	int type, rx_processed = 0;
@@ -963,6 +962,17 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
 		 */
 		if (sc->sc_rxbufsize < ds->ds_rxstat.rs_datalen)
 			goto rx_next;
+
+		/* allocate a new skb and queue it to for H/W processing */
+		nskb = ath_rxbuf_alloc(sc, sc->sc_rxbufsize);
+
+		/* Diregard current RX'd frame and reuse the old skb */
+		if (!nskb) {
+			list_move_tail(&bf->list, &sc->sc_rxbuf);
+			ath_rx_buf_link(sc, bf);
+			goto rx_next;
+		}
+
 		/*
 		 * Sync and unmap the frame.  At this point we're
 		 * committed to passing the sk_buff somewhere so
@@ -1052,7 +1062,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
 
 		/* Pass frames up to the stack. */
 
-		type = ath_rx_indicate(sc, skb,
+		type = ath_rx_indicate(sc, skb, nskb,
 			&rx_status, ds->ds_rxstat.rs_keyix);
 
 		/*
Signature · 1 line
1.5.6.rc2.15.g457bb.dirty
#4 lore raw

Re: [stable] [PATCH 1/3] ath9k: Handle -ENOMEM on RX gracefully

I don't see this patch upstream in Linus's tree. Am I just missing it and if so, do you know the git commit id?

thanks,

greg k-h

Quoted 86 lines · Luis R. Rodriguez

We would get an oops on RX on -ENOMEM by passing NULL to the hardware on ath_rx_buf_link(). The oops would look something like this:

ath_rx_tasklet
...

RIP: ath_rx_buf_link

We correct this by handling the allocation for the next skb we will put in our RX tail directly on the ath_rx_tasklet() *prior* to sending up the last hardware processed skb. If we run out of memory this gauranteees we have skbs to work with while it simply drops new received frames.

---
 drivers/net/wireless/ath9k/recv.c |   18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)
drivers/net/wireless/ath9k/recv.c +14 -4
index 0941589..a4f92b2 100644
@@ -441,18 +441,16 @@ static void ath_rx_requeue(struct ath_softc *sc, struct sk_buff *skb)
  */
 static int ath_rx_indicate(struct ath_softc *sc,
 			   struct sk_buff *skb,
+			   struct sk_buff *nskb,
 			   struct ath_recv_status *status,
 			   u16 keyix)
 {
 	struct ath_buf *bf = ATH_RX_CONTEXT(skb)->ctx_rxbuf;
-	struct sk_buff *nskb;
 	int type;
 
 	/* indicate frame to the stack, which will free the old skb. */
 	type = ath__rx_indicate(sc, skb, status, keyix);
 
-	/* allocate a new skb and queue it to for H/W processing */
-	nskb = ath_rxbuf_alloc(sc, sc->sc_rxbufsize);
 	if (nskb != NULL) {
 		bf->bf_mpdu = nskb;
 		bf->bf_buf_addr = ath_skb_map_single(sc,
@@ -741,6 +739,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
 	struct ath_desc *ds;
 	struct ieee80211_hdr *hdr;
 	struct sk_buff *skb = NULL;
+	struct sk_buff *nskb = NULL;
 	struct ath_recv_status rx_status;
 	struct ath_hal *ah = sc->sc_ah;
 	int type, rx_processed = 0;
@@ -963,6 +962,17 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
 		 */
 		if (sc->sc_rxbufsize < ds->ds_rxstat.rs_datalen)
 			goto rx_next;
+
+		/* allocate a new skb and queue it to for H/W processing */
+		nskb = ath_rxbuf_alloc(sc, sc->sc_rxbufsize);
+
+		/* Diregard current RX'd frame and reuse the old skb */
+		if (!nskb) {
+			list_move_tail(&bf->list, &sc->sc_rxbuf);
+			ath_rx_buf_link(sc, bf);
+			goto rx_next;
+		}
+
 		/*
 		 * Sync and unmap the frame.  At this point we're
 		 * committed to passing the sk_buff somewhere so
@@ -1052,7 +1062,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush)
 
 		/* Pass frames up to the stack. */
 
-		type = ath_rx_indicate(sc, skb,
+		type = ath_rx_indicate(sc, skb, nskb,
 			&rx_status, ds->ds_rxstat.rs_keyix);
 
 		/*
Signature · 6 lines
1.5.6.rc2.15.g457bb.dirty

_______________________________________________
stable mailing list
stable at linux.kernel.org
http://linux.kernel.org/mailman/listinfo/stable
#5 lore raw

Re: [stable] [PATCH 1/3] ath9k: Handle -ENOMEM on RX gracefully

Quoted 2 lines · Greg KH

I don't see this patch upstream in Linus's tree. Am I just missing it and if so, do you know the git commit id?

Nope sorry, John has yet to send his pending-fixes branch to davem and so forth, which would contain it AFAICT. Please correct me if I'm wrong John.

Luis

#6 lore raw

Re: [stable] [PATCH 1/3] ath9k: Handle -ENOMEM on RX gracefully

Quoted 7 lines · Luis R. Rodriguez
Quoted 2 lines · Greg KH

I don't see this patch upstream in Linus's tree. Am I just missing it and if so, do you know the git commit id?

Nope sorry, John has yet to send his pending-fixes branch to davem and so forth, which would contain it AFAICT. Please correct me if I'm wrong John.

It has been sent, and Dave sent his pull request to Linus today (or maybe yesterday). I'll try to dig-up the commit IDs tomorrow.

John

Signature · 2 lines
John W. Linville		Linux should be at the core
linville at tuxdriver.com			of your literate lifestyle.
#7 lore raw

Re: [ath9k-devel] [stable] [PATCH 1/3] ath9k: Handle -ENOMEM on RX gracefully

Quoted 11 lines · John W. Linville
Quoted 7 lines · Luis R. Rodriguez
Quoted 2 lines · Greg KH

I don't see this patch upstream in Linus's tree. Am I just missing it and if so, do you know the git commit id?

Nope sorry, John has yet to send his pending-fixes branch to davem and so forth, which would contain it AFAICT. Please correct me if I'm wrong John.

It has been sent, and Dave sent his pull request to Linus today (or maybe yesterday). I'll try to dig-up the commit IDs tomorrow.

Greg, I see two of these patches in 2.6.27-stable review patch but the one in this subject was not applied, any specific reason or was it just missed?

Luis

#8 lore raw

Re: [ath9k-devel] [stable] [PATCH 1/3] ath9k: Handle -ENOMEM on RX gracefully

Quoted 10 lines · Luis R. Rodriguez
Quoted 9 lines · John W. Linville
Quoted 7 lines · Luis R. Rodriguez
Quoted 2 lines · Greg KH

I don't see this patch upstream in Linus's tree. Am I just missing it and if so, do you know the git commit id?

Nope sorry, John has yet to send his pending-fixes branch to davem and so forth, which would contain it AFAICT. Please correct me if I'm wrong John.

Quoted 6 lines
Quoted 2 lines

It has been sent, and Dave sent his pull request to Linus today (or maybe yesterday). I'll try to dig-up the commit IDs tomorrow.

Greg, I see two of these patches in 2.6.27-stable review patch but the one in this subject was not applied, any specific reason or was it just missed?

It was not applied because it was not yet in Linus's tree, which is a requirement for it to go into the 2.6.27-stable tree.

thanks,

greg k-h

#9 lore raw

Re: [stable] [PATCH 1/3] ath9k: Handle -ENOMEM on RX gracefully

In reply to John W. Linville
Quoted 11 lines · John W. Linville
Quoted 7 lines · Luis R. Rodriguez
Quoted 2 lines · Greg KH

I don't see this patch upstream in Linus's tree. Am I just missing it and if so, do you know the git commit id?

Nope sorry, John has yet to send his pending-fixes branch to davem and so forth, which would contain it AFAICT. Please correct me if I'm wrong John.

It has been sent, and Dave sent his pull request to Linus today (or maybe yesterday). I'll try to dig-up the commit IDs tomorrow.

Hmmm...I seem to have sent this to -next instead. Since it fixes an Oops, I guess I can requeue for 2.6.28.

John

Signature · 2 lines
John W. Linville		Linux should be at the core
linville at tuxdriver.com			of your literate lifestyle.
#10 lore raw

Re: [ath9k-devel] [stable] [PATCH 1/3] ath9k: Handle -ENOMEM on RX gracefully

Quoted 10 lines · John W. Linville
Quoted 9 lines · John W. Linville
Quoted 7 lines · Luis R. Rodriguez
Quoted 2 lines · Greg KH

I don't see this patch upstream in Linus's tree. Am I just missing it and if so, do you know the git commit id?

Nope sorry, John has yet to send his pending-fixes branch to davem and so forth, which would contain it AFAICT. Please correct me if I'm wrong John.

Quoted 5 lines
Quoted 2 lines

It has been sent, and Dave sent his pull request to Linus today (or maybe yesterday). I'll try to dig-up the commit IDs tomorrow.

Hmmm...I seem to have sent this to -next instead. Since it fixes an Oops, I guess I can requeue for 2.6.28.

Pretty please :)

Luis

#11 lore raw

PATCH 1/3 ath9k: Handle -ENOMEM on RX gracefully

Luis,
I tried to respond to your comment in bug 12110 but do not have a id yet.

Does this patch fix this bug?

Here is my response

I have the same problem but with wireless testing on a 2.6.28-rc6-wl kernel. I can run for hours if I do not use the wireless heavily.
But will crash within 10mins if I use NX.
(I have the NX parm turned on in the kernel)
I also get the same symptoms re a ping that will just stop/start, directly before a crash. Also it starts to use my swap file. I NEVER use swap normally.
Would you like me to apply the same patch and see if I can get some message?

Can I get a patch for 2.6.28-rc6-wl ?

Wireless Statistics
Sent :891261
TX Packets Dropped :21
Received :878290
RX Packets Dropped :1576
Errors :3531

Brian

#12 lore raw

PATCH 1/3 ath9k: Handle -ENOMEM on RX gracefully

Quoted 19 lines · Brian

Luis,
I tried to respond to your comment in bug 12110 but do not have a id yet.

Does this patch fix this bug?

Here is my response

I have the same problem but with wireless testing on a 2.6.28-rc6-wl kernel. I can run for hours if I do not use the wireless heavily.
But will crash within 10mins if I use NX.
(I have the NX parm turned on in the kernel)
I also get the same symptoms re a ping that will just stop/start, directly before a crash. Also it starts to use my swap file. I NEVER use swap normally.
Would you like me to apply the same patch and see if I can get some message?

Quoted 1 line

Can I get a patch for 2.6.28-rc6-wl ?

wireless-testing is now on 2.6.28-rc7, please do a git pull and recompile and test that. It has some critical fixes for ath9k.

Luis

#13 lore raw

[ath9k-devel] 2.6.28-rc7-wl

Luis,

Quoted 4 lines

wireless-testing is now on 2.6.28-rc7, please do a git pull and recompile and test that. It has some critical fixes for ath9k.

Downloaded and installed, I had done a git-pull a few hours before and it was not there:)

I set up my system with NX running and was waiting to be up 2hours. Unfortunately it only made 1:50.
Still this is bundles better than the 10mins I was getting.

Some observations:

1) wpa_supplicant no longer chews up cpu/mem. It started and then did nothing from then on. It used to be in the top 5 on htop.

2) I used to get a huge number of receive errors
This is what I started with Errors :3708
After an hour I had Errors :3746

3) Towards the end the memory usage was creeping, slightly, up but no where near the swap file.

As suggested by others I did have a console running, but I was monitoring htop(to see if it started to use the swap) when it went. So I have no further diagnostics.

When I did the compile it came up and asked me if I wanted the new diagnostic facility for the driver and I just pressed enter. Happy to go back and recompile(or can I turn it on).

If I turn it on do you have a methodology to use it?

Thanks for the great improvement,
Brian

#14 lore raw

[ath9k-devel] 2.6.28-rc7-wl

Quoted 4 lines · Brian

Luis,

Quoted 1 line
Quoted 8 lines
Quoted 3 lines

wireless-testing is now on 2.6.28-rc7, please do a git pull and recompile and test that. It has some critical fixes for ath9k.

Downloaded and installed, I had done a git-pull a few hours before and it was not there:)

I set up my system with NX running and was waiting to be up 2hours. Unfortunately it only made 1:50.

What do you mean Brian, did it crash? What happened?

Luis

A message that is not in the archive (sent off-list or not yet received): [email protected]

A message that is not in the archive (sent off-list or not yet received): 20081204224300.GN5970@tesla

A message that is not in the archive (sent off-list or not yet received): [email protected]

#18 lore raw

[ath9k-devel] 2.6.28-rc7-wl

Quoted 32 lines · Brian

Luis,

Quoted 6 lines
Quoted 4 lines

So I think the driver could be fine, it could be application specific. Will also do a search of the NX site and see if they have any problems.

Will let you know how I go.

I see.. What is NX?

http://www.nomachine.com/
NX is really great and is easily the best remote control software. While I can get by with krdc I want to use NX if I can.

We run tests against ath9k over hours too and

Quoted 7 lines

I don't think we've seen this memory hog issue. But if your userspace application is hogging up application your kernel shoulod not panic, unless of course some -ENOMEM as part of your drivers is not being handled correctly. But the patches merged recently actually handle this for ath9k :) I at least have tested it with mem=200 and even using the swiotlb.

Yes I saw that you had included the -ENOMEM fix, so I was very hopeful that the problem would go away.
I must say the difference between rc6 and rc7 is really significant. Things are quicker and more stable for all the normal operations. I just do not see what is different about NX, I might try running wireshark on it. If you could fire up NX and it fails then at least we could say that it is not specific to my machine.
I should also point out that when researching this problem on the web I found that hundreds of people were having the same freezing problem.

Quoted 4 lines

My krdc has been running for 30mins with no problems, but the memory is going up.

Back in a bit

So do some other test -- run bitorrent, or iperf. That should rule out ath9k.

To test if its NX try testing it over a wired ethernet connection.

Luis

#19 lore raw

[ath9k-devel] 2.6.28-rc7-wl

Luis,

Quoted 3 lines

So do some other test -- run bitorrent, or iperf. That should rule out ath9k.

Yes I was trying that, in the process of setting up ftp.

Quoted 2 lines

To test if its NX try testing it over a wired ethernet connection.

Yes, I should have thought of that, however I have problems with my eth0 port.

Anyway while looking around the nomachine site I found that my version of NX was pretty old. So I downloaded the latest.

Some observations

1) I have been up for over an hour on NX
2) The number of errors being generated are a LOT less, I am collecting stats.
3) I have changed the bandwidth back to 20mhz so I am only getting 54Mbs at the moment.

So the main reason I upgraded was because I felt that NX was causing the large number of TX/RX errors. I think has proved correct, but I will not know for sure until I put the bandwidth back up to 40mhz.

If this proves to be correct then I think the driver has a problem as there is no way that errors should cause such a hard lockup. So my question is how does the driver handle the fact that packets go missing? Or is this problem handled further up in the tcp stack.

Brian

#20 lore raw

[ath9k-devel] 2.6.28-rc7-wl

Quoted 13 lines · Brian

Luis,

Quoted 3 lines

So do some other test -- run bitorrent, or iperf. That should rule out ath9k.

Yes I was trying that, in the process of setting up ftp.

Quoted 2 lines

To test if its NX try testing it over a wired ethernet connection.

Yes, I should have thought of that, however I have problems with my eth0 port.

Quoted 6 lines

Anyway while looking around the nomachine site I found that my version of NX was pretty old. So I downloaded the latest.

Some observations

1) I have been up for over an hour on NX

Lets stop talking about NX.

Quoted 4 lines

2) The number of errors being generated are a LOT less, I am collecting stats.
3) I have changed the bandwidth back to 20mhz so I am only getting 54Mbs at the moment.

You should be able to get more than 54Mbps on HT20 (802.11n HT20), the theoretical max for HT20 with short guard interval is 144 Mbit/s, the theoretical max for HT20 with long guard interval is 130 Mbps/s -- using only 2 stream. Your card should be 2-stream. For details of how to get this information please see:

http://wireless.kernel.org/en/developers/Documentation/ieee80211/802.11n#MCSRates

This doesn't mean you should get these, but it means the card can use these target rates for TX / RX, the actual throughput values seen will be different but can be higher than 54Mbps. Just to give you an idea with 802.11g I usually get highest about 24Mbps in practice.

Please run tests with UDP and TCP with iperf. You can do with by setting an iperf server with a station connected via Gibabit ethernet on the AP and then having the iperf client send data to the station. Do this then the other way around, having the iperf server on the wireless station and have the station send data to you.

Right now we're running some interoperability tests with different APs so we should hopefully start seeing issues perhaps users are reporting that we are not. What AP do you have?

Quoted 3 lines

So the main reason I upgraded was because I felt that NX was causing the large number of TX/RX errors. I think has proved correct, but I will not know for sure until I put the bandwidth back up to 40mhz.

It seems easier to run long tests with things like iperf no?

Quoted 4 lines

If this proves to be correct then I think the driver has a problem as there is no way that errors should cause such a hard lockup. So my question is how does the driver handle the fact that packets go missing?

You mean that didn't get on the other end? It retransmits.

Quoted 1 line

Or is this problem handled further up in the tcp stack.

If the wireless frame didn't get to the AP the AP doesn't send an ACK and the STA retries. If using 802.11n AMPDU (the usual case for aggregation) then the STA will issue a block ack request, send data the AP sends a Block ACK in which it has a bitmap which indicates which frames went through and which never reached the AP. The STA then retransmits the frames that the bitmap indicates failed.

TCP is upper layer, so that's separate, but you can still have TCP retransmissions.

Luis

#21 lore raw

[ath9k-devel] 2.6.28-rc7-wl

Luis,

Quoted 3 lines

Lets stop talking about NX.

OK, just using that because I knew it was braking things.

Quoted 11 lines
Quoted 4 lines

2) The number of errors being generated are a LOT less, I am collecting stats.
3) I have changed the bandwidth back to 20mhz so I am only getting 54Mbs at the moment.

You should be able to get more than 54Mbps on HT20 (802.11n HT20), the theoretical max for HT20 with short guard interval is 144 Mbit/s, the theoretical max for HT20 with long guard interval is 130 Mbps/s -- using only 2 stream. Your card should be 2-stream. For details of how to get this information please see:

Quoted 6 lines

http://wireless.kernel.org/en/developers/Documentation/ieee80211/802.11n#MCSRates

This doesn't mean you should get these, but it means the card can use these target rates for TX / RX, the actual throughput values seen will be different but can be higher than 54Mbps. Just to give you an idea with 802.11g I usually get highest about 24Mbps in practice.

Thanks for the above will look into it.

Quoted 7 lines

Please run tests with UDP and TCP with iperf. You can do with by setting an iperf server with a station connected via Gibabit ethernet on the AP and then having the iperf client send data to the station. Do this then the other way around, having the iperf server on the wireless station and have the station send data to you.

I did not know about iperf. Downloading now.

Quoted 4 lines

Right now we're running some interoperability tests with different APs so we should hopefully start seeing issues perhaps users are reporting that we are not. What AP do you have?

Product Page: DIR-655
Firmware Version: 1.20WW
Hardware Version: A3
Product Page: DIR-655

Quoted 6 lines
Quoted 3 lines

So the main reason I upgraded was because I felt that NX was causing the large number of TX/RX errors. I think has proved correct, but I will not know for sure until I put the bandwidth back up to 40mhz.

It seems easier to run long tests with things like iperf no?

Agreed.

Quoted 8 lines

If the wireless frame didn't get to the AP the AP doesn't send an ACK and the STA retries. If using 802.11n AMPDU (the usual case for aggregation) then the STA will issue a block ack request, send data the AP sends a Block ACK in which it has a bitmap which indicates which frames went through and which never reached the AP. The STA then retransmits the frames that the bitmap indicates failed.

Understand that but What I am querying is if some buffer or other does not get cleared somewhere. Still, lets not speculate lets see what happens with your testing:)

Will let you know when I have iperf set up.

Brian

#22 lore raw

[ath9k-devel] 2.6.28-rc7-wl

In reply to Luis R. Rodriguez

Luis,
The good news is the network has been working for the last 13 hours:) The only significant change I have made to the router is that I have forced it to go to channel 6.
My other settings are auto for the bit rate and 40Mhz for the bandwidth. The router is also set to pick either 11n or 11g.

For some reason the router is telling me that it has picked 11g for both machines? The one that is only 11g capable is running at 54Mbs but the 11n one is running at 14mcs or 130Mbs. I did not know you could get 130 out of an 11g.
My point is that if I want to test 11n again I will probably have to buy a pci card and convert the other machine as well.

Will let you know how I go.
Will keep upgrading the kernel as they become available. Thanks,
Brian

#23 lore raw

[ath9k-devel] 2.6.28-rc7-wl

Quoted 9 lines · Brian

Luis,
The good news is the network has been working for the last 13 hours:) The only significant change I have made to the router is that I have forced it to go to channel 6.
My other settings are auto for the bit rate and 40Mhz for the bandwidth. The router is also set to pick either 11n or 11g.

Quoted 3 lines

For some reason the router is telling me that it has picked 11g for both machines? The one that is only 11g capable is running at 54Mbs but the 11n one is running at 14mcs or 130Mbs.

Good to hear thinkgs are going well.

Quoted 2 lines

I did not know you could get 130
out of an 11g.

You can't.

Quoted 2 lines

My point is that if I want to test 11n again I will probably have to buy a pci card and convert the other machine as well.

To get the max benefit of your 11n connection I'd say go greenfield (enable only 11n, no backward compatibility). Now to test 11n (even if you do have legacy support enabled) you just have to have the 11n STA send or receive data from a STA connected to the AP via an ethernet cable. That's all.

Luis

#24 lore raw

[ath9k-devel] patch ath9k-correct-expected-max-rx-buffer-size.patch added to 2.6.27-stable tree

In reply to Luis R. Rodriguez

This is a note to let you know that we have just queued up the patch titled

Subject: ath9k: correct expected max RX buffer size

to the 2.6.27-stable tree. Its filename is

ath9k-correct-expected-max-rx-buffer-size.patch

A git repo of this tree can be found at
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

#25 lore raw

[ath9k-devel] patch ath9k-fix-sw-iommu-bounce-buffer-starvation.patch added to 2.6.27-stable tree

In reply to Luis R. Rodriguez

This is a note to let you know that we have just queued up the patch titled

Subject: ath9k: Fix SW-IOMMU bounce buffer starvation

to the 2.6.27-stable tree. Its filename is

ath9k-fix-sw-iommu-bounce-buffer-starvation.patch

A git repo of this tree can be found at
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

#26 lore raw
In reply to Luis R. Rodriguez
Quoted 10 lines · Luis R. Rodriguez

This fixes a few issues seen on MacBook Pros:

http://bugzilla.kernel.org/show_bug.cgi?id=11811

I've ported them to 2.6.27 to help with them being applied sooner. I've tried to keep them as small as possible. I don't have the ports for 2.6.28 though I think John will be sending them soon through his pending-fixes branch.

These are already applied on wireless-testing.

Oh sorry, I noticed patch 2 and 3 didn't go with the subject to indicate their order. The order they should be applied in is:

0001-ath9k-Fix-SW-IOMMU-bounce-buffer-starvation.patch 0002-ath9k-correct-expected-max-RX-buffer-size.patch 0003-ath9k-Handle-ENOMEM-on-RX-gracefully.patch

You can also find these here:

http://www.kernel.org/pub/linux/kernel/people/mcgrof/patches/ath9k/2008-11-22/27-IOMMU-01/

Luis

#27 lore raw
In reply to Luis R. Rodriguez
Quoted 5 lines · Luis R. Rodriguez

This fixes a few issues seen on MacBook Pros:

http://bugzilla.kernel.org/show_bug.cgi?id=11811

I've ported them to 2.6.27 to help with them being applied sooner.

What do you mean by "sooner"? They need to be in Linus's tree before we can add them to the 2.6.27-stable tree. Please let us know when that happens, and what the git ids of them are, so we can add them to the next -stable release.

thanks,

greg k-h

#28 lore raw
Quoted 11 lines · Greg KH
Quoted 5 lines · Luis R. Rodriguez

This fixes a few issues seen on MacBook Pros:

http://bugzilla.kernel.org/show_bug.cgi?id=11811

I've ported them to 2.6.27 to help with them being applied sooner.

What do you mean by "sooner"? They need to be in Linus's tree before we can add them to the 2.6.27-stable tree. Please let us know when that happens, and what the git ids of them are, so we can add them to the next -stable release.

Heh, well once applied there it may not apply on 27, so by sooner I mean that you don't have to do backport work as I did it for you.

Luis