usb: dwc3: debugfs: hold the lock in during mode change
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Thu, 20 Oct 2011 16:43:07 +0000 (18:43 +0200)
committerFelipe Balbi <balbi@ti.com>
Mon, 12 Dec 2011 09:48:19 +0000 (11:48 +0200)
The read and write operation is atomic and we need no locking around
this operations. What we need however is a lock that is held which
ensures that the content of the DWC3_GCTL has not been changed. With
this, the conten may have been change changed after the first but before
our write back.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/debugfs.c

index fc49334a01cf77f74bc90cf0a48f90d488295df4..b5370e781500688e9a835d7f8b1b975ce624959d 100644 (file)
@@ -451,7 +451,6 @@ static ssize_t dwc3_mode_write(struct file *file,
 
        spin_lock_irqsave(&dwc->lock, flags);
        reg = dwc3_readl(dwc->regs, DWC3_GCTL);
-       spin_unlock_irqrestore(&dwc->lock, flags);
 
        reg &= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG));
 
@@ -464,7 +463,6 @@ static ssize_t dwc3_mode_write(struct file *file,
        if (!strncmp(buf, "otg", 3))
                reg |= DWC3_GCTL_PRTCAP(DWC3_GCTL_PRTCAP_OTG);
 
-       spin_lock_irqsave(&dwc->lock, flags);
        dwc3_writel(dwc->regs, DWC3_GCTL, reg);
        spin_unlock_irqrestore(&dwc->lock, flags);