diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-11-26 04:50:39 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-11-26 04:50:42 -0500 |
| commit | 16bc67edeb49b531940b2ba6c183780a1b5c472d (patch) | |
| tree | 71b4bc48e47e54f2c0b3126d8f81d2f31b707ea8 /drivers/net/wireless/b43 | |
| parent | f6630114d9198aa959ac95c131334c020038f253 (diff) | |
| parent | 047106adcc85e3023da210143a6ab8a55df9e0fc (diff) | |
Merge branch 'sched/urgent' into sched/core
Merge reason: Pick up fixes that did not make it into .32.0
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/net/wireless/b43')
| -rw-r--r-- | drivers/net/wireless/b43/dma.c | 15 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/leds.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/main.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/rfkill.c | 3 |
4 files changed, 16 insertions, 4 deletions
diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c index 8701034569fa..de4e804bedf0 100644 --- a/drivers/net/wireless/b43/dma.c +++ b/drivers/net/wireless/b43/dma.c | |||
| @@ -1157,8 +1157,9 @@ struct b43_dmaring *parse_cookie(struct b43_wldev *dev, u16 cookie, int *slot) | |||
| 1157 | } | 1157 | } |
| 1158 | 1158 | ||
| 1159 | static int dma_tx_fragment(struct b43_dmaring *ring, | 1159 | static int dma_tx_fragment(struct b43_dmaring *ring, |
| 1160 | struct sk_buff *skb) | 1160 | struct sk_buff **in_skb) |
| 1161 | { | 1161 | { |
| 1162 | struct sk_buff *skb = *in_skb; | ||
| 1162 | const struct b43_dma_ops *ops = ring->ops; | 1163 | const struct b43_dma_ops *ops = ring->ops; |
| 1163 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 1164 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
| 1164 | u8 *header; | 1165 | u8 *header; |
| @@ -1224,8 +1225,14 @@ static int dma_tx_fragment(struct b43_dmaring *ring, | |||
| 1224 | } | 1225 | } |
| 1225 | 1226 | ||
| 1226 | memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len); | 1227 | memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len); |
| 1228 | memcpy(bounce_skb->cb, skb->cb, sizeof(skb->cb)); | ||
| 1229 | bounce_skb->dev = skb->dev; | ||
| 1230 | skb_set_queue_mapping(bounce_skb, skb_get_queue_mapping(skb)); | ||
| 1231 | info = IEEE80211_SKB_CB(bounce_skb); | ||
| 1232 | |||
| 1227 | dev_kfree_skb_any(skb); | 1233 | dev_kfree_skb_any(skb); |
| 1228 | skb = bounce_skb; | 1234 | skb = bounce_skb; |
| 1235 | *in_skb = bounce_skb; | ||
| 1229 | meta->skb = skb; | 1236 | meta->skb = skb; |
| 1230 | meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1); | 1237 | meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1); |
| 1231 | if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) { | 1238 | if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) { |
| @@ -1355,7 +1362,11 @@ int b43_dma_tx(struct b43_wldev *dev, struct sk_buff *skb) | |||
| 1355 | * static, so we don't need to store it per frame. */ | 1362 | * static, so we don't need to store it per frame. */ |
| 1356 | ring->queue_prio = skb_get_queue_mapping(skb); | 1363 | ring->queue_prio = skb_get_queue_mapping(skb); |
| 1357 | 1364 | ||
| 1358 | err = dma_tx_fragment(ring, skb); | 1365 | /* dma_tx_fragment might reallocate the skb, so invalidate pointers pointing |
| 1366 | * into the skb data or cb now. */ | ||
| 1367 | hdr = NULL; | ||
| 1368 | info = NULL; | ||
| 1369 | err = dma_tx_fragment(ring, &skb); | ||
| 1359 | if (unlikely(err == -ENOKEY)) { | 1370 | if (unlikely(err == -ENOKEY)) { |
| 1360 | /* Drop this packet, as we don't have the encryption key | 1371 | /* Drop this packet, as we don't have the encryption key |
| 1361 | * anymore and must not transmit it unencrypted. */ | 1372 | * anymore and must not transmit it unencrypted. */ |
diff --git a/drivers/net/wireless/b43/leds.h b/drivers/net/wireless/b43/leds.h index 4c56187810fc..32b66d53cdac 100644 --- a/drivers/net/wireless/b43/leds.h +++ b/drivers/net/wireless/b43/leds.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #ifndef B43_LEDS_H_ | 1 | #ifndef B43_LEDS_H_ |
| 2 | #define B43_LEDS_H_ | 2 | #define B43_LEDS_H_ |
| 3 | 3 | ||
| 4 | struct b43_wl; | ||
| 4 | struct b43_wldev; | 5 | struct b43_wldev; |
| 5 | 6 | ||
| 6 | #ifdef CONFIG_B43_LEDS | 7 | #ifdef CONFIG_B43_LEDS |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index df6b26a0c05e..86f35827f008 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
| @@ -4501,7 +4501,6 @@ static void b43_op_stop(struct ieee80211_hw *hw) | |||
| 4501 | 4501 | ||
| 4502 | cancel_work_sync(&(wl->beacon_update_trigger)); | 4502 | cancel_work_sync(&(wl->beacon_update_trigger)); |
| 4503 | 4503 | ||
| 4504 | wiphy_rfkill_stop_polling(hw->wiphy); | ||
| 4505 | mutex_lock(&wl->mutex); | 4504 | mutex_lock(&wl->mutex); |
| 4506 | if (b43_status(dev) >= B43_STAT_STARTED) { | 4505 | if (b43_status(dev) >= B43_STAT_STARTED) { |
| 4507 | dev = b43_wireless_core_stop(dev); | 4506 | dev = b43_wireless_core_stop(dev); |
diff --git a/drivers/net/wireless/b43/rfkill.c b/drivers/net/wireless/b43/rfkill.c index 7a3218c5ba7d..ffdce6f3c909 100644 --- a/drivers/net/wireless/b43/rfkill.c +++ b/drivers/net/wireless/b43/rfkill.c | |||
| @@ -33,7 +33,8 @@ bool b43_is_hw_radio_enabled(struct b43_wldev *dev) | |||
| 33 | & B43_MMIO_RADIO_HWENABLED_HI_MASK)) | 33 | & B43_MMIO_RADIO_HWENABLED_HI_MASK)) |
| 34 | return 1; | 34 | return 1; |
| 35 | } else { | 35 | } else { |
| 36 | if (b43_read16(dev, B43_MMIO_RADIO_HWENABLED_LO) | 36 | if (b43_status(dev) >= B43_STAT_STARTED && |
| 37 | b43_read16(dev, B43_MMIO_RADIO_HWENABLED_LO) | ||
| 37 | & B43_MMIO_RADIO_HWENABLED_LO_MASK) | 38 | & B43_MMIO_RADIO_HWENABLED_LO_MASK) |
| 38 | return 1; | 39 | return 1; |
| 39 | } | 40 | } |
