Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe41aca1 authored by Pratham Pratap's avatar Pratham Pratap
Browse files

usb: gadget: cdev: Fix spinlock recursion



Commit c99a841d ("usb: gadget: cdev: Add spinlock to synchronize
ports->cbits_updated")added spinlock to synchronize ports->cbits_updated
which is causing a spinlock recursion in usb_cser_notify_modem.

Fix this by unlocking the spinlock before it calls send_modem_ctrl_bits
which in turn tries to acquire the same spinlock.

Change-Id: I744ea93d7da60aaf27044400cf457cc81dab151d
Signed-off-by: default avatarPratham Pratap <quic_ppratap@quicinc.com>
parent c99a841d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1679,6 +1679,7 @@ static void usb_cser_notify_modem(void *fport, int ctrl_bits)
	spin_lock_irqsave(&port->port_lock, flags);
	port->cbits_to_modem = temp;
	port->cbits_updated = true;
	spin_unlock_irqrestore(&port->port_lock, flags);

	 /* if DTR is high, update latest modem info to laptop */
	if (port->cbits_to_modem & TIOCM_DTR) {
@@ -1691,7 +1692,6 @@ static void usb_cser_notify_modem(void *fport, int ctrl_bits)
			cser->send_modem_ctrl_bits(cser, cbits_to_laptop);
	}

	spin_unlock_irqrestore(&port->port_lock, flags);
	wake_up(&port->read_wq);
}