ath9k: implement IO serialization
All 802.11n PCI devices (Cardbus, PCI, mini-PCI) require serialization of IO when on non-uniprocessor systems. PCI express devices not not require this. This should fix our only last standing open ath9k kernel.org bugzilla bug report: http://bugzilla.kernel.org/show_bug.cgi?id=12110 A port is probably required to older kernels and I can work on that. Cc: stable@kernel.org Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
6f16bf3bdb
commit
6158425be3
@@ -437,6 +437,25 @@ static void ath9k_hw_set_defaults(struct ath_hal *ah)
|
||||
}
|
||||
|
||||
ah->ah_config.intr_mitigation = 1;
|
||||
|
||||
/*
|
||||
* We need this for PCI devices only (Cardbus, PCI, miniPCI)
|
||||
* _and_ if on non-uniprocessor systems (Multiprocessor/HT).
|
||||
* This means we use it for all AR5416 devices, and the few
|
||||
* minor PCI AR9280 devices out there.
|
||||
*
|
||||
* Serialization is required because these devices do not handle
|
||||
* well the case of two concurrent reads/writes due to the latency
|
||||
* involved. During one read/write another read/write can be issued
|
||||
* on another CPU while the previous read/write may still be working
|
||||
* on our hardware, if we hit this case the hardware poops in a loop.
|
||||
* We prevent this by serializing reads and writes.
|
||||
*
|
||||
* This issue is not present on PCI-Express devices or pre-AR5416
|
||||
* devices (legacy, 802.11abg).
|
||||
*/
|
||||
if (num_possible_cpus() > 1)
|
||||
ah->ah_config.serialize_regmode = SER_REG_MODE_AUTO;
|
||||
}
|
||||
|
||||
static struct ath_hal_5416 *ath9k_hw_newstate(u16 devid,
|
||||
|
Reference in New Issue
Block a user