Re: Getting L2CAP ERTM support into better upstream state

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

 



Hi Gustavo,

On Fri, Feb 10, 2012 at 10:54 AM, Gustavo Padovan
<padovan@xxxxxxxxxxxxxx> wrote:
> Hi Mat, Ulisses,
>
> * Ulisses Furquim <ulisses@xxxxxxxxxxxxxx> [2012-02-08 23:01:16 -0200]:
>
>> Hi Mat,
>>
>> On Wed, Feb 8, 2012 at 8:33 PM, Mat Martineau <mathewm@xxxxxxxxxxxxxx> wrote:
>> >
>> > On Wed, 8 Feb 2012, Ulisses Furquim wrote:
>> >
>> >> Hi everybody,
>> >>
>> >> On Wed, Feb 8, 2012 at 7:32 AM, Luiz Augusto von Dentz
>> >> <luiz.dentz@xxxxxxxxx> wrote:
>> >>>
>> >>> Hi Andrei,
>> >>>
>> >>> On Wed, Feb 8, 2012 at 11:09 AM, Andrei Emeltchenko
>> >>> <andrei.emeltchenko.news@xxxxxxxxx> wrote:
>> >>>>
>> >>>>
>> >>>> I think this would be good to send as patch series so that people can
>> >>>> comment. What comes to my mind is that the patch might be reduced if it
>> >>>> does not change order of functions and defines like:
>> >>>>
>> >
>> > ... <snip> ...
>> >
>> >
>> >>>> those magic number does not look nice IMO and the code is not looking
>> >>>> any
>> >>>> better.
>> >>>
>> >>>
>> >>> In this aspect perhaps, but we don't need to take the code as it is,
>> >>> but the point here is following the states defined by the spec and
>> >>> that is IMO much better.
>> >
>> >
>> > Right - the code as it stands now was ported quickly, and does not take in
>> > to account many of Andrei's upstream improvements.  I don't want to move
>> > backwards in terms of magic numbers, and there is some extra noise in there
>> > due to symbol names.  I need to address these issues before merging.
>>
>> Great.
>>
>> > I'm also looking for ideas on how to do this as a patch series.  Since it
>> > takes a very different approach from the original code, it's hard to make
>> > meaningful, small patches that don't break functionality.  At some point
>> > there has to be a major switchover but there is a lot of room to split this
>> > up.
>>
>> I agree here. You maybe can have some patches introducing new code
>> that's going to be used in the commit that really switches the state
>> machine handling.
>
>
> The first step is to do a huge clean up on your patch, people already reported
> many issues here. Then you can send all the macro definitions changes to
> l2cap.h. Finally we look to your patch and check how bit it is and decide what
> to do. It's much better waste time looking for bugs in your code than trying
> to find a way to split in many patches.
> The most important thing is do it fast, we are now in -rc3, we have 4 or 5
> weeks until 3.4 merge windows opens.
>
>>
>> > One approach is to add inactive code until everything is there, then have
>> > one commit that calls in to the new code instead of the old code. Then the
>> > old code can be removed.  I talked to Gustavo about that a while ago, and he
>> > preferred finding a different way.  Maybe an intermediate step is to put the
>> > state machine code in there, but call the existing frame handling functions
>> > in every state.
>>
>> IMO the former approach is better. We could even have a module option
>> to activate the new code for testing (have it experimental) and do the
>> switch when we're confident it's ready.
>>
>> <snip>
>>
>> >> Marcel mentioned the separation of L2CAP channel and socket. That is a
>> >> work in progress by Andrei and judging by what you said, Marcel, you
>> >> want that merged before we change ERTM, is that it?
>> >
>> > Andrei and Marcel, let's figure out this order now.  It doesn't make sense
>> > for one of us to have a bunch of changes staged, only to have major
>> > merge/rebase conflicts when another far-reaching patch set gets merged.
>>
>> I'd say we add your changes and then Andrei's when he's ready with
>> them. Right now I have the feeling your changes are more mature and
>> can be easily merged.
>>
>> >> Mat, thanks a lot for doing this. I have just a few questions. Have
>> >> you tested the stack with this patch? How was it? Quickly looking
>> >> through the code I feel it's almost there. I agree with Andrei
>> >> regarding constants and control field handling but apart from that it
>> >> looks good, in general.
>> >
>> > It's only lightly tested right now.  I can do incoming and outgoing
>> > connections, and send/receive.  It is unstable when disconnecting.  I have
>> > not tested with dropped frames yet.
>>
>> Ok.
>>
>> >> Regarding delayed work handling, are you sure about usage of
>> >> __cancel_delayed_work()? I do think it's safer to use
>> >> cancel_delayed_work() instead as it'll just spin on a lock if the
>> >> timer to queue the work is running on another CPU.
>> >
>> > This code is coming from a kernel that still had code running in tasklet
>> > context that couldn't block, and the delayed work handlers were written such
>> > that it was ok if the functions were called after cancel.  I will update to
>> > the safer cancel_delayed_work().
>>
>> I see. I haven't really checked the handlers but it's less error prone
>> to guarantee that if we cancel a delayed work as soon as the function
>> returns the handler won't be queued on our back. And I say that
>> thinking of keeping it simpler to maintain. Also cancel_delayed_work()
>> never sleeps, it can only spin on a spinlock waiting for the timer
>> handler to return to guarantee the work won't be queued again.
>>
>> >> I saw a comment about channel ref counting and kind of audit that
>> >> would be great. It'd be good to see a patch for that after transition
>> >> to new state handling.
>> >
>> > The "do channel ref counting" comment is there because I saw that the
>> > existing ack/monitor/retrans timers do that.  I will fix this up before
>> > submitting.
>>
>> Ok.
>>
>> > Thanks for the feedback, everyone.  Please let me know if you have
>> > preferences for how to structure this patch set.  I'll work on the issues
>> > mentioned in this thread and start splitting up the changes.
>>
>> We need to hear from Marcel and Padovan if they agree with us. I do
>> think you can introduce new stuff with small commits and then have one
>> commit to add the bulk of it with the module option to enable it. Then
>> we test that and make it default later.
>
> If the concern here is that the current ERTM implementation does not work I'd
> rather completely remove it and add the new one, no module options to choose.

Sure, we can also do that. The other approaches were just more incremental.

Regards,

-- 
Ulisses Furquim
ProFUSION embedded systems
http://profusion.mobi
Mobile: +55 19 9250 0942
Skype: ulissesffs
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux