diff options
author | Jussi Kivilinna <jussi.kivilinna@mbnet.fi> | 2011-01-31 13:47:27 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-02-04 16:29:48 -0500 |
commit | 8b17f75ced1d45af9faed767f4cfafb13c0fe05e (patch) | |
tree | cac3f6a076ae0e6145d8e2969c39b6ac75b24fac /drivers/net/wireless/zd1211rw | |
parent | d741900d404b3a34bf478673f76ee9f16dad3f90 (diff) |
zd1211rw: add locking for mac->process_intr
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/zd1211rw')
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_mac.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.c | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c index 6107304cb94c..8b3d779d80dc 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.c +++ b/drivers/net/wireless/zd1211rw/zd_mac.c | |||
@@ -911,9 +911,13 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed) | |||
911 | static void zd_process_intr(struct work_struct *work) | 911 | static void zd_process_intr(struct work_struct *work) |
912 | { | 912 | { |
913 | u16 int_status; | 913 | u16 int_status; |
914 | unsigned long flags; | ||
914 | struct zd_mac *mac = container_of(work, struct zd_mac, process_intr); | 915 | struct zd_mac *mac = container_of(work, struct zd_mac, process_intr); |
915 | 916 | ||
916 | int_status = le16_to_cpu(*(__le16 *)(mac->intr_buffer+4)); | 917 | spin_lock_irqsave(&mac->lock, flags); |
918 | int_status = le16_to_cpu(*(__le16 *)(mac->intr_buffer + 4)); | ||
919 | spin_unlock_irqrestore(&mac->lock, flags); | ||
920 | |||
917 | if (int_status & INT_CFG_NEXT_BCN) | 921 | if (int_status & INT_CFG_NEXT_BCN) |
918 | dev_dbg_f_limit(zd_mac_dev(mac), "INT_CFG_NEXT_BCN\n"); | 922 | dev_dbg_f_limit(zd_mac_dev(mac), "INT_CFG_NEXT_BCN\n"); |
919 | else | 923 | else |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index c32a2472eb44..9493ab86a41e 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -377,8 +377,10 @@ static inline void handle_regs_int(struct urb *urb) | |||
377 | int_num = le16_to_cpu(*(__le16 *)(urb->transfer_buffer+2)); | 377 | int_num = le16_to_cpu(*(__le16 *)(urb->transfer_buffer+2)); |
378 | if (int_num == CR_INTERRUPT) { | 378 | if (int_num == CR_INTERRUPT) { |
379 | struct zd_mac *mac = zd_hw_mac(zd_usb_to_hw(urb->context)); | 379 | struct zd_mac *mac = zd_hw_mac(zd_usb_to_hw(urb->context)); |
380 | spin_lock(&mac->lock); | ||
380 | memcpy(&mac->intr_buffer, urb->transfer_buffer, | 381 | memcpy(&mac->intr_buffer, urb->transfer_buffer, |
381 | USB_MAX_EP_INT_BUFFER); | 382 | USB_MAX_EP_INT_BUFFER); |
383 | spin_unlock(&mac->lock); | ||
382 | schedule_work(&mac->process_intr); | 384 | schedule_work(&mac->process_intr); |
383 | } else if (intr->read_regs_enabled) { | 385 | } else if (intr->read_regs_enabled) { |
384 | intr->read_regs.length = len = urb->actual_length; | 386 | intr->read_regs.length = len = urb->actual_length; |