2022-12-06 17:37:19

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: btusb: don't call kfree_skb() under spin_lock_irqsave()

Hi Yang,

On Tue, Dec 6, 2022 at 5:01 AM Yang Yingliang <[email protected]> wrote:
>
> It is not allowed to call kfree_skb() from hardware interrupt
> context or with interrupts being disabled. So replace kfree_skb()
> with dev_kfree_skb_irq() under spin_lock_irqsave().
>
> Fixes: 803b58367ffb ("Bluetooth: btusb: Implement driver internal packet reassembly")
> Signed-off-by: Yang Yingliang <[email protected]>
> ---
> drivers/bluetooth/btusb.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index 271963805a38..772f2b0cb10d 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -802,13 +802,13 @@ static inline void btusb_free_frags(struct btusb_data *data)
>
> spin_lock_irqsave(&data->rxlock, flags);
>
> - kfree_skb(data->evt_skb);
> + dev_kfree_skb_irq(data->evt_skb);
> data->evt_skb = NULL;
>
> - kfree_skb(data->acl_skb);
> + dev_kfree_skb_irq(data->acl_skb);
> data->acl_skb = NULL;
>
> - kfree_skb(data->sco_skb);
> + dev_kfree_skb_irq(data->sco_skb);
> data->sco_skb = NULL;
>
> spin_unlock_irqrestore(&data->rxlock, flags);
> --
> 2.25.1

This sounds like a better way to handle in the following set as well:

https://patchwork.kernel.org/project/bluetooth/list/?series=701842

Could you please rework the entire set to use dev_kfree_skb_irq?

--
Luiz Augusto von Dentz