lkml.org 
[lkml]   [2018]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH V2] hid: hid-core: Fix a sleep-in-atomic-context bug in __hid_request()
On Thu, 13 Sep 2018, Jia-Ju Bai wrote:

> hid_alloc_report_buf() has to be called with GFP_ATOMIC in
> __hid_request(), because there are the following callchains
> leading to __hid_request() being an atomic context:
>
> picolcd_send_and_wait (acquire a spinlock)
> hid_hw_request
> __hid_request
> hid_alloc_report_buf(GFP_KERNEL)
>
> picolcd_reset (acquire a spinlock)
> hid_hw_request
> __hid_request
> hid_alloc_report_buf(GFP_KERNEL)
>
> lg4ff_play (acquire a spinlock)
> hid_hw_request
> __hid_request
> hid_alloc_report_buf(GFP_KERNEL)
>
> lg4ff_set_autocenter_ffex (acquire a spinlock)
> hid_hw_request
> __hid_request
> hid_alloc_report_buf(GFP_KERNEL)

Hm, so it's always drivers calling out into core in atomic context. So
either we take this, and put our bets on being able to allocate the buffer
without sleeping, or actually fix the few drivers (it's just lg4ff and
picolcd at the end of the day) not to do that, and explicitly anotate
__hid_request() with might_sleep().

Hmm?

Thanks,

--
Jiri Kosina
SUSE Labs

\
 
 \ /
  Last update: 2018-09-24 11:27    [W:0.051 / U:0.056 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site