aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2007-07-02 21:52:32 +0000
committerFelix Fietkau <nbd@openwrt.org>2007-07-02 21:52:32 +0000
commitbd45d860a94e774160a4cb3c806fa998100791e6 (patch)
treecd153c3fd613ada80eb4cb62a8548fa136db4282
parent46d721d0c23bfbcf5b3df797659f1de082e9b2f4 (diff)
downloadupstream-bd45d860a94e774160a4cb3c806fa998100791e6.tar.gz
upstream-bd45d860a94e774160a4cb3c806fa998100791e6.tar.bz2
upstream-bd45d860a94e774160a4cb3c806fa998100791e6.zip
refresh a patch that is causing problems on certain systems
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@7857 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/madwifi/patches/124-node_unref_r2484.patch180
1 files changed, 98 insertions, 82 deletions
diff --git a/package/madwifi/patches/124-node_unref_r2484.patch b/package/madwifi/patches/124-node_unref_r2484.patch
index 3c10e804f9..a4def35304 100644
--- a/package/madwifi/patches/124-node_unref_r2484.patch
+++ b/package/madwifi/patches/124-node_unref_r2484.patch
@@ -1,82 +1,98 @@
-Index: madwifi/net80211/ieee80211_wireless.c
-===================================================================
---- madwifi/net80211/ieee80211_wireless.c (revision 2482)
-+++ madwifi/net80211/ieee80211_wireless.c (revision 2484)
-@@ -1102,5 +1102,4 @@
- for (i = 0; i < number; i++) {
- ni = ieee80211_find_node(nt, &vap->iv_spy.mac[i * IEEE80211_ADDR_LEN]);
-- /* TODO: free node ? */
- /* check we are associated w/ this vap */
- if (ni && (ni->ni_vap == vap)) {
-@@ -1114,4 +1113,5 @@
- spy_stat[i].updated = IW_QUAL_ALL_INVALID;
- }
-+ ieee80211_unref_node(&ni);
- }
-
-@@ -3191,4 +3191,5 @@
- if (ik->ik_keylen > sizeof(ik->ik_keydata))
- return -E2BIG;
-+
- kix = ik->ik_keyix;
- if (kix == IEEE80211_KEYIX_NONE) {
-@@ -3214,4 +3215,5 @@
- ik->ik_flags |= IEEE80211_KEY_GROUP; /* XXX */
- }
-+
- error = 0;
- flags = ik->ik_flags & IEEE80211_KEY_COMMON;
-@@ -3228,5 +3230,5 @@
- memcpy(wk->wk_key, ik->ik_keydata, ik->ik_keylen);
- if (!ieee80211_crypto_setkey(vap, wk,
-- ni != NULL ? ni->ni_macaddr : ik->ik_macaddr, ni))
-+ (ni != NULL) ? ni->ni_macaddr : ik->ik_macaddr, ni))
- error = -EIO;
- else if ((ik->ik_flags & IEEE80211_KEY_DEFAULT))
-@@ -3234,4 +3236,5 @@
- } else
- error = -ENXIO;
-+
- ieee80211_key_update_end(vap);
- if (ni != NULL)
-Index: madwifi/net80211/ieee80211_output.c
-===================================================================
---- madwifi/net80211/ieee80211_output.c (revision 2438)
-+++ madwifi/net80211/ieee80211_output.c (revision 2484)
-@@ -269,4 +269,5 @@
- */
- ieee80211_pwrsave(ni, skb);
-+ ieee80211_unref_node(&ni);
- return 0;
- }
-@@ -283,5 +284,5 @@
- struct sk_buff *skb1;
- ni = ieee80211_find_txnode(vap->iv_xrvap, eh->ether_dhost);
-- skb1 = skb_clone(skb,GFP_ATOMIC);
-+ skb1 = skb_clone(skb, GFP_ATOMIC);
- if (skb1) {
- cb = (struct ieee80211_cb *) skb1->cb;
-Index: madwifi/ath/if_ath.c
-===================================================================
---- madwifi/ath/if_ath.c (revision 2482)
-+++ madwifi/ath/if_ath.c (revision 2484)
-@@ -8111,14 +8111,13 @@
- /* Depending on the sequence of bringing up devices
- * it's possible the rates of the root bss isn't
-- * filled yet.
-- */
-- if (vap->iv_ic->ic_newassoc != NULL &&
-- wds_ni->ni_rates.rs_nrates != 0) {
-+ * filled yet. */
-+ if ((vap->iv_ic->ic_newassoc != NULL) &&
-+ (wds_ni->ni_rates.rs_nrates != 0)) {
- /* Fill in the rates based on our own rates
- * we rely on the rate selection mechanism
-- * to find out which rates actually work!
-- */
-+ * to find out which rates actually work! */
- vap->iv_ic->ic_newassoc(wds_ni, 1);
- }
-+ ieee80211_unref_node(&wds_ni);
- }
- break;
+Index: madwifi-ng-r2420-20070602/ath/if_ath.c
+===================================================================
+--- madwifi-ng-r2420-20070602.orig/ath/if_ath.c 2007-07-02 23:49:33.450710750 +0200
++++ madwifi-ng-r2420-20070602/ath/if_ath.c 2007-07-02 23:50:43.107064000 +0200
+@@ -8197,16 +8197,15 @@
+ wds_ni->ni_rates = vap->iv_bss->ni_rates;
+ /* Depending on the sequence of bringing up devices
+ * it's possible the rates of the root bss isn't
+- * filled yet.
+- */
+- if (vap->iv_ic->ic_newassoc != NULL &&
+- wds_ni->ni_rates.rs_nrates != 0) {
++ * filled yet. */
++ if ((vap->iv_ic->ic_newassoc != NULL) &&
++ (wds_ni->ni_rates.rs_nrates != 0)) {
+ /* Fill in the rates based on our own rates
+ * we rely on the rate selection mechanism
+- * to find out which rates actually work!
+- */
++ * to find out which rates actually work! */
+ vap->iv_ic->ic_newassoc(wds_ni, 1);
+ }
++ ieee80211_unref_node(&wds_ni);
+ }
+ break;
+ default:
+Index: madwifi-ng-r2420-20070602/net80211/ieee80211_output.c
+===================================================================
+--- madwifi-ng-r2420-20070602.orig/net80211/ieee80211_output.c 2007-07-02 23:49:31.574593500 +0200
++++ madwifi-ng-r2420-20070602/net80211/ieee80211_output.c 2007-07-02 23:50:37.462711250 +0200
+@@ -268,6 +268,7 @@
+ * We'll get the frame back when the time is right.
+ */
+ ieee80211_pwrsave(ni, skb);
++ ieee80211_unref_node(&ni);
+ return 0;
+ }
+
+@@ -282,7 +283,7 @@
+ vap->iv_xrvap->iv_sta_assoc) {
+ struct sk_buff *skb1;
+ ni = ieee80211_find_txnode(vap->iv_xrvap, eh->ether_dhost);
+- skb1 = skb_clone(skb,GFP_ATOMIC);
++ skb1 = skb_clone(skb, GFP_ATOMIC);
+ if (skb1) {
+ cb = (struct ieee80211_cb *) skb1->cb;
+ cb->ni = ni;
+Index: madwifi-ng-r2420-20070602/net80211/ieee80211_wireless.c
+===================================================================
+--- madwifi-ng-r2420-20070602.orig/net80211/ieee80211_wireless.c 2007-07-02 23:49:31.566593000 +0200
++++ madwifi-ng-r2420-20070602/net80211/ieee80211_wireless.c 2007-07-02 23:49:34.126753000 +0200
+@@ -1088,7 +1088,6 @@
+ /* locate a node, read its rssi, check if updated, convert to dBm */
+ for (i = 0; i < number; i++) {
+ ni = ieee80211_find_node(nt, &vap->iv_spy.mac[i * IEEE80211_ADDR_LEN]);
+- /* TODO: free node ? */
+ /* check we are associated w/ this vap */
+ if (ni && (ni->ni_vap == vap)) {
+ set_quality(&spy_stat[i], ni->ni_rssi, ic->ic_channoise);
+@@ -1100,6 +1099,7 @@
+ } else {
+ spy_stat[i].updated = IW_QUAL_ALL_INVALID;
+ }
++ ieee80211_unref_node(&ni);
+ }
+
+ /* copy results to userspace */
+@@ -3153,6 +3153,7 @@
+ /* NB: this also checks ik->ik_keylen > sizeof(wk->wk_key) */
+ if (ik->ik_keylen > sizeof(ik->ik_keydata))
+ return -E2BIG;
++
+ kix = ik->ik_keyix;
+ if (kix == IEEE80211_KEYIX_NONE) {
+ /* XXX unicast keys currently must be tx/rx */
+@@ -3176,6 +3177,7 @@
+ if ((ik->ik_flags & IEEE80211_KEY_XMIT) == 0) /* XXX */
+ ik->ik_flags |= IEEE80211_KEY_GROUP; /* XXX */
+ }
++
+ error = 0;
+ flags = ik->ik_flags & IEEE80211_KEY_COMMON;
+ ieee80211_key_update_begin(vap);
+@@ -3190,12 +3192,13 @@
+ memset(wk->wk_key, 0, sizeof(wk->wk_key));
+ memcpy(wk->wk_key, ik->ik_keydata, ik->ik_keylen);
+ if (!ieee80211_crypto_setkey(vap, wk,
+- ni != NULL ? ni->ni_macaddr : ik->ik_macaddr, ni))
++ (ni != NULL) ? ni->ni_macaddr : ik->ik_macaddr, ni))
+ error = -EIO;
+ else if ((ik->ik_flags & IEEE80211_KEY_DEFAULT))
+ vap->iv_def_txkey = kix;
+ } else
+ error = -ENXIO;
++
+ ieee80211_key_update_end(vap);
+ if (ni != NULL)
+ ieee80211_unref_node(&ni);