lkml.org 
[lkml]   [2012]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v3 01/17] hashtable: introduce a small and naive hashtable
    From
    Date
    On Tue, 2012-09-04 at 22:51 +0100, Pedro Alves wrote:
    > On 09/04/2012 09:59 PM, Steven Rostedt wrote:
    > > On Tue, 2012-09-04 at 18:21 +0100, Pedro Alves wrote:
    > >> On 09/04/2012 06:17 PM, Steven Rostedt wrote:
    > >>> On Tue, 2012-09-04 at 17:40 +0100, Pedro Alves wrote:
    > >>>
    > >>>> BTW, you can also go a step further and remove the need to close with double }},
    > >>>> with something like:
    > >>>>
    > >>>> #define do_for_each_ftrace_rec(pg, rec) \
    > >>>> for (pg = ftrace_pages_start, rec = &pg->records[pg->index]; \
    > >>>> pg && rec == &pg->records[pg->index]; \
    > >>>> pg = pg->next) \
    > >>>> for (rec = pg->records; rec < &pg->records[pg->index]; rec++)
    > >>>>
    > >>>
    > >>> Yeah, but why bother? It's hidden in a macro, and the extra '{ }' shows
    > >>> that this is something "special".
    > >>
    > >> The point of both changes is that there's nothing special in the end
    > >> at all. It all just works...
    > >>
    > >
    > > It would still fail on a 'break'. The 'while' macro tells us that it is
    > > special, because in the end, it wont work.
    >
    > Please explain why it would fail on a 'break'.
    >

    Ah, I missed the condition with the rec == &pg->records[pg->index]. But
    if ftrace_pages_start is NULL, the rec = &pg->records[pg->index] will
    fault.

    You could do something like rec = pg ? &pg->records[pg->index] : NULL,
    but IIRC, the comma operator does not guarantee order evaluation. That
    is, the compiler is allowed to process "a , b" as "b; a;" and not "a;
    b;".

    -- Steve




    \
     
     \ /
      Last update: 2012-09-05 01:22    [W:2.540 / U:0.632 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site