mac80211: backport a fix for single-queue drivers (fixes #11534)

SVN-Revision: 31862
This commit is contained in:
Felix Fietkau 2012-05-26 20:15:28 +00:00
parent 925fcc107d
commit 11397a5f75
2 changed files with 17 additions and 5 deletions

View file

@ -607,7 +607,19 @@
TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT), TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT),
--- a/net/mac80211/iface.c --- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c +++ b/net/mac80211/iface.c
@@ -282,7 +282,6 @@ static int ieee80211_do_open(struct net_ @@ -206,8 +206,10 @@ static void ieee80211_set_default_queues
for (i = 0; i < IEEE80211_NUM_ACS; i++) {
if (local->hw.flags & IEEE80211_HW_QUEUE_CONTROL)
sdata->vif.hw_queue[i] = IEEE80211_INVAL_HW_QUEUE;
- else
+ else if (local->hw.queues >= IEEE80211_NUM_ACS)
sdata->vif.hw_queue[i] = i;
+ else
+ sdata->vif.hw_queue[i] = 0;
}
sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
}
@@ -282,7 +284,6 @@ static int ieee80211_do_open(struct net_
{ {
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
struct ieee80211_local *local = sdata->local; struct ieee80211_local *local = sdata->local;
@ -615,7 +627,7 @@
u32 changed = 0; u32 changed = 0;
int res; int res;
u32 hw_reconf_flags = 0; u32 hw_reconf_flags = 0;
@@ -428,28 +427,6 @@ static int ieee80211_do_open(struct net_ @@ -428,28 +429,6 @@ static int ieee80211_do_open(struct net_
set_bit(SDATA_STATE_RUNNING, &sdata->state); set_bit(SDATA_STATE_RUNNING, &sdata->state);
@ -644,7 +656,7 @@
/* /*
* set_multicast_list will be invoked by the networking core * set_multicast_list will be invoked by the networking core
* which will check whether any increments here were done in * which will check whether any increments here were done in
@@ -846,6 +823,72 @@ static void ieee80211_if_setup(struct ne @@ -846,6 +825,72 @@ static void ieee80211_if_setup(struct ne
dev->destructor = free_netdev; dev->destructor = free_netdev;
} }
@ -717,7 +729,7 @@
static void ieee80211_iface_work(struct work_struct *work) static void ieee80211_iface_work(struct work_struct *work)
{ {
struct ieee80211_sub_if_data *sdata = struct ieee80211_sub_if_data *sdata =
@@ -950,6 +993,9 @@ static void ieee80211_iface_work(struct @@ -950,6 +995,9 @@ static void ieee80211_iface_work(struct
break; break;
ieee80211_mesh_rx_queued_mgmt(sdata, skb); ieee80211_mesh_rx_queued_mgmt(sdata, skb);
break; break;

View file

@ -1,6 +1,6 @@
--- a/net/mac80211/iface.c --- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c +++ b/net/mac80211/iface.c
@@ -813,6 +813,7 @@ static const struct net_device_ops ieee8 @@ -815,6 +815,7 @@ static const struct net_device_ops ieee8
static void ieee80211_if_setup(struct net_device *dev) static void ieee80211_if_setup(struct net_device *dev)
{ {
ether_setup(dev); ether_setup(dev);