mirror of
https://git.FreeBSD.org/src.git
synced 2024-11-21 07:15:49 +00:00
842a2c1ad3
The driver wasn't stable - it would start fine, but during scan it would eventually hang and no further command endpoint transfers would complete. After adding some debugging and looking at the logs I noticed that things went sideways once a /data/ frame was sent. The channel change config happened between the data frame being sent and being completed. My guess is that the firmware doesn't like a channel change and reset whilst there's pending data frames. Checking the Linux driver I found that it was doing a flush before a channel change, and we're doing it afterwards. This acts like a fence around ensuring scheduled TX work has completed. In net80211 the transmit path and the control path aren't serialised, so it's very often the case that ioctls, state changes, etc occur whilst in parallel there are frame transmits being scheduled. This seems to happen more frequently on a more recent, high core (8) machine with XHCI. I remember testing this driver years ago on single and dual core CPU laptops with no problems. So, add some flushes - before a channel change, and during a transition to AUTH when the BSS config is being programmed into the firmware. These two fences seem enough to reliably associate as a 2GHz and 5GHz STA. Note that this isn't entirely blocking all newly queued transmit work from occuring until after the NIC has finished configuration. That will need some further investigation. Locally tested: * Wistron NuWeb AR5523 dual-band NIC, STA mode, 2/5GHz Differential Revision: https://reviews.freebsd.org/D47655 |
||
---|---|---|
.. | ||
aac | ||
aacraid | ||
acpi_support | ||
acpica | ||
adb | ||
adlink | ||
ae | ||
age | ||
agp | ||
ahci | ||
aic7xxx | ||
al_eth | ||
alc | ||
ale | ||
alpm | ||
altera | ||
amd_ecc_inject | ||
amdgpio | ||
amdpm | ||
amdsbwd | ||
amdsmb | ||
amdsmn | ||
amdtemp | ||
arcmsr | ||
asmc | ||
ata | ||
ath | ||
atkbdc | ||
atopcase | ||
axgbe | ||
backlight | ||
bce | ||
beri | ||
bfe | ||
bge | ||
bhnd | ||
bnxt | ||
bwi | ||
bwn | ||
bxe | ||
cadence | ||
cardbus | ||
cas | ||
cesa | ||
cfe | ||
cfi | ||
chromebook_platform | ||
ciss | ||
clk | ||
coretemp | ||
cpuctl | ||
cpufreq | ||
cxgb | ||
cxgbe | ||
cyapa | ||
dc | ||
dcons | ||
dialog/da9063 | ||
dpaa | ||
dpaa2 | ||
dpms | ||
drm2 | ||
dwc | ||
dwwdt | ||
e1000 | ||
efidev | ||
ena | ||
enetc | ||
enic | ||
eqos | ||
et | ||
etherswitch | ||
evdev | ||
exca | ||
fb | ||
fdc | ||
fdt | ||
ffec | ||
filemon | ||
firewire | ||
firmware | ||
flash | ||
ftgpio | ||
ftwd | ||
fxp | ||
gem | ||
glxiic | ||
glxsb | ||
goldfish | ||
gpio | ||
gve | ||
hdmi | ||
hid | ||
hifn | ||
hpt27xx | ||
hptiop | ||
hptmv | ||
hptnr | ||
hptrr | ||
hwpmc | ||
hwreset | ||
hyperv | ||
iavf | ||
ic | ||
ice | ||
ichiic | ||
ichsmb | ||
ichwd | ||
ida | ||
igc | ||
iicbus | ||
imcsmb | ||
intel | ||
intpm | ||
io | ||
ioat | ||
iommu | ||
ipmi | ||
ips | ||
ipw | ||
irdma | ||
isci | ||
iscsi | ||
iser | ||
isl | ||
ismt | ||
isp | ||
ispfw | ||
itwd | ||
iwi | ||
iwm | ||
iwn | ||
ixgbe | ||
ixl | ||
jedec_dimm | ||
jme | ||
kbd | ||
kbdmux | ||
ksyms | ||
kvm_clock | ||
le | ||
led | ||
lge | ||
liquidio | ||
mailbox/arm | ||
malo | ||
mana | ||
mbox | ||
md | ||
mdio | ||
mem | ||
mfi | ||
mgb | ||
mge | ||
mii | ||
mlx | ||
mlx4 | ||
mlx5 | ||
mlxfw | ||
mmc | ||
mmcnull | ||
mpi3mr | ||
mpr | ||
mps | ||
mpt | ||
mrsas | ||
msk | ||
mthca | ||
mvs | ||
mwl | ||
mxge | ||
my | ||
nctgpio | ||
ncthwm | ||
neta | ||
netmap | ||
nfe | ||
nfsmb | ||
nge | ||
nmdm | ||
ntb | ||
null | ||
nvd | ||
nvdimm | ||
nvme | ||
nvmem | ||
nvmf | ||
nvram | ||
oce | ||
ocs_fc | ||
ofw | ||
otus | ||
ow | ||
p2sb | ||
pbio | ||
pccard | ||
pccbb | ||
pcf | ||
pci | ||
phy | ||
pms | ||
powermac_nvram | ||
ppbus | ||
ppc | ||
proto | ||
psci | ||
pst | ||
pty | ||
puc | ||
pwm | ||
qat | ||
qat_c2xxx | ||
qcom_clk | ||
qcom_dwc3 | ||
qcom_gcc | ||
qcom_mdio | ||
qcom_qup | ||
qcom_rnd | ||
qcom_tcsr | ||
qcom_tlmm | ||
qlnx | ||
qlxgb | ||
qlxgbe | ||
qlxge | ||
quicc | ||
ral | ||
random | ||
rccgpio | ||
re | ||
regulator | ||
rl | ||
rndtest | ||
rtsx | ||
rtwn | ||
safe | ||
safexcel | ||
sbni | ||
scc | ||
sdhci | ||
sdio | ||
sec | ||
sff | ||
sfxge | ||
sge | ||
siis | ||
sis | ||
sk | ||
smartpqi | ||
smbios | ||
smbus | ||
smc | ||
snp | ||
sound | ||
speaker | ||
spibus | ||
sram | ||
ste | ||
stge | ||
sume | ||
superio | ||
sym | ||
syscon | ||
syscons | ||
tcp_log | ||
tdfx | ||
ti | ||
tpm | ||
tsec | ||
tws | ||
uart | ||
usb | ||
veriexec | ||
vge | ||
viapm | ||
viawd | ||
video | ||
videomode | ||
virtio | ||
vkbd | ||
vmd | ||
vmgenc | ||
vmm | ||
vmware | ||
vnic | ||
vr | ||
vt | ||
vte | ||
watchdog | ||
wbwd | ||
wdatwd | ||
wg | ||
wpi | ||
wtap | ||
xdma | ||
xen | ||
xilinx | ||
xl | ||
xz | ||
zlib |