Re: My current dummy_hcd queue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Alan Stern | 2011-12-13 11:08:57 [-0500]:

>carefully.  I don't like patch 5 at all, however.  Your description
>says:
>
>> This is a shortcut and not essential for "working". This "shortcut"
>> requires for the gadget driver to drop its locks which are taken in the
>> complete callback.
>> I'm mainly for the removal because it needs fixing for the upcomming
>> stream implementation. Since there is no stream_id matching it would
>> need an additional exception (I don't think additional
>> stream_number * FIFO_SIZE buffer is a good idea). Once we add sg support
>> for the gadget side it would need additional fixup here.
>> I don't see the benefit of this "early" completion so I'm removing it.
>
>The benefit is that it provides better testing.  That's what dummy-hcd 
>was written for -- testing.  In particular, this "early completion" 
>path exists in the net2280 driver and hardware, so keeping it in 
>dummy-hcd is worthwhile.  If you like, you can restrict it to work only 
>when the endpoint doesn't have any streams allocated.

Okay. So we do this in dummy because it is a code path in a driver. Fair
enough. Looking at net2280 I see one early complete call for ep0 if
length == 0 and for OUT ep where the fifo is read during enqueue in case
it is not empty. Nothing for IN.

So if we keep it, this raises two questions:
- This looks like every gadget has drop its locks while submitting
  requests. From a quick grep I see that this is done. So I learned
  something here.
- Isn't it premature to call complete for an IN endpoint before we know
  it went through? For OUT I would understand, the data may already sit
  in the FIFO but the IN transfer did not complete yet.

>One more thing: Why do you overuse u32 so much?  For example, in patch 
>3/7:
>
>> @@ -147,6 +148,8 @@ static const char *const ep_name [] = {
>>  struct urbp {
>>  	struct urb              *urb;
>>  	struct list_head        urbp_list;
>> +	struct sg_mapping_iter  miter;
>> +	u32                     miter_started;
>>  };
>
>There's no reason for miter_started to be a u32.  In general, types
>that specify a particular size should be used only in situations where
>the size really matters -- which basically means whenever the value is
>embedded in a structure and a particular alignment is needed, or when
>the value is defined according to an external protocol.

So here I could use u32 miter_stared:1 to use only one bit. The compiler
tends to pad the structure to the next naturally aligned spot so adding
u8 here would hardly makes a difference. If it is followed by a pointer
for instance it will be padded by 3 or 7 bytes. So this here eats up the
same amount of memory.
Once a second variable of this kind is required this could change to the
bitfield (:1 thingy) notation or rename to flags and add a few defines.
I usually prefer the latter because I don't like bitfields like that and
they often produce worse code especially if you need to set both of them
to the same value at once.

>When neither of these holds, the best approach is to use a generic type 
>(like int or unsigned) and allow the compiler the freedom to do what it 
int is defined to be signed int on all architectures if it is not
specified. We don't have this for the char type for instance. This one is
different on powerpc vs x86. I like to be explicit here and I am lazy
as well so u32 is a good compromise :) Since negative values are not
required I pick the unsigned instead of the signed int. One could ask
himself why miter_started could be negative. Only "unsigned" looks
incomplete. I don't know how it is defined but I think it internally
handled as int. Atleast it uses 4 bytes which speaks for int (u32). So
if it is u32 why not state it clearly?

>wants.  In this case, miter_started doesn't even need to be unsigned; 
>since it merely stores a 0/1 value, it could be declared as bool.

>From the obvious point of view the goal goes clearly to bool. I have no
problem to change it to this type if you prefer.

>Nevertheless, stylistic concerns aside, for patches 1-4 and 6:
>
>Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>

Thank you.

>
>Alan Stern

Sebastian
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux