b43: Use a threaded IRQ handler
Use a threaded IRQ handler to allow locking the mutex and sleeping while executing an interrupt. This removes usage of the irq_lock spinlock, but introduces a new hardirq_lock, which is _only_ used for the PCI/SSB lowlevel hard-irq handler. Sleeping busses (SDIO) will use mutex instead. Signed-off-by: Michael Buesch <mb@bu3sch.de> Tested-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

父節點
b275f28535
當前提交
36dbd9548e
@@ -94,7 +94,6 @@ static ssize_t b43_attr_interfmode_store(struct device *dev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct b43_wldev *wldev = dev_to_b43_wldev(dev);
|
||||
unsigned long flags;
|
||||
int err;
|
||||
int mode;
|
||||
|
||||
@@ -120,7 +119,6 @@ static ssize_t b43_attr_interfmode_store(struct device *dev,
|
||||
}
|
||||
|
||||
mutex_lock(&wldev->wl->mutex);
|
||||
spin_lock_irqsave(&wldev->wl->irq_lock, flags);
|
||||
|
||||
if (wldev->phy.ops->interf_mitigation) {
|
||||
err = wldev->phy.ops->interf_mitigation(wldev, mode);
|
||||
@@ -132,7 +130,6 @@ static ssize_t b43_attr_interfmode_store(struct device *dev,
|
||||
err = -ENOSYS;
|
||||
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&wldev->wl->irq_lock, flags);
|
||||
mutex_unlock(&wldev->wl->mutex);
|
||||
|
||||
return err ? err : count;
|
||||
|
Reference in New Issue
Block a user