aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb/chipidea
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2012-11-01 11:05:28 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-11-02 09:25:20 -0700
commit57465109ce6c62e57b98788496c823c2067253c0 (patch)
treec18e22dd3abb8b8ea02b15414f81f2d348a8a0e9 /drivers/usb/chipidea
parentd1bb67a7a2a5a5ff49b0ef4d191725769243e639 (diff)
downloadlinux-stericsson-57465109ce6c62e57b98788496c823c2067253c0.tar.gz
USB: ohci-exynos: initialize registers pointer earlier
In the former code, we have a race condition between the first interrupt and the regs field initilization in the usb_hcd structure. If the OHCI irq fires before hcd->regs is set, we are getting a null pointer dereference in ohci_irq. When calling usb_add_hcd(), it first executes the reset() callback, then enables the ohci interrupt, and finally executes the start() callback. So moving the ohci_init() call which actually initializes the reg field from start() to reset() should remove the race. Tested by enabling the external HSIC hub in the bootloader on an exynos5 machine and booting. With the former code, this triggers an early interrupt about 50% of the boots and a subsequent kernel panic in ohci_irq when trying to access the registers. Cc: Olof Johansson <olofj@chromium.org> Cc: Doug Anderson <dianders@chromium.org> Cc: Arjun.K.V <arjun.kv@samsung.com> Cc: Vikas Sajjan <vikas.sajjan@samsung.com> Cc: Abhilash Kesavan <a.kesavan@samsung.com> Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/chipidea')
0 files changed, 0 insertions, 0 deletions