ath9k: Handle -ENOMEM on RX gracefully
authorLuis R. Rodriguez <lrodriguez@atheros.com>
Sat, 22 Nov 2008 01:41:33 +0000 (17:41 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 26 Nov 2008 14:47:44 +0000 (09:47 -0500)
commitcb71d9bafb37adab50ddce53bb119a84b4966c06
treea6fb54b339748309de9e20455910c402de942b5c
parent24689c8590be6bc0486af665c5ceda6aeff4d53a
ath9k: Handle -ENOMEM on RX gracefully

We would get an oops on RX on -ENOMEM by passing
NULL to the hardware on ath_rx_buf_link(). The oops
would look something like this:

ath_rx_tasklet+0x515/0x53b
ath9k_tasklet+0x48
tasklet_action
__do_softirq
irq_exit
do_IRQ

RIP: ath_rx_buf_link+0x3a

We correct this by handling the requeue directly on
the ath_rx_tasklet() and trying to allocate an skb
*prior* to sending up the last hardware processed
skb. If we run out of memory this gauranteees we have
skbs to work with while it simply drops new received
frames.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath9k/recv.c