Linux USB
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@01.org, Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
Cc: kbuild-all@01.org, Felipe Balbi <balbi@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org, John Youn <John.Youn@synopsys.com>
Subject: usb: dwc2: Disable all EP's on disconnect
Date: Thu, 20 Sep 2018 12:48:56 +0300	[thread overview]
Message-ID: <20180920094856.ov64eknm2zx4td7v@mwanda> (raw)

Hi Minas,

url:    https://github.com/0day-ci/linux/commits/Minas-Harutyunyan/usb-dwc2-Disable-all-EP-s-on-disconnect/20180919-104259
base:   https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next

smatch warnings:
drivers/usb/dwc2/gadget.c:4024 dwc2_hsotg_ep_disable() error: double unlock 'spin_lock:&hsotg->lock'
drivers/usb/dwc2/gadget.c:4350 dwc2_hsotg_udc_stop() error: double unlock 'spin_lock:&hsotg->lock'

# https://github.com/0day-ci/linux/commit/a4705c3fee2053e95791210eb435a04b665f6dc3
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout a4705c3fee2053e95791210eb435a04b665f6dc3
vim +4024 drivers/usb/dwc2/gadget.c

5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  3993  
8b9bc4608 drivers/usb/gadget/s3c-hsotg.c Lukasz Majewski    2012-05-04  3994  /**
1f91b4cc0 drivers/usb/dwc2/gadget.c      Felipe Balbi       2015-08-06  3995   * dwc2_hsotg_ep_disable - disable given endpoint
8b9bc4608 drivers/usb/gadget/s3c-hsotg.c Lukasz Majewski    2012-05-04  3996   * @ep: The endpoint to disable.
8b9bc4608 drivers/usb/gadget/s3c-hsotg.c Lukasz Majewski    2012-05-04  3997   */
1f91b4cc0 drivers/usb/dwc2/gadget.c      Felipe Balbi       2015-08-06  3998  static int dwc2_hsotg_ep_disable(struct usb_ep *ep)
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  3999  {
1f91b4cc0 drivers/usb/dwc2/gadget.c      Felipe Balbi       2015-08-06  4000  	struct dwc2_hsotg_ep *hs_ep = our_ep(ep);
941fcce4f drivers/usb/dwc2/gadget.c      Dinh Nguyen        2014-11-11  4001  	struct dwc2_hsotg *hsotg = hs_ep->parent;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4002  	int dir_in = hs_ep->dir_in;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4003  	int index = hs_ep->index;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4004  	unsigned long flags;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4005  	u32 epctrl_reg;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4006  	u32 ctrl;
a4705c3fe drivers/usb/dwc2/gadget.c      Minas Harutyunyan  2018-09-18  4007  	int locked;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4008  
1e0112937 drivers/usb/dwc2/gadget.c      Marek Szyprowski   2014-09-09  4009  	dev_dbg(hsotg->dev, "%s(ep %p)\n", __func__, ep);
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4010  
c6f5c050e drivers/usb/dwc2/gadget.c      Mian Yousaf Kaukab 2015-01-09  4011  	if (ep == &hsotg->eps_out[0]->ep) {
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4012  		dev_err(hsotg->dev, "%s: called for ep0\n", __func__);
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4013  		return -EINVAL;
9b481092c drivers/usb/dwc2/gadget.c      John Stultz        2017-10-23  4014  	}
9b481092c drivers/usb/dwc2/gadget.c      John Stultz        2017-10-23  4015  
9b481092c drivers/usb/dwc2/gadget.c      John Stultz        2017-10-23  4016  	if (hsotg->op_state != OTG_STATE_B_PERIPHERAL) {
9b481092c drivers/usb/dwc2/gadget.c      John Stultz        2017-10-23  4017  		dev_err(hsotg->dev, "%s: called in host mode?\n", __func__);
9b481092c drivers/usb/dwc2/gadget.c      John Stultz        2017-10-23  4018  		return -EINVAL;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4019  	}
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4020  
94cb8fd63 drivers/usb/gadget/s3c-hsotg.c Lukasz Majewski    2012-05-04  4021  	epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4022  
a4705c3fe drivers/usb/dwc2/gadget.c      Minas Harutyunyan  2018-09-18  4023  	locked = spin_trylock(&hsotg->lock);
a4705c3fe drivers/usb/dwc2/gadget.c      Minas Harutyunyan  2018-09-18 @4024  	spin_unlock(&hsotg->lock);
5ad1d3160 drivers/usb/gadget/s3c-hsotg.c Lukasz Majewski    2012-06-14  4025  	spin_lock_irqsave(&hsotg->lock, flags);


This is obviously deliberate that we drop the other thread's lock and
then take it ourselves.  But I don't think that can be right at all.
How do we know that it's safe for the other thread to drop the lock?

There should at least be a long comment in front of the code explaining
why it's safe to steal the lock like this.


5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4026  
f25c42b8d drivers/usb/dwc2/gadget.c      Gevorg Sahakyan    2018-07-26  4027  	ctrl = dwc2_readl(hsotg, epctrl_reg);
a4f827714 drivers/usb/dwc2/gadget.c      Vahram Aharonyan   2016-11-14  4028  
a4f827714 drivers/usb/dwc2/gadget.c      Vahram Aharonyan   2016-11-14  4029  	if (ctrl & DXEPCTL_EPENA)
a4f827714 drivers/usb/dwc2/gadget.c      Vahram Aharonyan   2016-11-14  4030  		dwc2_hsotg_ep_stop_xfr(hsotg, hs_ep);
a4f827714 drivers/usb/dwc2/gadget.c      Vahram Aharonyan   2016-11-14  4031  
47a1685f1 drivers/usb/dwc2/gadget.c      Dinh Nguyen        2014-04-14  4032  	ctrl &= ~DXEPCTL_EPENA;
47a1685f1 drivers/usb/dwc2/gadget.c      Dinh Nguyen        2014-04-14  4033  	ctrl &= ~DXEPCTL_USBACTEP;
47a1685f1 drivers/usb/dwc2/gadget.c      Dinh Nguyen        2014-04-14  4034  	ctrl |= DXEPCTL_SNAK;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4035  
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4036  	dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
f25c42b8d drivers/usb/dwc2/gadget.c      Gevorg Sahakyan    2018-07-26  4037  	dwc2_writel(hsotg, ctrl, epctrl_reg);
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4038  
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4039  	/* disable endpoint interrupts */
1f91b4cc0 drivers/usb/dwc2/gadget.c      Felipe Balbi       2015-08-06  4040  	dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 0);
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4041  
1141ea01d drivers/usb/dwc2/gadget.c      Mian Yousaf Kaukab 2015-01-09  4042  	/* terminate all requests with shutdown */
1141ea01d drivers/usb/dwc2/gadget.c      Mian Yousaf Kaukab 2015-01-09  4043  	kill_all_requests(hsotg, hs_ep, -ESHUTDOWN);
1141ea01d drivers/usb/dwc2/gadget.c      Mian Yousaf Kaukab 2015-01-09  4044  
1c07b20ea drivers/usb/dwc2/gadget.c      Robert Baldyga     2016-08-29  4045  	hsotg->fifo_map &= ~(1 << hs_ep->fifo_index);
1c07b20ea drivers/usb/dwc2/gadget.c      Robert Baldyga     2016-08-29  4046  	hs_ep->fifo_index = 0;
1c07b20ea drivers/usb/dwc2/gadget.c      Robert Baldyga     2016-08-29  4047  	hs_ep->fifo_size = 0;
1c07b20ea drivers/usb/dwc2/gadget.c      Robert Baldyga     2016-08-29  4048  
22258f490 drivers/usb/gadget/s3c-hsotg.c Lukasz Majewski    2012-06-14  4049  	spin_unlock_irqrestore(&hsotg->lock, flags);
a4705c3fe drivers/usb/dwc2/gadget.c      Minas Harutyunyan  2018-09-18  4050  	if (!locked)
a4705c3fe drivers/usb/dwc2/gadget.c      Minas Harutyunyan  2018-09-18  4051  		spin_lock(&hsotg->lock);
a4705c3fe drivers/usb/dwc2/gadget.c      Minas Harutyunyan  2018-09-18  4052  
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4053  	return 0;
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4054  }
5b7d70c6d drivers/usb/gadget/s3c-hsotg.c Ben Dooks          2009-06-02  4055
---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

             reply	other threads:[~2018-09-20  9:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-20  9:48 Dan Carpenter [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-09-20 10:30 usb: dwc2: Disable all EP's on disconnect Dan Carpenter
2018-09-20 10:21 Minas Harutyunyan
2018-09-19  5:05 kbuild test robot
2018-09-18 14:18 Minas Harutyunyan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180920094856.ov64eknm2zx4td7v@mwanda \
    --to=dan.carpenter@oracle.com \
    --cc=John.Youn@synopsys.com \
    --cc=Minas.Harutyunyan@synopsys.com \
    --cc=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=kbuild-all@01.org \
    --cc=kbuild@01.org \
    --cc=linux-usb@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox