09 Mar, 2007

1 commit

  • On Tue, Oct 31, Hugh Dickins wrote:

    > +++ linux/include/asm-powerpc/current.h 2006-10-30 19:27:05.000000000 +0000

    > +static inline struct task_struct *get_current(void)
    > +{
    > + struct task_struct *task;
    > +
    > + __asm__ __volatile__("ld %0,%1(13)"
    > + : "=r" (task)
    > + : "i" (offsetof(struct paca_struct, __current)));

    This breaks compile of 2.6.18.8:

    CC [M] drivers/media/video/pwc/pwc-uncompress.o
    In file included from /home/olaf/kernel/linux-2.6.18.8/drivers/media/video/pwc/pwc-uncompress.c:29:
    include2/asm/current.h: In function 'get_current':
    include2/asm/current.h:23: warning: implicit declaration of function 'offsetof'
    include2/asm/current.h:23: error: expected expression before 'struct'
    make[5]: *** [drivers/media/video/pwc/pwc-uncompress.o] Error 1

    Signed-off-by: Olaf Hering
    Signed-off-by: Paul Mackerras

    Olaf Hering
     

01 Nov, 2006

1 commit

  • Repeated -j20 kernel builds on a G5 Quad running an SMP PREEMPT kernel
    would often collapse within a day, some exec failing with "Bad address".
    In each case examined, load_elf_binary was doing a kernel_read, but
    generic_file_aio_read's access_ok saw current->thread.fs.seg as USER_DS
    instead of KERNEL_DS.

    objdump of filemap.o shows gcc 4.1.0 emitting "mr r5,r13 ... ld r9,416(r5)"
    here for get_paca()->__current, instead of the expected and much more usual
    "ld r9,416(r13)"; I've seen other gcc4s do the same, but perhaps not gcc3s.

    So, if the task is preempted and rescheduled on a different cpu in between
    the mr and the ld, r5 will be looking at a different paca_struct from the
    one it's now on, pick up the wrong __current, and perhaps the wrong seg.
    Presumably much worse could happen elsewhere, though that split is rare.

    Other architectures appear to be safe (x86_64's read_pda is more limiting
    than get_paca), but ppc64 needs to force "current" into one instruction.

    Signed-off-by: Hugh Dickins
    Signed-off-by: Paul Mackerras

    Hugh Dickins
     

09 Jan, 2006

1 commit

  • include/asm-ppc/ had #ifdef __KERNEL__ in all header files that
    are not meant for use by user space, include/asm-powerpc does
    not have this yet.

    This patch gets us a lot closer there. There are a few cases
    where I was not sure, so I left them out. I have verified
    that no CONFIG_* symbols are used outside of __KERNEL__
    any more and that there are no obvious compile errors when
    including any of the headers in user space libraries.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     

10 Nov, 2005

1 commit

  • This patch merges current.h. This is a one-big-ifdef merge, but both
    versions are so tiny, I think we can live with it. While we're at it,
    we get rid of the fairly pointless redirection through get_current()
    in the ppc64 version.

    Built and booted on POWER5 LPAR (ARCH=powerpc & ARCH=ppc64). Built
    for 32-bit pmac (ARCH=powerpc & ARCH=ppc).

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson