This series fixes two PicoLCD locking problems. The first moves output requests into sleepable context and serializes LED state updates. The second breaks the last-close/deferred-worker lock dependency using a private framebuffer update mutex.
The first patch was tested separately with the original syzkaller C reproducer and bounded concurrent sysfs/UHID-destroy workloads on PREEMPT_RT. The complete series additionally passed repeated framebuffer open/write/close and persistent-open framebuffer tests. Pre-fix modules reproduced the respective failures. Physical hardware, prolonged stress and suspend/resume have not been tested. Patch 2's Fixes tag identifies the fbdev change that began draining deferred work from fb_release() while holding info->lock. Patch 1's Fixes tag was checked against the upstream transport-conversion diff. Changes in v2: - Address Sebastian Andrzej Siewior's feedback: clarify that the issue is not specific to PREEMPT_RT and identify picolcd_data::lock as a spinlock_t in patch 1. The code changes are identical to v1. Aveline Noir (2): HID: picolcd: Move output requests out of spinlocked sections HID: picolcd: Avoid framebuffer last-close deadlock drivers/hid/hid-picolcd.h | 4 +++ drivers/hid/hid-picolcd_backlight.c | 7 ++-- drivers/hid/hid-picolcd_core.c | 46 +++++++++++++++--------- drivers/hid/hid-picolcd_fb.c | 56 ++++++++++++++++++----------- drivers/hid/hid-picolcd_lcd.c | 7 ++-- drivers/hid/hid-picolcd_leds.c | 31 +++++++++------- 6 files changed, 93 insertions(+), 58 deletions(-) base-commit: 72d3fcf802c45d00b300f25b848a93c3a2bd7c7e -- 2.55.0
