Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 202996
b: refs/heads/master
c: 35f20c1
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Jun 14, 2010
1 parent f53c663 commit 0dddad8
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2a419056c15478d2df3f3e9d4fa64e34eb1faa7d
refs/heads/master: 35f20c14a103ca2c7062999e934a513b83d84de6
7 changes: 3 additions & 4 deletions trunk/net/mac80211/ibss.c
Original file line number Diff line number Diff line change
Expand Up @@ -779,7 +779,7 @@ static void ieee80211_ibss_work(struct work_struct *work)
return;
ifibss = &sdata->u.ibss;

while ((skb = skb_dequeue(&ifibss->skb_queue)))
while ((skb = skb_dequeue(&sdata->skb_queue)))
ieee80211_ibss_rx_queued_mgmt(sdata, skb);

if (!test_and_clear_bit(IEEE80211_IBSS_REQ_RUN, &ifibss->request))
Expand Down Expand Up @@ -850,7 +850,6 @@ void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata)
INIT_WORK(&ifibss->work, ieee80211_ibss_work);
setup_timer(&ifibss->timer, ieee80211_ibss_timer,
(unsigned long) sdata);
skb_queue_head_init(&ifibss->skb_queue);
}

/* scan finished notification */
Expand Down Expand Up @@ -890,7 +889,7 @@ ieee80211_ibss_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
case IEEE80211_STYPE_BEACON:
case IEEE80211_STYPE_PROBE_REQ:
case IEEE80211_STYPE_AUTH:
skb_queue_tail(&sdata->u.ibss.skb_queue, skb);
skb_queue_tail(&sdata->skb_queue, skb);
ieee80211_queue_work(&local->hw, &sdata->u.ibss.work);
return RX_QUEUED;
}
Expand Down Expand Up @@ -983,7 +982,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
synchronize_rcu();
kfree_skb(skb);

skb_queue_purge(&sdata->u.ibss.skb_queue);
skb_queue_purge(&sdata->skb_queue);
memset(sdata->u.ibss.bssid, 0, ETH_ALEN);
sdata->u.ibss.ssid_len = 0;

Expand Down
7 changes: 2 additions & 5 deletions trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -340,8 +340,6 @@ struct ieee80211_if_managed {

u16 aid;

struct sk_buff_head skb_queue;

unsigned long timers_running; /* used for quiesce/restart */
bool powersave; /* powersave requested for this iface */
enum ieee80211_smps_mode req_smps, /* requested smps mode */
Expand Down Expand Up @@ -388,8 +386,6 @@ struct ieee80211_if_ibss {
struct timer_list timer;
struct work_struct work;

struct sk_buff_head skb_queue;

unsigned long request;
unsigned long last_scan_completed;

Expand Down Expand Up @@ -420,7 +416,6 @@ struct ieee80211_if_mesh {
struct timer_list housekeeping_timer;
struct timer_list mesh_path_timer;
struct timer_list mesh_path_root_timer;
struct sk_buff_head skb_queue;

unsigned long timers_running;

Expand Down Expand Up @@ -517,6 +512,8 @@ struct ieee80211_sub_if_data {

u16 sequence_number;

struct sk_buff_head skb_queue;

/*
* AP this belongs to: self in AP mode and
* corresponding AP in VLAN mode, NULL for
Expand Down
21 changes: 11 additions & 10 deletions trunk/net/mac80211/iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -465,21 +465,11 @@ static int ieee80211_stop(struct net_device *dev)
cancel_work_sync(&sdata->u.mgd.monitor_work);
cancel_work_sync(&sdata->u.mgd.beacon_connection_loss_work);

/*
* When we get here, the interface is marked down.
* Call synchronize_rcu() to wait for the RX path
* should it be using the interface and enqueuing
* frames at this very time on another CPU.
*/
synchronize_rcu();
skb_queue_purge(&sdata->u.mgd.skb_queue);
/* fall through */
case NL80211_IFTYPE_ADHOC:
if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
del_timer_sync(&sdata->u.ibss.timer);
cancel_work_sync(&sdata->u.ibss.work);
synchronize_rcu();
skb_queue_purge(&sdata->u.ibss.skb_queue);
}
/* fall through */
case NL80211_IFTYPE_MESH_POINT:
Expand All @@ -495,6 +485,15 @@ static int ieee80211_stop(struct net_device *dev)
}
/* fall through */
default:
/*
* When we get here, the interface is marked down.
* Call synchronize_rcu() to wait for the RX path
* should it be using the interface and enqueuing
* frames at this very time on another CPU.
*/
synchronize_rcu();
skb_queue_purge(&sdata->skb_queue);

if (local->scan_sdata == sdata)
ieee80211_scan_cancel(local);

Expand Down Expand Up @@ -721,6 +720,8 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
/* only monitor differs */
sdata->dev->type = ARPHRD_ETHER;

skb_queue_head_init(&sdata->skb_queue);

switch (type) {
case NL80211_IFTYPE_AP:
skb_queue_head_init(&sdata->u.ap.ps_bc_buf);
Expand Down
14 changes: 2 additions & 12 deletions trunk/net/mac80211/mesh.c
Original file line number Diff line number Diff line change
Expand Up @@ -537,15 +537,6 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)
* it no longer is.
*/
cancel_work_sync(&sdata->u.mesh.work);

/*
* When we get here, the interface is marked down.
* Call synchronize_rcu() to wait for the RX path
* should it be using the interface and enqueuing
* frames at this very time on another CPU.
*/
rcu_barrier(); /* Wait for RX path and call_rcu()'s */
skb_queue_purge(&sdata->u.mesh.skb_queue);
}

static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
Expand Down Expand Up @@ -650,7 +641,7 @@ static void ieee80211_mesh_work(struct work_struct *work)
if (local->scanning)
return;

while ((skb = skb_dequeue(&ifmsh->skb_queue)))
while ((skb = skb_dequeue(&sdata->skb_queue)))
ieee80211_mesh_rx_queued_mgmt(sdata, skb);

if (ifmsh->preq_queue_len &&
Expand Down Expand Up @@ -690,7 +681,6 @@ void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)
setup_timer(&ifmsh->housekeeping_timer,
ieee80211_mesh_housekeeping_timer,
(unsigned long) sdata);
skb_queue_head_init(&sdata->u.mesh.skb_queue);

ifmsh->mshcfg.dot11MeshRetryTimeout = MESH_RET_T;
ifmsh->mshcfg.dot11MeshConfirmTimeout = MESH_CONF_T;
Expand Down Expand Up @@ -750,7 +740,7 @@ ieee80211_mesh_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
case IEEE80211_STYPE_ACTION:
case IEEE80211_STYPE_PROBE_RESP:
case IEEE80211_STYPE_BEACON:
skb_queue_tail(&ifmsh->skb_queue, skb);
skb_queue_tail(&sdata->skb_queue, skb);
ieee80211_queue_work(&local->hw, &ifmsh->work);
return RX_QUEUED;
}
Expand Down
5 changes: 2 additions & 3 deletions trunk/net/mac80211/mlme.c
Original file line number Diff line number Diff line change
Expand Up @@ -1652,7 +1652,7 @@ ieee80211_rx_result ieee80211_sta_rx_mgmt(struct ieee80211_sub_if_data *sdata,
case IEEE80211_STYPE_DEAUTH:
case IEEE80211_STYPE_DISASSOC:
case IEEE80211_STYPE_ACTION:
skb_queue_tail(&sdata->u.mgd.skb_queue, skb);
skb_queue_tail(&sdata->skb_queue, skb);
ieee80211_queue_work(&local->hw, &sdata->u.mgd.work);
return RX_QUEUED;
}
Expand Down Expand Up @@ -1810,7 +1810,7 @@ static void ieee80211_sta_work(struct work_struct *work)
ifmgd = &sdata->u.mgd;

/* first process frames to avoid timing out while a frame is pending */
while ((skb = skb_dequeue(&ifmgd->skb_queue)))
while ((skb = skb_dequeue(&sdata->skb_queue)))
ieee80211_sta_rx_queued_mgmt(sdata, skb);

/* then process the rest of the work */
Expand Down Expand Up @@ -1967,7 +1967,6 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata)
(unsigned long) sdata);
setup_timer(&ifmgd->chswitch_timer, ieee80211_chswitch_timer,
(unsigned long) sdata);
skb_queue_head_init(&ifmgd->skb_queue);

ifmgd->flags = 0;

Expand Down

0 comments on commit 0dddad8

Please sign in to comment.