[JAUNTY] UBUNTU: SAUCE: Added patch to ath5k driver: protect reset sequence by a spinlock
Stefan Bader
stefan.bader at canonical.com
Mon May 4 10:00:19 UTC 2009
Tim Gardner wrote:
> Manoj Iyer wrote:
>> SRU JUSTIFICATION:
>>
>> IMPACT: ath5k driver hangs periodically
>> FIX: protect reset sequence by a spinlock
>> TEST: Both amd64 and i386 kernels in
>> http://people.ubuntu.com/~manjo/lp356768-jaunty/
>> were tested.
>>
>> The following changes since commit
>> a63b7d7beeaa1f8f33369cab6419831fa8991e40:
>> Tyler Hicks (1):
>> UBUNTU: SAUCE: (drop after 2.6.28) [PATCH] eCryptfs: Larger buffer
>> for encrypted symlink targets
>>
>> are available in the git repository at:
>>
>> git://kernel.ubuntu.com/manjo/ubuntu-jaunty.git lp356768
>>
>> Manoj Iyer (1):
>> UBUNTU: SAUCE: Added patch to ath5k driver: protect reset sequence
>> by a spinlock
>>
>> drivers/net/wireless/ath5k/base.c | 6 ++++++
>> drivers/net/wireless/ath5k/base.h | 1 +
>> drivers/net/wireless/ath5k/phy.c | 2 +-
>> 3 files changed, 8 insertions(+), 1 deletions(-)
>>
>>
>> From 9f03cfed8629c1e8cef710cf6d0ddc972ba38768 Mon Sep 17 00:00:00 2001
>> From: Manoj Iyer <manoj.iyer at canonical.com>
>> Date: Wed, 22 Apr 2009 13:41:11 -0500
>> Subject: [PATCH] UBUNTU: SAUCE: Added patch to ath5k driver: protect reset sequence by a spinlock
>>
>> OriginalAuthor: Bob Copeland <me at bobcopeland.com>
>>
>> Bug: #356768
>> BugLink: https://bugs.launchpad.net/linux/+bug/356768
>>
>> Signed-off-by: Manoj Iyer <manoj.iyer at canonical.com>
>> ---
>> drivers/net/wireless/ath5k/base.c | 6 ++++++
>> drivers/net/wireless/ath5k/base.h | 1 +
>> drivers/net/wireless/ath5k/phy.c | 2 +-
>> 3 files changed, 8 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
>> index e521555..0f59b4d 100644
>> --- a/drivers/net/wireless/ath5k/base.c
>> +++ b/drivers/net/wireless/ath5k/base.c
>> @@ -525,6 +525,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
>> sc->cachelsz = csz * sizeof(u32); /* convert to bytes */
>> sc->opmode = NL80211_IFTYPE_STATION;
>> mutex_init(&sc->lock);
>> + spin_lock_init(&sc->restlock);
>> spin_lock_init(&sc->rxbuflock);
>> spin_lock_init(&sc->txbuflock);
>> spin_lock_init(&sc->block);
>> @@ -2665,6 +2666,7 @@ ath5k_reset(struct ath5k_softc *sc, bool stop, bool change_channel)
>> {
>> struct ath5k_hw *ah = sc->ah;
>> int ret;
>> + unsigned long flags;
>>
>> ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
>>
>> @@ -2673,7 +2675,11 @@ ath5k_reset(struct ath5k_softc *sc, bool stop, bool change_channel)
>> ath5k_txq_cleanup(sc);
>> ath5k_rx_stop(sc);
>> }
>> +
>> + spin_lock_irqsave(&sc->restlock, flags);
>> ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, true);
>> + spin_unlock_irqrestore(&sc->restlock, flags);
>> +
>> if (ret) {
>> ATH5K_ERR(sc, "can't reset hardware (%d)\n", ret);
>> goto err;
>> diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h
>> index facc60d..bd08aae 100644
>> --- a/drivers/net/wireless/ath5k/base.h
>> +++ b/drivers/net/wireless/ath5k/base.h
>> @@ -152,6 +152,7 @@ struct ath5k_softc {
>> led_off; /* off time for current blink */
>>
>> struct tasklet_struct restq; /* reset tasklet */
>> + spinlock_t restlock; /* protects reset state */
>>
>> unsigned int rxbufsize; /* rx size based on mtu */
>> struct list_head rxbuf; /* receive buffer */
>> diff --git a/drivers/net/wireless/ath5k/phy.c b/drivers/net/wireless/ath5k/phy.c
>> index 35c7eb1..51e20d5 100644
>> --- a/drivers/net/wireless/ath5k/phy.c
>> +++ b/drivers/net/wireless/ath5k/phy.c
>> @@ -1620,7 +1620,7 @@ int ath5k_hw_rfregs(struct ath5k_hw *ah, struct ieee80211_channel *channel,
>>
>> if (ah->ah_rf_banks == NULL) {
>> /* XXX do extra checks? */
>> - ah->ah_rf_banks = kmalloc(ah->ah_rf_banks_size, GFP_KERNEL);
>> + ah->ah_rf_banks = kmalloc(ah->ah_rf_banks_size, GFP_ATOMIC);
>> if (ah->ah_rf_banks == NULL) {
>> ATH5K_ERR(ah->ah_sc, "out of memory\n");
>> return -ENOMEM;
>
> This appears to be coming via stable updates. Shall we just wait and get
> it for free? If you can intercept this commit from 2.6.28.y before
> Stefan pulls from the stable tree, then just 'cherry-pick -x' it and add
> the Bug number so you get LP changelog bot goodness.
>
> rtg
If I looked at this correctly this patch is neither in stables, nor in the
current tree of Linux (have not checked tip-latest). It looks as it only exists
on the upstream mailing list.
@manoj, as Tim said, please add the Bug (and BugLink too) headers.
Stefan
--
When all other means of communication fail, try words!
More information about the kernel-team
mailing list