4071bf121d
There are sleep in atomic bug that could cause kernel panic during firmware download process. The root cause is that nlmsg_new with GFP_KERNEL parameter is called in fw_dnld_timeout which is a timer handler. The call trace is shown below: BUG: sleeping function called from invalid context at include/linux/sched/mm.h:265 Call Trace: kmem_cache_alloc_node __alloc_skb nfc_genl_fw_download_done call_timer_fn __run_timers.part.0 run_timer_softirq __do_softirq ... The nlmsg_new with GFP_KERNEL parameter may sleep during memory allocation process, and the timer handler is run as the result of a "software interrupt" that should not call any other function that could sleep. This patch changes allocation mode of netlink message from GFP_KERNEL to GFP_ATOMIC in order to prevent sleep in atomic bug. The GFP_ATOMIC flag makes memory allocation operation could be used in atomic context. Fixes: |
||
---|---|---|
.. | ||
hci | ||
nci | ||
Kconfig | ||
Makefile | ||
af_nfc.c | ||
core.c | ||
digital.h | ||
digital_core.c | ||
digital_dep.c | ||
digital_technology.c | ||
llcp.h | ||
llcp_commands.c | ||
llcp_core.c | ||
llcp_sock.c | ||
netlink.c | ||
nfc.h | ||
rawsock.c |