aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/zd1211rw
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>2011-01-31 13:47:27 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-02-04 16:29:48 -0500
commit8b17f75ced1d45af9faed767f4cfafb13c0fe05e (patch)
treecac3f6a076ae0e6145d8e2969c39b6ac75b24fac /drivers/net/wireless/zd1211rw
parentd741900d404b3a34bf478673f76ee9f16dad3f90 (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.c6
-rw-r--r--drivers/net/wireless/zd1211rw/zd_usb.c2
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)
911static void zd_process_intr(struct work_struct *work) 911static 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;