All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felipe Balbi <balbi@kernel.org>
To: Baolin Wang <baolin.wang@linaro.org>
Cc: Greg KH <gregkh@linuxfoundation.org>,
	Mark Brown <broonie@kernel.org>, USB <linux-usb@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 2/2] usb: dwc3: Wait for control tranfer completed when stopping gadget
Date: Mon, 19 Sep 2016 12:58:31 +0300	[thread overview]
Message-ID: <87eg4g43eg.fsf@linux.intel.com> (raw)
In-Reply-To: <CAMz4ku+TwPrnE+CuyL7MtcStcU=DLP9an4PVp1J=hjy3fOkOTQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1867 bytes --]


Hi,

Baolin Wang <baolin.wang@linaro.org> writes:
>>> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
>>> index 1a33308..c9026ce 100644
>>> --- a/drivers/usb/dwc3/gadget.c
>>> +++ b/drivers/usb/dwc3/gadget.c
>>> @@ -1441,6 +1441,15 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend)
>>>       if (pm_runtime_suspended(dwc->dev))
>>>               return 0;
>>>
>>> +     /*
>>> +      * Per databook, when we want to stop the gadget, if a control transfer
>>> +      * is still in process, complete it and get the core into setup phase.
>>> +      */
>>> +     if (!is_on && dwc->ep0state != EP0_SETUP_PHASE) {
>>> +             reinit_completion(&dwc->ep0_completed);
>>
>> this seems unnecessary to me. Also, why return here so the caller has to
>
> We should re-init the completion due to it will complete control
> transfer many times before we try to stop gadget.

not sure I get this comment, care to furter explain what you mean?

>> wait? You could just have called wait_for_completion() here straight
>> away:
>>
>>         if (!is_on && dwc->ep0state != EP0_SETUP_PHASE) {
>>                 /* should this be interruptible? */
>>                 ret = wait_for_completion_timeout(&dwc->ep0_in_setup,
>>                                 msecs_to_jiffies(500));
>>                 if (ret == 0) {
>>                         dwc3_trace(trace_dwc3_gadget, "RUN/STOP timeout");
>>                         return -ETIMEDOUT;
>>                 }
>>         }
>>
>> There's also no need for that "try_again" trickery. We either can halt
>> the controller within 500ms or we cannot.
>
> But this is in atomic context and we can not issue
> wait_for_completion_timeout() in atomic context, then we should just
> return here.

heh, good point. Missed that :-)

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 800 bytes --]

  reply	other threads:[~2016-09-19  9:59 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-09  7:16 [PATCH v2 1/2] usb: dwc3: gadget: Add disconnect checking when changing function dynamically Baolin Wang
2016-09-09  7:16 ` [PATCH v2 2/2] usb: dwc3: Wait for control tranfer completed when stopping gadget Baolin Wang
2016-09-09 11:03   ` Felipe Balbi
2016-09-18  4:58     ` Baolin Wang
2016-09-19  9:58       ` Felipe Balbi [this message]
2016-09-19 10:42         ` Baolin Wang
2016-09-09 10:47 ` [PATCH v2 1/2] usb: dwc3: gadget: Add disconnect checking when changing function dynamically Felipe Balbi
2016-09-18  4:48   ` Baolin Wang

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=87eg4g43eg.fsf@linux.intel.com \
    --to=balbi@kernel.org \
    --cc=baolin.wang@linaro.org \
    --cc=broonie@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.