lkml.org 
[lkml]   [2006]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.6.15-mm4 failure on power5

    * Nathan Lynch <ntl@pobox.com> wrote:

    > Dave C Boutcher wrote:
    > > On Tue, Jan 17, 2006 at 10:52:44AM -0600, Dave C Boutcher wrote:
    > > > Well, it turns out that I've been running with CONFIG_DEBUG_MUTEXES all
    > > > along...so no noise. My console output is a little different that
    > > > Serge's, so I think this is timing related. Also note that I'm dying in
    > > > the timer interrupt...
    > >
    > > duh... here's the backtrace
    > > 0:mon> t
    > > [c000000000577890] c0000000000034b4 decrementer_common+0xb4/0x100
    > > --- Exception: 901 (Decrementer) at c0000000004627ec
    > > .__mutex_lock_interruptible_slowpath+0x3bc/0x4c4
    > > [c000000000577c60] c000000000075064 .__lock_cpu_hotplug+0x44/0xa8
    > > [c000000000577ce0] c000000000075600 .register_cpu_notifier+0x24/0x68
    > > [c000000000577d70] c00000000052cd7c .do_init_bootmem+0x68c/0xab0
    > > [c000000000577e50] c000000000522c84 .setup_arch+0x21c/0x2c0
    > > [c000000000577ef0] c00000000051a538 .start_kernel+0x40/0x280
    > > [c000000000577f90] c000000000008574 .hmt_init+0x0/0x8c
    >
    > The mutex debug code (debug_spin_unlock in kernel/mutex-debug.h) is
    > doing a local_irq_enable way before we're ready.
    >
    > BTW: I couldn't build powerpc without mutex debugging until I changed
    > the SYNC_ON_SMP in include/asm-powerpc/mutex.h:__mutex_fastpath_unlock
    > to ISYNC_ON_SMP.
    >
    > With that change, I was able to boot semi-successfully with mutex
    > debugging off -- the system got hung up when udev started, apparently
    > (or maybe I was too impatient).

    ugh! Does the patch below get you a working system with DEBUG_MUTEXES=n?

    Ingo

    --

    revert the ppc64 mutex fastpath assembly optimizations for now.

    Signed-off-by: Ingo Molnar <mingo@elte.hu>

    ----
    include/asm-powerpc/mutex.h | 85 ++------------------------------------------
    1 files changed, 5 insertions(+), 80 deletions(-)

    Index: linux/include/asm-powerpc/mutex.h
    ===================================================================
    --- linux.orig/include/asm-powerpc/mutex.h
    +++ linux/include/asm-powerpc/mutex.h
    @@ -1,84 +1,9 @@
    /*
    - * include/asm-powerpc/mutex.h
    + * Pull in the generic implementation for the mutex fastpath.
    *
    - * PowerPC optimized mutex locking primitives
    - *
    - * Please look into asm-generic/mutex-xchg.h for a formal definition.
    - * Copyright (C) 2006 Joel Schopp <jschopp@austin.ibm.com>, IBM
    + * TODO: implement optimized primitives instead, or leave the generic
    + * implementation in place, or pick the atomic_xchg() based generic
    + * implementation. (see asm-generic/mutex-xchg.h for details)
    */
    -#ifndef _ASM_MUTEX_H
    -#define _ASM_MUTEX_H
    -#define __mutex_fastpath_lock(count, fail_fn)\
    -do{ \
    - int tmp; \
    - __asm__ __volatile__( \
    -"1: lwarx %0,0,%1\n" \
    -" addic %0,%0,-1\n" \
    -" stwcx. %0,0,%1\n" \
    -" bne- 1b\n" \
    - ISYNC_ON_SMP \
    - : "=&r" (tmp) \
    - : "r" (&(count)->counter) \
    - : "cr0", "memory"); \
    - if (unlikely(tmp < 0)) \
    - fail_fn(count); \
    -} while (0)
    -
    -#define __mutex_fastpath_unlock(count, fail_fn)\
    -do{ \
    - int tmp; \
    - __asm__ __volatile__(SYNC_ON_SMP\
    -"1: lwarx %0,0,%1\n" \
    -" addic %0,%0,1\n" \
    -" stwcx. %0,0,%1\n" \
    -" bne- 1b\n" \
    - : "=&r" (tmp) \
    - : "r" (&(count)->counter) \
    - : "cr0", "memory"); \
    - if (unlikely(tmp <= 0)) \
    - fail_fn(count); \
    -} while (0)
    -
    -
    -static inline int
    -__mutex_fastpath_trylock(atomic_t* count, int (*fail_fn)(atomic_t*))
    -{
    - int tmp;
    - __asm__ __volatile__(
    -"1: lwarx %0,0,%1\n"
    -" cmpwi 0,%0,1\n"
    -" bne- 2f\n"
    -" addic %0,%0,-1\n"
    -" stwcx. %0,0,%1\n"
    -" bne- 1b\n"
    -" isync\n"
    -"2:"
    - : "=&r" (tmp)
    - : "r" (&(count)->counter)
    - : "cr0", "memory");
    -
    - return (int)tmp;
    -
    -}
    -
    -#define __mutex_slowpath_needs_to_unlock() 1

    -static inline int
    -__mutex_fastpath_lock_retval(atomic_t* count, int (*fail_fn)(atomic_t *))
    -{
    - int tmp;
    - __asm__ __volatile__(
    -"1: lwarx %0,0,%1\n"
    -" addic %0,%0,-1\n"
    -" stwcx. %0,0,%1\n"
    -" bne- 1b\n"
    -" isync \n"
    - : "=&r" (tmp)
    - : "r" (&(count)->counter)
    - : "cr0", "memory");
    - if (unlikely(tmp < 0))
    - return fail_fn(count);
    - else
    - return 0;
    -}
    -#endif
    +#include <asm-generic/mutex-dec.h>
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-01-18 08:10    [W:0.029 / U:7.452 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site