Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1256322

Re: [PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep is enabled

From Robert Baldyga <r.baldyga@hackerion.com>
Newsgroups linux.kernel
Subject Re: [PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep is enabled
Date 2015-10-26 23:20 +0100
Message-ID <qnYhr-5rl-11@gated-at.bofh.it> (permalink)
References <qnThM-2d0-3@gated-at.bofh.it> <qnThN-2d0-19@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep is enabled "Felipe F. Tonello" <eu@felipetonello.com> - 2015-10-26 18:00 +0100
  Re: [PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep  is enabled Robert Baldyga <r.baldyga@hackerion.com> - 2015-10-26 23:20 +0100
    Re: [PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep  is enabled Felipe Tonello <eu@felipetonello.com> - 2015-10-27 00:00 +0100
      Re: [PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep  is enabled Robert Baldyga <r.baldyga@samsung.com> - 2015-10-27 07:50 +0100
        Re: [PATCH v4 1/7] usb: gadget: f_midi: Transmit data only when IN ep  is enabled Felipe Ferreri Tonello <eu@felipetonello.com> - 2015-10-27 10:30 +0100

csiph-web