From patchwork Fri Sep 24 09:21:08 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Berg X-Patchwork-Id: 204062 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id o8O9NrVr006633 for ; Fri, 24 Sep 2010 09:23:53 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755167Ab0IXJXw (ORCPT ); Fri, 24 Sep 2010 05:23:52 -0400 Received: from he.sipsolutions.net ([78.46.109.217]:39981 "EHLO sipsolutions.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755190Ab0IXJXv (ORCPT ); Fri, 24 Sep 2010 05:23:51 -0400 Received: by sipsolutions.net with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.72) (envelope-from ) id 1Oz4VS-0003Bj-5t; Fri, 24 Sep 2010 11:23:50 +0200 Message-Id: <20100924092306.033777419@sipsolutions.net> User-Agent: quilt/0.48-1 Date: Fri, 24 Sep 2010 11:21:08 +0200 From: Johannes Berg To: linux-wireless@vger.kernel.org Cc: John Linville , Johannes Berg Subject: [PATCH 4/5] mac80211: fix release_reorder_timeout in scan References: <20100924092104.384954781@sipsolutions.net> Content-Disposition: inline; filename=013-mac80211-fix-scan-rx.patch Mime-Version: 1.0 X-Mailer: Evolution 2.30.3 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Fri, 24 Sep 2010 09:23:53 +0000 (UTC) --- wireless-testing.orig/net/mac80211/rx.c 2010-09-24 10:57:11.000000000 +0200 +++ wireless-testing/net/mac80211/rx.c 2010-09-24 10:57:14.000000000 +0200 @@ -389,24 +389,22 @@ ieee80211_rx_h_passive_scan(struct ieee8 struct ieee80211_local *local = rx->local; struct sk_buff *skb = rx->skb; - if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning))) + if (likely(!(rx->flags & IEEE80211_RX_IN_SCAN))) + return RX_CONTINUE; + + if (test_bit(SCAN_HW_SCANNING, &local->scanning)) return ieee80211_scan_rx(rx->sdata, skb); - if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning) && - (rx->flags & IEEE80211_RX_IN_SCAN))) { + if (test_bit(SCAN_SW_SCANNING, &local->scanning)) { /* drop all the other packets during a software scan anyway */ if (ieee80211_scan_rx(rx->sdata, skb) != RX_QUEUED) dev_kfree_skb(skb); return RX_QUEUED; } - if (unlikely(rx->flags & IEEE80211_RX_IN_SCAN)) { - /* scanning finished during invoking of handlers */ - I802_DEBUG_INC(local->rx_handlers_drop_passive_scan); - return RX_DROP_UNUSABLE; - } - - return RX_CONTINUE; + /* scanning finished during invoking of handlers */ + I802_DEBUG_INC(local->rx_handlers_drop_passive_scan); + return RX_DROP_UNUSABLE; } @@ -2495,10 +2493,6 @@ void ieee80211_release_reorder_timeout(s rx.queue = tid; rx.flags |= IEEE80211_RX_RA_MATCH; - if (unlikely(test_bit(SCAN_HW_SCANNING, &sta->local->scanning) || - test_bit(SCAN_OFF_CHANNEL, &sta->local->scanning))) - rx.flags |= IEEE80211_RX_IN_SCAN; - spin_lock(&tid_agg_rx->reorder_lock); ieee80211_sta_reorder_release(&sta->local->hw, tid_agg_rx, &frames); spin_unlock(&tid_agg_rx->reorder_lock);