All of lore.kernel.org
 help / color / mirror / Atom feed
From: Krzysztof Opasiak <k.opasiak@samsung.com>
To: balbi@ti.com
Cc: Robert Baldyga <r.baldyga@samsung.com>,
	gregkh@linuxfoundation.org, linux-usb@vger.kernel.org,
	linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com,
	m.szyprowski@samsung.com, andrzej.p@samsung.com
Subject: Re: [PATCH 04/26] usb: gadget: introduce 'enabled' flag in struct usb_ep
Date: Tue, 15 Sep 2015 18:15:25 +0200	[thread overview]
Message-ID: <55F8441D.5080301@samsung.com> (raw)
In-Reply-To: <20150915154324.GI19948@saruman.tx.rr.com>



On 09/15/2015 05:43 PM, Felipe Balbi wrote:
> On Tue, Sep 15, 2015 at 05:37:27PM +0200, Krzysztof Opasiak wrote:
>> Hello,
>>
>> On 09/15/2015 04:26 PM, Robert Baldyga wrote:
>>> This patch introduces 'enabled' flag in struct usb_ep, and modifies
>>> usb_ep_enable() and usb_ep_disable() functions to encapsulate endpoint
>>> enabled/disabled state. It helps to avoid enabling endpoints which are
>>> already enabled, and disabling endpoints which are already disables.
>>>
>>> >From now USB functions don't have to remember current endpoint
>>> enable/disable state, as this state is now handled automatically which
>>> makes this API less bug-prone.
>>>
>>> Signed-off-by: Robert Baldyga <r.baldyga@samsung.com>
>>> ---
>>>   include/linux/usb/gadget.h | 21 +++++++++++++++++++--
>>>   1 file changed, 19 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
>>> index 3f299e2..63375cd 100644
>>> --- a/include/linux/usb/gadget.h
>>> +++ b/include/linux/usb/gadget.h
>>> @@ -215,6 +215,7 @@ struct usb_ep {
>>>   	struct list_head	ep_list;
>>>   	struct usb_ep_caps	caps;
>>>   	bool			claimed;
>>> +	bool			enabled;
>>>   	unsigned		maxpacket:16;
>>>   	unsigned		maxpacket_limit:16;
>>>   	unsigned		max_streams:16;
>>> @@ -264,7 +265,15 @@ static inline void usb_ep_set_maxpacket_limit(struct usb_ep *ep,
>>>    */
>>>   static inline int usb_ep_enable(struct usb_ep *ep)
>>>   {
>>> -	return ep->ops->enable(ep, ep->desc);
>>> +	int ret = 0;
>>> +
>>> +	if (!ep->enabled) {
>>> +		ret = ep->ops->enable(ep, ep->desc);
>>> +		if (!ret)
>>> +			ep->enabled = true;
>>> +	}
>>> +
>>> +	return ret;
>>>   }
>>>
>>>   /**
>>> @@ -281,7 +290,15 @@ static inline int usb_ep_enable(struct usb_ep *ep)
>>>    */
>>>   static inline int usb_ep_disable(struct usb_ep *ep)
>>>   {
>>> -	return ep->ops->disable(ep);
>>> +	int ret = 0;
>>> +
>>> +	if (ep->enabled) {
>>> +		ret = ep->ops->disable(ep);
>>> +		if (!ret)
>>> +			ep->enabled = false;
>>> +	}
>>> +
>>> +	return ret;
>>>   }
>>>
>>
>> Personally I don't like this convention. In my opinion usb_ep_disable() &
>> usb_ep_enable() should fail if ep is already disabled/enabled. Then in
>> function code we should check if endpoint is enabled (maybe even we should
>> have usb_ep_is_enabled()) and call disable only when it is really enabled.
>
> usb_ep_is_enabled() should be a good addition but I don't see an issue
> ignoring usb_ep_enabled() for something that's already enabled.
>
> Imagine if you got an error when you tried to push the light switch to
> the 'on' position while the light was already on :-p
>

Hmmm not sure right now, didn't test this recently :D as usually I check 
if light isn't already "on" before I touch the switch to turn it on:P

Just joking. Personally I just prefer to don't touch things which are 
already in desired condition. Let's take close() as example which could 
be a little bit equivalent of our usb_ep_disable(). It is not legal to 
call it twice on some fd and second call ends up with error.

Best regards,

-- 
Krzysztof Opasiak
Samsung R&D Institute Poland
Samsung Electronics

  parent reply	other threads:[~2015-09-15 16:15 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-15 14:26 [PATCH 00/26] usb: gadget: encapsulate ep enable/disable Robert Baldyga
2015-09-15 14:26 ` [PATCH 01/26] usb: gadget: fix few outdated comments Robert Baldyga
2015-09-15 14:26 ` [PATCH 02/26] usb: gadget: f_ncm: obtain cdev from function instead of driver_data Robert Baldyga
2015-09-15 14:26 ` [PATCH 03/26] usb: gadget: epautoconf: add usb_ep_autoconfig_release() function Robert Baldyga
2015-09-15 14:26 ` [PATCH 04/26] usb: gadget: introduce 'enabled' flag in struct usb_ep Robert Baldyga
2015-09-15 15:37   ` Krzysztof Opasiak
2015-09-15 15:43     ` Felipe Balbi
2015-09-15 15:57       ` Robert Baldyga
2015-09-15 16:01         ` Felipe Balbi
2015-09-15 16:15       ` Krzysztof Opasiak [this message]
2015-09-15 16:30         ` Felipe Balbi
2015-09-15 14:26 ` [PATCH 05/26] usb: gadget: f_ecm: eliminate abuse of ep->driver data Robert Baldyga
2015-09-15 15:45   ` Krzysztof Opasiak
2015-09-16  9:49     ` Robert Baldyga
2015-09-15 14:26 ` [PATCH 06/26] usb: gadget: f_acm: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 07/26] usb: gadget: f_eem: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 08/26] usb: gadget: f_hid: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 09/26] usb: gadget: f_loopback: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 10/26] usb: gadget: f_mass_storage: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 11/26] usb: gadget: f_midi: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 12/26] usb: gadget: f_ncm: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 13/26] usb: gadget: f_obex: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 14/26] usb: gadget: f_phonet: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 15/26] usb: gadget: f_printer: " Robert Baldyga
2015-09-15 14:26 ` [PATCH 16/26] usb: gadget: f_rndis: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 17/26] usb: gadget: f_serial: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 18/26] usb: gadget: f_sourcesink: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 19/26] usb: gadget: f_subset: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 20/26] usb: gadget: f_uac1: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 21/26] usb: gadget: f_uac2: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 22/26] usb: gadget: f_uvc: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 23/26] usb: gadget: u_ether: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 24/26] usb: gadget: u_serial: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 25/26] usb: gadget: legacy: dbgp: " Robert Baldyga
2015-09-15 14:27 ` [PATCH 26/26] usb: gadget: legacy: tcm: " Robert Baldyga

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=55F8441D.5080301@samsung.com \
    --to=k.opasiak@samsung.com \
    --cc=andrzej.p@samsung.com \
    --cc=b.zolnierkie@samsung.com \
    --cc=balbi@ti.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=r.baldyga@samsung.com \
    /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.