diff options
author | Jia-Ju Bai <baijiaju1990@gmail.com> | 2018-01-26 23:57:01 +0800 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2018-02-07 09:48:56 +0100 |
commit | 1ebbf046273e50cf3cbf2ec13d520dc74ab454d4 (patch) | |
tree | aec737a39b0b5515a29dd5563ea99ad6a2aadce8 /drivers/bluetooth/btmrvl_main.c | |
parent | 688d6240e0646a56ff8bdffb2310dcdeca354814 (diff) | |
download | linux-stable-1ebbf046273e50cf3cbf2ec13d520dc74ab454d4.tar.gz linux-stable-1ebbf046273e50cf3cbf2ec13d520dc74ab454d4.tar.bz2 linux-stable-1ebbf046273e50cf3cbf2ec13d520dc74ab454d4.zip |
Bluetooth: btmrvl_main: Replace GFP_ATOMIC with GFP_KERNEL in btmrvl_send_sync_cmd
After checking all possible call chains to btmrvl_send_sync_cmd(),
my tool finds that this function is never called in atomic context,
namely never in an interrupt handler or holding a spinlock.
And it calls wait_event_interruptible_timeout() after bt_skb_alloc(),
so it indicates that btmrvl_send_sync_cmd()
can call function which can sleep.
Thus GFP_ATOMIC is not necessary, and it can be replaced with GFP_KERNEL.
This is found by a static analysis tool named DCNS written by myself.
Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'drivers/bluetooth/btmrvl_main.c')
-rw-r--r-- | drivers/bluetooth/btmrvl_main.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c index b280d466f05b..f6c694a1b9b0 100644 --- a/drivers/bluetooth/btmrvl_main.c +++ b/drivers/bluetooth/btmrvl_main.c @@ -183,7 +183,7 @@ static int btmrvl_send_sync_cmd(struct btmrvl_private *priv, u16 opcode, return -EFAULT; } - skb = bt_skb_alloc(HCI_COMMAND_HDR_SIZE + len, GFP_ATOMIC); + skb = bt_skb_alloc(HCI_COMMAND_HDR_SIZE + len, GFP_KERNEL); if (!skb) { BT_ERR("No free skb"); return -ENOMEM; |