From 02923fa81a2697ff4c5cbc102183e50302d07b6d Mon Sep 17 00:00:00 2001 From: Pratham Pratap Date: Mon, 7 Aug 2023 12:01:01 +0530 Subject: [PATCH] usb: gadget: cdev: Don't use spinlock with sleeping functions Commit c99a841d40aa8 ("usb: gadget: cdev: Add spinlock to synchronize ports->cbits_updated")added spinlock to synchronize ports->cbits_updated which is calling a sleeping function(put_user) after spinlock is held. Fix this by protecting just variable, ports->cbits_updated. Change-Id: I0a52a88344c449c9485f41b871cc97e54b4bf3ca Signed-off-by: Pratham Pratap --- drivers/usb/gadget/function/f_cdev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/usb/gadget/function/f_cdev.c b/drivers/usb/gadget/function/f_cdev.c index f1044c29027a..1f9751d251de 100644 --- a/drivers/usb/gadget/function/f_cdev.c +++ b/drivers/usb/gadget/function/f_cdev.c @@ -1639,13 +1639,13 @@ static long f_cdev_ioctl(struct file *fp, unsigned int cmd, break; case TIOCMGET: pr_debug("TIOCMGET on port(%s)%pK\n", port->name, port); - spin_lock_irqsave(&port->port_lock, flags); ret = f_cdev_tiocmget(port); if (ret >= 0) { ret = put_user(ret, (uint32_t *)arg); + spin_lock_irqsave(&port->port_lock, flags); port->cbits_updated = false; + spin_unlock_irqrestore(&port->port_lock, flags); } - spin_unlock_irqrestore(&port->port_lock, flags); break; default: pr_err("Received cmd:%d not supported\n", cmd);