USB: composite: Release spinlock before WARN()

if WARN() is called under spinlock, it will lead crash due to
watchdog timeout. Hence fix it by releasing spinlock before calling
WARN(). And also check cdev->config is NULL or not before calling
WARN().

Change-Id: Iebd00932b94164e9f40aa6126a2352437b1141ed
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
Signed-off-by: Chandana Kishori Chiluveru <cchiluve@codeaurora.org>
This commit is contained in:
Chandana Kishori Chiluveru 2017-10-31 11:33:23 +05:30 • committed by Gerrit - the friendly Code Review server
commit 2e6480dbe7

View file

@ -2505,7 +2505,13 @@ void usb_composite_setup_continue(struct usb_composite_dev *cdev)
spin_lock_irqsave(&cdev->lock, flags);
if (cdev->delayed_status == 0) {
if (!cdev->config) {
spin_unlock_irqrestore(&cdev->lock, flags);
return;
}
spin_unlock_irqrestore(&cdev->lock, flags);
WARN(cdev, "%s: Unexpected call\n", __func__);
return;
} else if (--cdev->delayed_status == 0) {
DBG(cdev, "%s: Completing delayed status\n", __func__);