1 From foo@baz Tue Aug 28 16:10:37 CEST 2018
2 From: Jia-Ju Bai <baijiaju1990@gmail.com>
3 Date: Wed, 20 Jun 2018 11:54:53 +0800
4 Subject: usb: gadget: r8a66597: Fix two possible sleep-in-atomic-context bugs in init_controller()
6 From: Jia-Ju Bai <baijiaju1990@gmail.com>
8 [ Upstream commit 0602088b10a7c0b4e044a810678ef93d7cc5bf48 ]
10 The driver may sleep with holding a spinlock.
11 The function call paths (from bottom to top) in Linux-4.16.7 are:
14 drivers/usb/gadget/udc/r8a66597-udc.c, 839:
15 msleep in init_controller
16 drivers/usb/gadget/udc/r8a66597-udc.c, 96:
17 init_controller in r8a66597_usb_disconnect
18 drivers/usb/gadget/udc/r8a66597-udc.c, 93:
19 spin_lock in r8a66597_usb_disconnect
22 drivers/usb/gadget/udc/r8a66597-udc.c, 835:
23 msleep in init_controller
24 drivers/usb/gadget/udc/r8a66597-udc.c, 96:
25 init_controller in r8a66597_usb_disconnect
26 drivers/usb/gadget/udc/r8a66597-udc.c, 93:
27 spin_lock in r8a66597_usb_disconnect
29 To fix these bugs, msleep() is replaced with mdelay().
31 This bug is found by my static analysis tool (DSAC-2) and checked by
34 Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
35 Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
36 Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
37 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
39 drivers/usb/gadget/udc/r8a66597-udc.c | 4 ++--
40 1 file changed, 2 insertions(+), 2 deletions(-)
42 --- a/drivers/usb/gadget/udc/r8a66597-udc.c
43 +++ b/drivers/usb/gadget/udc/r8a66597-udc.c
44 @@ -835,11 +835,11 @@ static void init_controller(struct r8a66
46 r8a66597_bset(r8a66597, XCKE, SYSCFG0);
51 r8a66597_bset(r8a66597, PLLC, SYSCFG0);
56 r8a66597_bset(r8a66597, SCKE, SYSCFG0);