On 2022/12/7 11:52, Ping-Ke Shih wrote:
-----Original Message-----
From: Yang Yingliang <yangyingliang@xxxxxxxxxx>
Sent: Wednesday, December 7, 2022 11:44 AM
To: Ping-Ke Shih <pkshih@xxxxxxxxxxx>; kvalo@xxxxxxxxxx
Cc: linux-wireless@xxxxxxxxxxxxxxx; yangyingliang@xxxxxxxxxx
Subject: Re: [PATCH resend 1/3] rtlwifi: rtl8821ae: don't call kfree_skb() under spin_lock_irqsave()
On 2022/12/7 11:31, Ping-Ke Shih wrote:
-----Original Message-----
From: Yang Yingliang <yangyingliang@xxxxxxxxxx>
Sent: Tuesday, December 6, 2022 9:13 PM
To: Ping-Ke Shih <pkshih@xxxxxxxxxxx>; kvalo@xxxxxxxxxx
Cc: linux-wireless@xxxxxxxxxxxxxxx; yangyingliang@xxxxxxxxxx
Subject: [PATCH resend 1/3] rtlwifi: rtl8821ae: don't call kfree_skb() under spin_lock_irqsave()
It is not allowed to call kfree_skb() from hardware interrupt
context or with interrupts being disabled. So add all skb to
a free list, then free them after spin_unlock_irqrestore() at
once.
The patch doesn't change logic, so it should work. But, I would like to know
if there is a comment about this in kernel code. Could you point it out?
You can see comment of dev_kfree_skb_irq() in include/linux/netdevice.h
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/netdevice.h?h=v6
.1-rc8
It seems like we can replace kfree_skb() by dev_kfree_skb_irq(), right?
But your method is more efficient. Is that your point?
Yes, the SKBs have already been dequeued from the queue, so they can be
freed together at once.
Thanks,
Yang
Ping-Ke