SVN-Revision: 20777master
parent
8f25fb6086
commit
f98e55faf0
@ -1,33 +0,0 @@ |
||||
commit b7d48ccc687c44213121b1b565dccdc4488f5d9a
|
||||
Author: Pavel Roskin <proski@gnu.org>
|
||||
Date: Wed Mar 24 17:23:37 2010 -0400
|
||||
|
||||
compat: add compat-2.6.35.h and IW_HANDLER
|
||||
|
||||
Signed-off-by: Pavel Roskin <proski@gnu.org>
|
||||
|
||||
--- /dev/null
|
||||
+++ b/include/linux/compat-2.6.35.h
|
||||
@@ -0,0 +1,13 @@
|
||||
+#ifndef LINUX_26_35_COMPAT_H
|
||||
+#define LINUX_26_35_COMPAT_H
|
||||
+
|
||||
+#include <linux/version.h>
|
||||
+
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
|
||||
+
|
||||
+#define IW_HANDLER(id, func) \
|
||||
+ [IW_IOCTL_IDX(id)] = func
|
||||
+
|
||||
+#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) */
|
||||
+
|
||||
+#endif /* LINUX_26_35_COMPAT_H */
|
||||
--- a/include/linux/compat-2.6.h
|
||||
+++ b/include/linux/compat-2.6.h
|
||||
@@ -27,5 +27,6 @@
|
||||
#include <linux/compat-2.6.32.h>
|
||||
#include <linux/compat-2.6.33.h>
|
||||
#include <linux/compat-2.6.34.h>
|
||||
+#include <linux/compat-2.6.35.h>
|
||||
|
||||
#endif /* LINUX_26_COMPAT_H */
|
@ -0,0 +1,11 @@ |
||||
--- a/include/linux/compat-2.6.34.h
|
||||
+++ b/include/linux/compat-2.6.34.h
|
||||
@@ -162,6 +162,8 @@ static inline void device_unlock(struct
|
||||
.prod_id_hash = { 0, 0, (vh3), 0 }, }
|
||||
#endif
|
||||
|
||||
+#define rcu_dereference_check(p, c) rcu_dereference(p)
|
||||
+
|
||||
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) */
|
||||
|
||||
#endif /* LINUX_26_34_COMPAT_H */
|
File diff suppressed because it is too large
Load Diff
@ -1,45 +0,0 @@ |
||||
From 181ce6f71d907f42ab73376ce154015a835a6d8a Mon Sep 17 00:00:00 2001
|
||||
From: Javier Cardona <javier@cozybit.com>
|
||||
Date: Mon, 29 Mar 2010 11:00:20 -0700
|
||||
Subject: [PATCH] mac80211: Handle mesh action frames in ieee80211_rx_h_action
|
||||
|
||||
This fixes the problem introduced in commit
|
||||
8404080568613d93ad7cf0a16dfb68 which broke mesh peer link establishment.
|
||||
|
||||
changes:
|
||||
v2 Added missing break (Johannes)
|
||||
v3 Broke original patch into two (Johannes)
|
||||
|
||||
Signed-off-by: Javier Cardona <javier@cozybit.com>
|
||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
---
|
||||
net/mac80211/mesh.c | 3 ---
|
||||
net/mac80211/rx.c | 5 +++++
|
||||
2 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/net/mac80211/mesh.c
|
||||
+++ b/net/mac80211/mesh.c
|
||||
@@ -749,9 +749,6 @@ ieee80211_mesh_rx_mgmt(struct ieee80211_
|
||||
|
||||
switch (fc & IEEE80211_FCTL_STYPE) {
|
||||
case IEEE80211_STYPE_ACTION:
|
||||
- if (skb->len < IEEE80211_MIN_ACTION_SIZE)
|
||||
- return RX_DROP_MONITOR;
|
||||
- /* fall through */
|
||||
case IEEE80211_STYPE_PROBE_RESP:
|
||||
case IEEE80211_STYPE_BEACON:
|
||||
skb_queue_tail(&ifmsh->skb_queue, skb);
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -1964,6 +1964,11 @@ ieee80211_rx_h_action(struct ieee80211_r
|
||||
goto handled;
|
||||
}
|
||||
break;
|
||||
+ case MESH_PLINK_CATEGORY:
|
||||
+ case MESH_PATH_SEL_CATEGORY:
|
||||
+ if (ieee80211_vif_is_mesh(&sdata->vif))
|
||||
+ return ieee80211_mesh_rx_mgmt(sdata, rx->skb);
|
||||
+ break;
|
||||
}
|
||||
|
||||
/*
|
@ -0,0 +1,110 @@ |
||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -260,19 +260,40 @@ static void ath_tx_set_retry(struct ath_
|
||||
hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_RETRY);
|
||||
}
|
||||
|
||||
-static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf)
|
||||
+static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
|
||||
{
|
||||
- struct ath_buf *tbf;
|
||||
+ struct ath_buf *bf = NULL;
|
||||
|
||||
spin_lock_bh(&sc->tx.txbuflock);
|
||||
- if (WARN_ON(list_empty(&sc->tx.txbuf))) {
|
||||
+
|
||||
+ if (unlikely(list_empty(&sc->tx.txbuf))) {
|
||||
spin_unlock_bh(&sc->tx.txbuflock);
|
||||
return NULL;
|
||||
}
|
||||
- tbf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
|
||||
- list_del(&tbf->list);
|
||||
+
|
||||
+ bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
|
||||
+ list_del(&bf->list);
|
||||
+
|
||||
spin_unlock_bh(&sc->tx.txbuflock);
|
||||
|
||||
+ return bf;
|
||||
+}
|
||||
+
|
||||
+static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf)
|
||||
+{
|
||||
+ spin_lock_bh(&sc->tx.txbuflock);
|
||||
+ list_add_tail(&bf->list, &sc->tx.txbuf);
|
||||
+ spin_unlock_bh(&sc->tx.txbuflock);
|
||||
+}
|
||||
+
|
||||
+static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf)
|
||||
+{
|
||||
+ struct ath_buf *tbf;
|
||||
+
|
||||
+ tbf = ath_tx_get_buffer(sc);
|
||||
+ if (WARN_ON(!tbf))
|
||||
+ return NULL;
|
||||
+
|
||||
ATH_TXBUF_RESET(tbf);
|
||||
|
||||
tbf->aphy = bf->aphy;
|
||||
@@ -1083,9 +1104,7 @@ void ath_draintxq(struct ath_softc *sc,
|
||||
list_del(&bf->list);
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
- spin_lock_bh(&sc->tx.txbuflock);
|
||||
- list_add_tail(&bf->list, &sc->tx.txbuf);
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
+ ath_tx_return_buffer(sc, bf);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -1305,25 +1324,6 @@ static void ath_tx_txqaddbuf(struct ath_
|
||||
txq->axq_depth++;
|
||||
}
|
||||
|
||||
-static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
|
||||
-{
|
||||
- struct ath_buf *bf = NULL;
|
||||
-
|
||||
- spin_lock_bh(&sc->tx.txbuflock);
|
||||
-
|
||||
- if (unlikely(list_empty(&sc->tx.txbuf))) {
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
|
||||
- list_del(&bf->list);
|
||||
-
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
-
|
||||
- return bf;
|
||||
-}
|
||||
-
|
||||
static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,
|
||||
struct list_head *bf_head,
|
||||
struct ath_tx_control *txctl)
|
||||
@@ -1805,9 +1805,7 @@ int ath_tx_start(struct ieee80211_hw *hw
|
||||
}
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
- spin_lock_bh(&sc->tx.txbuflock);
|
||||
- list_add_tail(&bf->list, &sc->tx.txbuf);
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
+ ath_tx_return_buffer(sc, bf);
|
||||
|
||||
return r;
|
||||
}
|
||||
@@ -2123,11 +2121,8 @@ static void ath_tx_processq(struct ath_s
|
||||
txq->axq_tx_inprogress = false;
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
- if (bf_held) {
|
||||
- spin_lock_bh(&sc->tx.txbuflock);
|
||||
- list_move_tail(&bf_held->list, &sc->tx.txbuf);
|
||||
- spin_unlock_bh(&sc->tx.txbuflock);
|
||||
- }
|
||||
+ if (bf_held)
|
||||
+ ath_tx_return_buffer(sc, bf_held);
|
||||
|
||||
if (!bf_isampdu(bf)) {
|
||||
/*
|
Loading…
Reference in new issue