lkml.org 
[lkml]   [2010]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [BUG] 2.6.37-rc3 massive interactivity regression on ARM
    From
    Date
    On Fri, 2010-12-10 at 13:51 -0600, Christoph Lameter wrote:
    > On Fri, 10 Dec 2010, Peter Zijlstra wrote:
    >
    > > > > gcc wont be able to do this yet (%fs/%gs selectors)
    > > >
    > > > The kernel can do that using the __percpu annotation.
    > >
    > > That's not true:
    > >
    > > # define __percpu
    > >
    > > Its a complete NOP.
    >
    > The annotation serves for sparse checking. .... If you do not care about
    > those checks then you can simply pass a percpu pointer in the same form as
    > a regular pointer.

    Its not about passing per-cpu pointers, its about passing long pointers.

    When I write:

    void foo(u64 *bla)
    {
    *bla++;
    }

    DEFINE_PER_CPU(u64, plop);

    void bar(void)
    {
    foo(__this_cpu_ptr(plop));
    }

    I want gcc to emit the equivalent to:

    __this_cpu_inc(plop); /* incq %fs:(%0) */

    Now I guess the C type system will get in the way of this ever working,
    since a long pointer would have a distinct type from a regular
    pointer :/

    The idea is to use 'regular' functions with the per-cpu data in a
    transparent manner so as not to have to replicate all logic.

    > > > > But we can provide this_cpu_write_seqcount_{begin|end}()
    > > >
    > > > No we cannot do hat. this_cpu ops are for per cpu data and not for locking
    > > > values shared between processors. We have a mechanism for passing per cpu
    > > > pointers with a corresponding annotation.
    > >
    > > -enoparse, its not locking anything, is a per-cpu sequence count.
    >
    > seqlocks are for synchronization of objects on different processors.
    >
    > Seems that you do not have that use case in mind. So a seqlock restricted
    > to a single processor? If so then you wont need any of those smp write
    > barriers mentioned earlier. A simple compiler barrier() is sufficient.

    The seqcount is sometimes read by different CPUs, but I don't see why we
    couldn't do what Eric suggested.


    \
     
     \ /
      Last update: 2010-12-10 21:09    [W:0.023 / U:0.856 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site