b503d0228c
[ Upstream commit 23dd4581350d4ffa23d58976ec46408f8f4c1e16 ]
There are sleep in atomic context bugs when the request to secure
element of st-nci is timeout. The root cause is that nci_skb_alloc
with GFP_KERNEL parameter is called in st_nci_se_wt_timeout which is
a timer handler. The call paths that could trigger bugs are shown below:
(interrupt context 1)
st_nci_se_wt_timeout
nci_hci_send_event
nci_hci_send_data
nci_skb_alloc(..., GFP_KERNEL) //may sleep
(interrupt context 2)
st_nci_se_wt_timeout
nci_hci_send_event
nci_hci_send_data
nci_send_data
nci_queue_tx_data_frags
nci_skb_alloc(..., GFP_KERNEL) //may sleep
This patch changes allocation mode of nci_skb_alloc from GFP_KERNEL to
GFP_ATOMIC in order to prevent atomic context sleeping. The GFP_ATOMIC
flag makes memory allocation operation could be used in atomic context.
Fixes:
|
||
---|---|---|
.. | ||
hci | ||
nci | ||
af_nfc.c | ||
core.c | ||
digital_core.c | ||
digital_dep.c | ||
digital_technology.c | ||
digital.h | ||
Kconfig | ||
llcp_commands.c | ||
llcp_core.c | ||
llcp_sock.c | ||
llcp.h | ||
Makefile | ||
netlink.c | ||
nfc.h | ||
rawsock.c |