ath9k: use GFP_ATOMIC under spinlock
authorDan Carpenter <dan.carpenter@oracle.com>
Tue, 16 Apr 2013 07:51:28 +0000 (10:51 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 22 Apr 2013 19:20:14 +0000 (15:20 -0400)
This is called with spinlocks held so we have to use GFP_ATOMIC.  It's
the sc_pcu_lock in ath9k_stop() that's the issue.  The call tree looks
like this:

ath9k_stop()
ath_prepare_reset()
ath_stoprecv()
ath_flushrecv()
ath_rx_tasklet()
ath9k_dfs_process_phyerr()
pd->add_pulse() => dpd_add_pulse()
channel_detector_get()
channel_detector_create()
pri_detector_init()

channel_detector_create() uses GFP_ATOMIC as well.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Tested-by: Zefir Kurtisi <zefir.kurtisi@neratec.com>
Acked-by: Zefir Kurtisi <zefir.kurtisi@neratec.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/dfs_pri_detector.c

index b3e7cf2..344b5d5 100644 (file)
@@ -406,7 +406,8 @@ static struct pri_sequence *pri_detector_add_pulse(struct pri_detector *de,
 struct pri_detector *pri_detector_init(const struct radar_detector_specs *rs)
 {
        struct pri_detector *de;
-       de = kzalloc(sizeof(*de), GFP_KERNEL);
+
+       de = kzalloc(sizeof(*de), GFP_ATOMIC);
        if (de == NULL)
                return NULL;
        de->exit = pri_detector_exit;