linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Robert Baldyga <r.baldyga@hackerion.com>
To: "Felipe F. Tonello" <eu@felipetonello.com>, linux-usb@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Felipe Balbi <balbi@ti.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Andrzej Pietrasiewicz <andrzej.p@samsung.com>,
	Clemens Ladisch <clemens@ladisch.de>
Subject: Re: [PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep is enabled
Date: Mon, 26 Oct 2015 23:13:04 +0100	[thread overview]
Message-ID: <562EA570.8000309@hackerion.com> (raw)
In-Reply-To: <1445878509-12084-2-git-send-email-eu@felipetonello.com>

Hi Felipe,

On 10/26/2015 05:55 PM, Felipe F. Tonello wrote:
> This makes sure f_midi doesn't try to enqueue data when the IN endpoint is
> disabled, ie, USB cable is disconnected.
> 
> Signed-off-by: Felipe F. Tonello <eu@felipetonello.com>
> ---
>  drivers/usb/gadget/function/f_midi.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
> index edb84ca..e08f365 100644
> --- a/drivers/usb/gadget/function/f_midi.c
> +++ b/drivers/usb/gadget/function/f_midi.c
> @@ -87,6 +87,7 @@ struct f_midi {
>  	int index;
>  	char *id;
>  	unsigned int buflen, qlen;
> +	bool in_ep_enabled;

It's not necessary, you can use ep->enabled flag instead.

>  };
>  
>  static inline struct f_midi *func_to_midi(struct usb_function *f)
> @@ -332,6 +333,7 @@ static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
>  	err = f_midi_start_ep(midi, f, midi->in_ep);
>  	if (err)
>  		return err;
> +	midi->in_ep_enabled = true;
>  
>  	err = f_midi_start_ep(midi, f, midi->out_ep);
>  	if (err)
> @@ -387,6 +389,8 @@ static void f_midi_disable(struct usb_function *f)
>  	 */
>  	usb_ep_disable(midi->in_ep);
>  	usb_ep_disable(midi->out_ep);
> +
> +	midi->in_ep_enabled = false;
>  }
>  
>  static int f_midi_snd_free(struct snd_device *device)
> @@ -543,7 +547,7 @@ static void f_midi_transmit(struct f_midi *midi, struct usb_request *req)
>  		}
>  	}
>  
> -	if (req->length > 0) {
> +	if (req->length > 0 && midi->in_ep_enabled) {

You should rather test it at the beginning of this function. Or, even
better, when tasklet is scheduled, because tasklet is the only way this
function can be called when endpoints are disabled.

>  		int err;
>  
>  		err = usb_ep_queue(ep, req, GFP_ATOMIC);
> @@ -1158,6 +1162,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
>  	midi->index = opts->index;
>  	midi->buflen = opts->buflen;
>  	midi->qlen = opts->qlen;
> +	midi->in_ep_enabled = false;
>  	++opts->refcnt;
>  	mutex_unlock(&opts->lock);
>  
> 

Best regards,
Robert


  reply	other threads:[~2015-10-26 22:13 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-26 16:55 [PATCH v4 0/7] USB MIDI Gadget improvements and bug fixes Felipe F. Tonello
2015-10-26 16:55 ` [PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep is enabled Felipe F. Tonello
2015-10-26 22:13   ` Robert Baldyga [this message]
2015-10-26 22:49     ` Felipe Tonello
2015-10-27  6:41       ` Robert Baldyga
2015-10-27  9:21         ` Felipe Ferreri Tonello
2015-10-26 16:55 ` [PATCH v4 2/7] usb: gadget: f_midi: remove duplicated code Felipe F. Tonello
2015-10-26 16:55 ` [PATCH v4 3/7] usb: gadget: define free_ep_req as universal function Felipe F. Tonello
2015-10-27  6:53   ` Robert Baldyga
2015-10-27  9:18     ` Felipe Ferreri Tonello
2015-10-27  9:47       ` Robert Baldyga
2015-10-27 12:53         ` Felipe Ferreri Tonello
2015-10-26 16:55 ` [PATCH v4 4/7] usb: gadget: f_midi: fix leak on failed to enqueue out requests Felipe F. Tonello
2015-10-26 22:23   ` Robert Baldyga
2015-10-26 22:55     ` Felipe Tonello
2015-10-26 16:55 ` [PATCH v4 5/7] usb: gadget: f_midi: set altsettings only for MIDIStreaming interface Felipe F. Tonello
2015-10-26 22:30   ` Robert Baldyga
2015-10-26 22:53     ` Felipe Tonello
2015-10-27  6:47       ` Robert Baldyga
2015-10-27  9:19         ` Felipe Ferreri Tonello
2015-10-26 16:55 ` [PATCH v4 6/7] usb: gadget: gmidi: Cleanup legacy code Felipe F. Tonello
2015-10-26 16:55 ` [PATCH v4 7/7] usb: gadget: f_midi: pre-allocate IN requests Felipe F. Tonello
2015-10-27 14:14 ` [PATCH v4 0/7] USB MIDI Gadget improvements and bug fixes Felipe Ferreri Tonello

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=562EA570.8000309@hackerion.com \
    --to=r.baldyga@hackerion.com \
    --cc=andrzej.p@samsung.com \
    --cc=balbi@ti.com \
    --cc=clemens@ladisch.de \
    --cc=eu@felipetonello.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).