better fix for the USB in_interrupt() woes.
This commit is contained in:
parent
9a444e5f23
commit
4095efb054
1
CHANGES
1
CHANGES
|
@ -41,6 +41,7 @@
|
|||
* Intersil Corporation as part of PRISM(R) chipset product development.
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
- A fix for the promisc/allmulti stuff on USB devices
|
||||
-pre4
|
||||
- Hotplug support for PCI/PLX/USB widgets
|
||||
- A compile fix for 2.2.x (x < 18) kernels and PCI adapters
|
||||
|
|
19
FAQ
19
FAQ
|
@ -179,17 +179,17 @@ Q: My PC crashes when the USB device is plugged in at boot!
|
|||
Q: What's with these "Called from within soft interrupt context" messages?
|
||||
|
||||
This is the result of a workaround to avoid a kernel oops in
|
||||
the USB driver code. You can ignore them.
|
||||
the USB driver code. You can ignore them.
|
||||
|
||||
Q: Why doesn't promiscious mode or monitor mode work under USB?
|
||||
As of 0.1.15-pre5, a different workaround is in place.
|
||||
|
||||
Thanks to a quirk in the networking subsystem of Linux, we
|
||||
can't use synchronous device calls to set the promiscious mode
|
||||
status. Unfortunately, the only call that it affects is the
|
||||
one to turn on promiscious mode. :)
|
||||
Q: Why doesn't promiscuous mode or monitor mode work under USB?
|
||||
|
||||
Monitor mode, on the other hand, is enabled as of 0.1.14-pre6.
|
||||
That said, it's likely to be quite unreliable, especially under
|
||||
Promiscuous mode works just fine, as of 0.1.15-pre5.
|
||||
|
||||
Monitor mode also works, as of 0.1.14-pre6.
|
||||
|
||||
Both modes are likely to be quite unreliable, especially under
|
||||
higher loads thanks to fundamental bandwidth limitations of the
|
||||
USB interface.
|
||||
|
||||
|
@ -204,6 +204,9 @@ Q: How come the /proc/net/wireless info isn't updated when in monitor mode?
|
|||
mode, you're not associated, so this information is by defintion
|
||||
irrelevant.
|
||||
|
||||
And regardless, the hardware doesn't update the registers we poll to get
|
||||
this information while in monitor mode.
|
||||
|
||||
Q: What do the various monitor mode options do?
|
||||
|
||||
enable=[true/false] Turn it on and off. required.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
WLAN_VERSION=0
|
||||
WLAN_PATCHLEVEL=1
|
||||
WLAN_SUBLEVEL=15
|
||||
WLAN_EXTRAVERSION=-pre4
|
||||
WLAN_EXTRAVERSION=-pre5
|
||||
LINUX_SRC=/usr/src/linux
|
||||
WLAN_TARGET_ARCH=
|
||||
PCMCIA_SRC=
|
||||
|
|
|
@ -2220,13 +2220,7 @@ int hfa384x_drvr_getconfig(hfa384x_t *hw, UINT16 rid, void *buf, UINT16 len)
|
|||
int result = 0;
|
||||
DBFENTER;
|
||||
|
||||
if (in_interrupt()) {
|
||||
WLAN_LOG_ERROR0("Called from within soft interrupt context.\n");
|
||||
|
||||
result = -EOPNOTSUPP;
|
||||
} else {
|
||||
result = hfa384x_dorrid(hw, DOWAIT, rid, buf, len, NULL, NULL);
|
||||
}
|
||||
result = hfa384x_dorrid(hw, DOWAIT, rid, buf, len, NULL, NULL);
|
||||
|
||||
DBFEXIT;
|
||||
return result;
|
||||
|
@ -2833,12 +2827,7 @@ int hfa384x_drvr_setconfig(hfa384x_t *hw, UINT16 rid, void *buf, UINT16 len)
|
|||
int result = 0;
|
||||
DBFENTER;
|
||||
|
||||
if (in_interrupt()) {
|
||||
WLAN_LOG_ERROR0("Called from within soft interrupt context.\n");
|
||||
result = -EOPNOTSUPP;
|
||||
} else {
|
||||
result = hfa384x_dowrid(hw, DOWAIT, rid, buf, len, NULL, NULL);
|
||||
}
|
||||
result = hfa384x_dowrid(hw, DOWAIT, rid, buf, len, NULL, NULL);
|
||||
|
||||
DBFEXIT;
|
||||
return result;
|
||||
|
@ -4641,7 +4630,12 @@ hfa384x_usbctlx_submit_wait(
|
|||
break;
|
||||
default:
|
||||
WLAN_LOG_DEBUG0(3,"Sleeping...\n");
|
||||
wait_event_interruptible(hw->waitq, ctlx->wanna_wakeup);
|
||||
if (in_interrupt()) {
|
||||
while(!ctlx->wanna_wakeup)
|
||||
udelay(1000);
|
||||
} else {
|
||||
wait_event_interruptible(hw->waitq, ctlx->wanna_wakeup);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue