From 352b6f63cf72f8e893c9f467758eec418d5f9183 Mon Sep 17 00:00:00 2001 From: Kisang Lee Date: Wed, 3 Feb 2021 14:13:12 +0900 Subject: [PATCH] [RAMEN9610-21969][9610] usb: gadget: add lock to avoid panic in composite_suspend Change-Id: Ic38e507a0a7c94778826b73f471b61065bff9b51 Signed-off-by: Kisang Lee --- drivers/usb/gadget/composite.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 5c3be2f43970..4adf33f12beb 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -2343,12 +2343,26 @@ fail: void __nocfi composite_suspend(struct usb_gadget *gadget) { - struct usb_composite_dev *cdev = get_gadget_data(gadget); + struct usb_composite_dev *cdev = NULL; struct usb_function *f; + unsigned long flags; /* REVISIT: should we have config level * suspend/resume callbacks? */ + + if (gadget == NULL) { + pr_info("%s: gadget is NULL\n", __func__); + return; + } + + cdev = get_gadget_data(gadget); + if (!cdev) { + pr_info("%s: cdev is NULL\n", __func__); + return; + } + + spin_lock_irqsave(&cdev->lock, flags); DBG(cdev, "suspend\n"); if (cdev->config) { list_for_each_entry(f, &cdev->config->functions, list) { @@ -2359,6 +2373,8 @@ void __nocfi composite_suspend(struct usb_gadget *gadget) if (cdev->driver->suspend) cdev->driver->suspend(cdev); + spin_unlock_irqrestore(&cdev->lock, flags); + cdev->suspended = 1; usb_gadget_set_selfpowered(gadget); -- 2.20.1