From patchwork Fri Oct 16 10:20:40 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Berg X-Patchwork-Id: 54241 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n9GBn3S6000752 for ; Fri, 16 Oct 2009 11:49:03 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758927AbZJPLj7 (ORCPT ); Fri, 16 Oct 2009 07:39:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758886AbZJPLj6 (ORCPT ); Fri, 16 Oct 2009 07:39:58 -0400 Received: from xc.sipsolutions.net ([83.246.72.84]:58364 "EHLO sipsolutions.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758870AbZJPLj5 (ORCPT ); Fri, 16 Oct 2009 07:39:57 -0400 Received: by sipsolutions.net with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1Myl9U-0007XU-Jp; Fri, 16 Oct 2009 13:39:21 +0200 Subject: Re: 2.6.32-rc4-git1 -- INFO: possible circular locking dependency detected From: Johannes Berg To: Miles Lane Cc: LKML , linux-wireless In-Reply-To: References: Date: Fri, 16 Oct 2009 19:20:40 +0900 Message-Id: <1255688440.4095.339.camel@johannes.local> Mime-Version: 1.0 X-Mailer: Evolution 2.28.0 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org --- wireless-testing.orig/net/mac80211/agg-tx.c 2009-10-16 19:13:48.000000000 +0900 +++ wireless-testing/net/mac80211/agg-tx.c 2009-10-16 19:15:12.000000000 +0900 @@ -666,11 +666,13 @@ void ieee80211_process_addba_resp(struct state = &sta->ampdu_mlme.tid_state_tx[tid]; + del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); + spin_lock_bh(&sta->lock); if (!(*state & HT_ADDBA_REQUESTED_MSK)) { spin_unlock_bh(&sta->lock); - return; + goto timer_still_needed; } if (mgmt->u.action.u.addba_resp.dialog_token != @@ -679,13 +681,13 @@ void ieee80211_process_addba_resp(struct #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid); #endif /* CONFIG_MAC80211_HT_DEBUG */ - return; + goto timer_still_needed; } - del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid); #endif /* CONFIG_MAC80211_HT_DEBUG */ + if (le16_to_cpu(mgmt->u.action.u.addba_resp.status) == WLAN_STATUS_SUCCESS) { u8 curstate = *state; @@ -700,4 +702,8 @@ void ieee80211_process_addba_resp(struct ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR); } spin_unlock_bh(&sta->lock); + + return; + timer_still_needed: + add_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer); }