All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Lamparter <chunkeey@googlemail.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: "John W. Linville" <linville@tuxdriver.com>,
	linux-wireless@vger.kernel.org,
	Ben Greear <greearb@candelatech.com>,
	Ming Lei <tom.leiming@gmail.com>
Subject: Re: [PATCH] mac80211: hoist sta->lock from reorder release timer
Date: Fri, 8 Oct 2010 18:42:38 +0200	[thread overview]
Message-ID: <201010081842.39187.chunkeey@googlemail.com> (raw)
In-Reply-To: <1286485393.20974.40.camel@jlt3.sipsolutions.net>

On Thursday 07 October 2010 23:03:13 Johannes Berg wrote:
> On Wed, 2010-10-06 at 16:21 -0400, John W. Linville wrote:
> 
> > > I think it's probably easier to fix than to revert now? There are only a
> > > handful of fields, and it seemed to me that most of them can easily be
> > > moved under the reorder lock.
> > 
> > I would prefer a fix on top rather than a series of reverts...
> 
> I think this should fix it. Somebody review please?
> 
> johannes
> 
Sure, a little bit. The code itself is fine but as you said
the rx_handler code wasn't written for concurrent/delayed
release timer mechanism.

for example:

Because we can't set IEEE80211_RX_RA_MATCH (since 
it interferes with scanning (as explained in
"mac80211: fix release_reorder_timeout in scan").

We will experience strange results with "ieee80211_rx_h_decrypt":

line: 878
>	/*
>	 * No point in finding a key and decrypting if the frame is neither
>	 * addressed to us nor a multicast frame.
>	 */
>	if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
>		return RX_CONTINUE;
>
>	/* start without a key */
>	rx->key = NULL;
no software decryption there - not nice but the HW probably does
the decryption for us. - That being said, the stack should be able
to do the software decryption "just in case".

Things are a little bit better with ieee80211_rx_h_sta_process.
It updates some statistics and takes care of sta->last_rx
(which is currently not that important giving HT BA is only supported
for AP/STA operation).

In ieee80211_rx_h_data, there could be another potential problem:
>	if (ieee80211_is_data(hdr->frame_control) &&
>   	 !is_multicast_ether_addr(hdr->addr1) &&
>		 local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) {
>			mod_timer(&local->dynamic_ps_timer, jiffies +
>			msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
>	}
I reckon there could be a "hidden" problem. "jiffies" is now
approx 100ms after the packet was received from the interface.
(Sure, a similar issue was also present in the original
reorder release implementation.)

In order the fix this/my mess we would need to:
 1. move the software decryption before the reordering
   (802.11n-spec (page 11, Figure 6-1) allows this)

(Or:
1. introduce an additional rx_flag for the reorder release case?)

(2. maybe cache the original skb jiffie at some place?)

(3. make a few counters atomic_t, so concurrent tasklets
    can update the stats. Or disable the BHs while processing,
    any rx frames (which is probably what we're going to do, right?))

Regards,
	Christian

Unfortunately, I have to do some other "high priority" right now,
so I'm short of time to do "that" now :-/.

  reply	other threads:[~2010-10-08 16:45 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-06 10:00 [PATCH] mac80211: hoist sta->lock from reorder release timer Christian Lamparter
2010-10-06 10:10 ` Johannes Berg
2010-10-06 10:20   ` Christian Lamparter
2010-10-06 10:41     ` Johannes Berg
2010-10-06 11:43       ` Christian Lamparter
2010-10-06 11:46         ` Johannes Berg
2010-10-06 20:21           ` John W. Linville
2010-10-07 21:03             ` Johannes Berg
2010-10-08 16:42               ` Christian Lamparter [this message]
2010-10-08 16:53                 ` Johannes Berg
2010-10-08 18:12                   ` Christian Lamparter
2010-10-08 18:45                     ` 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=201010081842.39187.chunkeey@googlemail.com \
    --to=chunkeey@googlemail.com \
    --cc=greearb@candelatech.com \
    --cc=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=tom.leiming@gmail.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.