All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Buesch <mb@bu3sch.de>
To: Ulrich Kunitz <kune@deine-taler.de>, Daniel Drake <dsd@gentoo.org>
Cc: John Linville <linville@tuxdriver.com>,
	Johannes Berg <johannes@sipsolutions.net>,
	linux-wireless@vger.kernel.org
Subject: zd-mac80211: Fix TX status reports.
Date: Sat, 8 Sep 2007 23:41:31 +0200	[thread overview]
Message-ID: <200709082341.31720.mb@bu3sch.de> (raw)

Automatic rate scaling does not work on the zd-mac80211 driver.
The driver does not properly report succeed and failed frames
to mac80211.

We need to indicate failed frames with the excessive_retries field
(Should we also fake report some high retry count here?)
Otherwise the rc algo is not able to scale down.

Remove the conditional in REQ_TX_STATUS, as mac80211 handles that internally.

Signed-off-by: Michael Buesch <mb@bu3sch.de>

---


Johannes, to me it seems that there's also a bug in mac80211.
I never get a frame with the REQ_TX_STATUS bit set, so frames
will always end up on the "unreliable" tx status queue.


Index: wireless-dev/drivers/net/wireless/zd1211rw-mac80211/zd_mac.c
===================================================================
--- wireless-dev.orig/drivers/net/wireless/zd1211rw-mac80211/zd_mac.c	2007-09-07 16:13:10.000000000 +0200
+++ wireless-dev/drivers/net/wireless/zd1211rw-mac80211/zd_mac.c	2007-09-08 23:33:47.000000000 +0200
@@ -348,6 +348,7 @@ static int init_tx_skb_control_block(str
  * @hw - a &struct ieee80211_hw pointer
  * @skb - a sk-buffer
  * @status - the tx status of the packet without control information
+ * @success - True for successfull transmission of the frame
  *
  * This information calls ieee80211_tx_status_irqsafe() if required by the
  * control information. It copies the control information into the status
@@ -356,19 +357,18 @@ static int init_tx_skb_control_block(str
  * If no status information has been requested, the skb is freed.
  */
 static void tx_status(struct ieee80211_hw *hw, struct sk_buff *skb,
-	              struct ieee80211_tx_status *status)
+	              struct ieee80211_tx_status *status,
+		      bool success)
 {
 	struct zd_tx_skb_control_block *cb = (struct zd_tx_skb_control_block *)
 		skb->cb;
 
 	ZD_ASSERT(cb->control != NULL);
-	if ((cb->control->flags & IEEE80211_TXCTL_REQ_TX_STATUS)) {
-		memcpy(&status->control, cb->control, sizeof(status->control));
-		clear_tx_skb_control_block(skb);
-		ieee80211_tx_status_irqsafe(hw, skb, status);
-	} else {
-		kfree_tx_skb(skb);
-	}
+	memcpy(&status->control, cb->control, sizeof(status->control));
+	if (!success)
+		status->excessive_retries = 1;
+	clear_tx_skb_control_block(skb);
+	ieee80211_tx_status_irqsafe(hw, skb, status);
 }
 
 /**
@@ -388,7 +388,7 @@ void zd_mac_tx_failed(struct ieee80211_h
 	skb = skb_dequeue(q);
 	if (skb == NULL)
 		return;
-	tx_status(hw, skb, &status);
+	tx_status(hw, skb, &status, 0);
 }
 
 /**
@@ -413,7 +413,7 @@ void zd_mac_tx_to_dev(struct sk_buff *sk
 		    (cb->control->flags & IEEE80211_TXCTL_NO_ACK)))
 		{
 			struct ieee80211_tx_status status = {{0}};
-			tx_status(hw, skb, &status);
+			tx_status(hw, skb, &status, !error);
 		} else {
 			struct sk_buff_head *q =
 				&zd_hw_mac(hw)->ack_wait_queue;
@@ -664,7 +664,7 @@ static int filter_ack(struct ieee80211_h
 			status.flags = IEEE80211_TX_STATUS_ACK;
 			status.ack_signal = stats->ssi;
 			__skb_unlink(skb, q);
-			tx_status(hw, skb, &status);
+			tx_status(hw, skb, &status, 1);
 			goto out;
 		}
 	}

             reply	other threads:[~2007-09-08 21:43 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-08 21:41 Michael Buesch [this message]
2007-09-09 10:05 ` zd-mac80211: Fix TX status reports Ulrich Kunitz
2007-09-09 10:58   ` Michael Buesch
2007-09-10 10:52     ` Johannes Berg
2007-09-10 10:58       ` Michael Buesch
2007-09-10 11:10         ` Johannes Berg
2007-09-11  3:50           ` Tomas Winkler
2007-09-11  7:52             ` Daniel Drake
2007-09-11 10:03               ` Tomas Winkler
2007-09-11 10:17             ` Johannes Berg
2007-09-11 10:20               ` Michael Buesch
2007-09-11 10:29                 ` Johannes Berg
2007-09-11 10:52                   ` Michael Buesch
2007-09-11 10:57                     ` Johannes Berg
2007-09-11 22:32                       ` Ulrich Kunitz
2007-09-12  8:40                         ` Tomas Winkler
2007-09-12  8:54                           ` Johannes Berg
2007-09-12  8:56                             ` Johannes Berg
2007-09-13  5:56                               ` Ulrich Kunitz
2007-09-13  7:15                                 ` Johannes Berg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200709082341.31720.mb@bu3sch.de \
    --to=mb@bu3sch.de \
    --cc=dsd@gentoo.org \
    --cc=johannes@sipsolutions.net \
    --cc=kune@deine-taler.de \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.