Re: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing
* Tony Lindgren t...@atomide.com [100907 20:19]: * Bryan Wu bryan...@canonical.com [100906 03:09]: Tony, I tried your latest branch: devel-smp-on-unicore, kernel boots up but got lots of WARN_ON fired: --- [ cut here ] [1.149719] WARNING: at mm/percpu-vm.c:320 pcpu_alloc+0x2fc/0x888() [1.149780] Modules linked in: [1.149841] [c01b34c8] (unwind_backtrace+0x0/0xe4) from [c01e939c] (warn_slowpath_common+0x4c/0x64) [1.149902] [c01e939c] (warn_slowpath_common+0x4c/0x64) from [c01e93cc] (warn_slowpath_null+0x18/0x1c) [1.149993] [c01e93cc] (warn_slowpath_null+0x18/0x1c) from [c0274730] (pcpu_alloc+0x2fc/0x888) [1.150085] [c0274730] (pcpu_alloc+0x2fc/0x888) from [c0279578] (sget+0x198/0x43c) [1.150146] [c0279578] (sget+0x198/0x43c) from [c0279adc] (get_sb_ns+0x20/0x90) [1.150238] [c0279adc] (get_sb_ns+0x20/0x90) from [c02791a4] (vfs_kern_mount+0x9c/0x18c) [1.150299] [c02791a4] (vfs_kern_mount+0x9c/0x18c) from [c0022280] (init_mqueue_fs+0x68/0xc8) [1.150390] [c0022280] (init_mqueue_fs+0x68/0xc8) from [c01ac5d0] (do_one_initcall+0xcc/0x1a4) [1.150451] [c01ac5d0] (do_one_initcall+0xcc/0x1a4) from [c0008760] (kernel_init+0x148/0x210) [1.150543] [c0008760] (kernel_init+0x148/0x210) from [c01adcf8] (kernel_thread_exit+0x0/0x8) [1.150604] ---[ end trace 1b75b31a2719ed74 ]--- --- It looks like we still missed to set some flag for chuck. Yeah I think there's some .config option that needs to be handled properly to fix this. This seems to disappear when CONFIG_LOCK_STAT is disabled, I wonder why? Here are my current changes to omap3_defconfig that I use for testing. Tony --- a/arch/arm/configs/omap3_defconfig +++ b/arch/arm/configs/omap3_defconfig @@ -55,6 +55,7 @@ CONFIG_MACH_OMAP_4430SDP=y CONFIG_ARM_THUMBEE=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y +CONFIG_SMP=y CONFIG_AEABI=y CONFIG_LEDS=y CONFIG_ZBOOT_ROM_TEXT=0x0 @@ -218,9 +219,9 @@ CONFIG_USB_DEVICEFS=y CONFIG_USB_SUSPEND=y # CONFIG_USB_OTG_WHITELIST is not set CONFIG_USB_MON=y -CONFIG_USB_MUSB_HDRC=y -CONFIG_USB_MUSB_OTG=y -CONFIG_USB_GADGET_MUSB_HDRC=y +# CONFIG_USB_MUSB_HDRC is not set +# CONFIG_USB_MUSB_OTG is not set +# CONFIG_USB_GADGET_MUSB_HDRC is not set CONFIG_USB_MUSB_DEBUG=y CONFIG_USB_WDM=y CONFIG_USB_STORAGE=y @@ -276,7 +277,7 @@ CONFIG_DEBUG_KERNEL=y CONFIG_SCHEDSTATS=y CONFIG_TIMER_STATS=y CONFIG_PROVE_LOCKING=y -CONFIG_LOCK_STAT=y +# CONFIG_LOCK_STAT is not set CONFIG_DEBUG_SPINLOCK_SLEEP=y # CONFIG_DEBUG_BUGVERBOSE is not set CONFIG_DEBUG_INFO=y -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing
Tony, Awesome, this makes SMP kernel work on my omap3 board. Thanks a lot. I will test the same kernel on my omap4 one. -Bryan. On Thu, Sep 9, 2010 at 4:26 AM, Tony Lindgren t...@atomide.com wrote: * Tony Lindgren t...@atomide.com [100907 20:19]: * Bryan Wu bryan...@canonical.com [100906 03:09]: Tony, I tried your latest branch: devel-smp-on-unicore, kernel boots up but got lots of WARN_ON fired: --- [ cut here ] [ 1.149719] WARNING: at mm/percpu-vm.c:320 pcpu_alloc+0x2fc/0x888() [ 1.149780] Modules linked in: [ 1.149841] [c01b34c8] (unwind_backtrace+0x0/0xe4) from [c01e939c] (warn_slowpath_common+0x4c/0x64) [ 1.149902] [c01e939c] (warn_slowpath_common+0x4c/0x64) from [c01e93cc] (warn_slowpath_null+0x18/0x1c) [ 1.149993] [c01e93cc] (warn_slowpath_null+0x18/0x1c) from [c0274730] (pcpu_alloc+0x2fc/0x888) [ 1.150085] [c0274730] (pcpu_alloc+0x2fc/0x888) from [c0279578] (sget+0x198/0x43c) [ 1.150146] [c0279578] (sget+0x198/0x43c) from [c0279adc] (get_sb_ns+0x20/0x90) [ 1.150238] [c0279adc] (get_sb_ns+0x20/0x90) from [c02791a4] (vfs_kern_mount+0x9c/0x18c) [ 1.150299] [c02791a4] (vfs_kern_mount+0x9c/0x18c) from [c0022280] (init_mqueue_fs+0x68/0xc8) [ 1.150390] [c0022280] (init_mqueue_fs+0x68/0xc8) from [c01ac5d0] (do_one_initcall+0xcc/0x1a4) [ 1.150451] [c01ac5d0] (do_one_initcall+0xcc/0x1a4) from [c0008760] (kernel_init+0x148/0x210) [ 1.150543] [c0008760] (kernel_init+0x148/0x210) from [c01adcf8] (kernel_thread_exit+0x0/0x8) [ 1.150604] ---[ end trace 1b75b31a2719ed74 ]--- --- It looks like we still missed to set some flag for chuck. Yeah I think there's some .config option that needs to be handled properly to fix this. This seems to disappear when CONFIG_LOCK_STAT is disabled, I wonder why? Here are my current changes to omap3_defconfig that I use for testing. Tony --- a/arch/arm/configs/omap3_defconfig +++ b/arch/arm/configs/omap3_defconfig @@ -55,6 +55,7 @@ CONFIG_MACH_OMAP_4430SDP=y CONFIG_ARM_THUMBEE=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y +CONFIG_SMP=y CONFIG_AEABI=y CONFIG_LEDS=y CONFIG_ZBOOT_ROM_TEXT=0x0 @@ -218,9 +219,9 @@ CONFIG_USB_DEVICEFS=y CONFIG_USB_SUSPEND=y # CONFIG_USB_OTG_WHITELIST is not set CONFIG_USB_MON=y -CONFIG_USB_MUSB_HDRC=y -CONFIG_USB_MUSB_OTG=y -CONFIG_USB_GADGET_MUSB_HDRC=y +# CONFIG_USB_MUSB_HDRC is not set +# CONFIG_USB_MUSB_OTG is not set +# CONFIG_USB_GADGET_MUSB_HDRC is not set CONFIG_USB_MUSB_DEBUG=y CONFIG_USB_WDM=y CONFIG_USB_STORAGE=y @@ -276,7 +277,7 @@ CONFIG_DEBUG_KERNEL=y CONFIG_SCHEDSTATS=y CONFIG_TIMER_STATS=y CONFIG_PROVE_LOCKING=y -CONFIG_LOCK_STAT=y +# CONFIG_LOCK_STAT is not set CONFIG_DEBUG_SPINLOCK_SLEEP=y # CONFIG_DEBUG_BUGVERBOSE is not set CONFIG_DEBUG_INFO=y -- Bryan Wu bryan...@canonical.com Kernel Developer +86.138-1617-6545 Mobile Ubuntu Kernel Team Canonical Ltd. www.canonical.com Ubuntu - Linux for human beings | www.ubuntu.com -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing
* Bryan Wu bryan...@canonical.com [100906 03:09]: Tony, I tried your latest branch: devel-smp-on-unicore, kernel boots up but got lots of WARN_ON fired: --- [ cut here ] [1.149719] WARNING: at mm/percpu-vm.c:320 pcpu_alloc+0x2fc/0x888() [1.149780] Modules linked in: [1.149841] [c01b34c8] (unwind_backtrace+0x0/0xe4) from [c01e939c] (warn_slowpath_common+0x4c/0x64) [1.149902] [c01e939c] (warn_slowpath_common+0x4c/0x64) from [c01e93cc] (warn_slowpath_null+0x18/0x1c) [1.149993] [c01e93cc] (warn_slowpath_null+0x18/0x1c) from [c0274730] (pcpu_alloc+0x2fc/0x888) [1.150085] [c0274730] (pcpu_alloc+0x2fc/0x888) from [c0279578] (sget+0x198/0x43c) [1.150146] [c0279578] (sget+0x198/0x43c) from [c0279adc] (get_sb_ns+0x20/0x90) [1.150238] [c0279adc] (get_sb_ns+0x20/0x90) from [c02791a4] (vfs_kern_mount+0x9c/0x18c) [1.150299] [c02791a4] (vfs_kern_mount+0x9c/0x18c) from [c0022280] (init_mqueue_fs+0x68/0xc8) [1.150390] [c0022280] (init_mqueue_fs+0x68/0xc8) from [c01ac5d0] (do_one_initcall+0xcc/0x1a4) [1.150451] [c01ac5d0] (do_one_initcall+0xcc/0x1a4) from [c0008760] (kernel_init+0x148/0x210) [1.150543] [c0008760] (kernel_init+0x148/0x210) from [c01adcf8] (kernel_thread_exit+0x0/0x8) [1.150604] ---[ end trace 1b75b31a2719ed74 ]--- --- It looks like we still missed to set some flag for chuck. Yeah I think there's some .config option that needs to be handled properly to fix this. Looks like the following .config does not produce it, but fails to boot to shell on omap2. Doing yes | make oldconfig and enabling CONFIG_SMP etc on makes the warning to happen. Also, disabling CONFIG_USB_MUSB_HDRC is needed as that driver is still broken for multi-omap.. Regards, Tony # # Automatically generated make config: don't edit # Linux kernel version: 2.6.36-rc3 # Tue Sep 7 18:42:21 2010 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y CONFIG_GENERIC_GPIO=y # CONFIG_ARCH_USES_GETTIMEOFFSET is not set CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_HAVE_PROC_CPU=y CONFIG_GENERIC_HARDIRQS=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_LOCKBREAK=y CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_ARCH_HAS_CPUFREQ=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_ARM_L1_CACHE_SHIFT_6=y CONFIG_VECTORS_BASE=0x CONFIG_DEFCONFIG_LIST=/lib/modules/$UNAME_RELEASE/.config CONFIG_CONSTRUCTORS=y # # General setup # CONFIG_EXPERIMENTAL=y CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE= CONFIG_LOCALVERSION= # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_HAVE_KERNEL_LZO=y # CONFIG_KERNEL_GZIP is not set CONFIG_KERNEL_LZMA=y # CONFIG_KERNEL_LZO is not set CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE_SYSCTL=y CONFIG_BSD_PROCESS_ACCT=y # CONFIG_BSD_PROCESS_ACCT_V3 is not set # CONFIG_TASKSTATS is not set # CONFIG_AUDIT is not set # # RCU Subsystem # CONFIG_TREE_RCU=y # CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set # CONFIG_RCU_FAST_NO_HZ is not set # CONFIG_TREE_RCU_TRACE is not set # CONFIG_IKCONFIG is not set CONFIG_LOG_BUF_SHIFT=17 # CONFIG_CGROUPS is not set # CONFIG_SYSFS_DEPRECATED_V2 is not set # CONFIG_RELAY is not set # CONFIG_NAMESPACES is not set CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE= CONFIG_RD_GZIP=y # CONFIG_RD_BZIP2 is not set # CONFIG_RD_LZMA is not set # CONFIG_RD_LZO is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_EMBEDDED=y CONFIG_UID16=y # CONFIG_SYSCTL_SYSCALL is not set CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_EXTRA_PASS=y CONFIG_HOTPLUG=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_EPOLL=y CONFIG_SIGNALFD=y CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_PERF_USE_VMALLOC=y # # Kernel Performance Events And Counters # CONFIG_PERF_EVENTS=y # CONFIG_PERF_COUNTERS is not set # CONFIG_DEBUG_PERF_USE_VMALLOC is not set CONFIG_VM_EVENT_COUNTERS=y CONFIG_COMPAT_BRK=y CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_USE_GENERIC_SMP_HELPERS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_CLK=y # # GCOV-based kernel profiling # # CONFIG_GCOV_KERNEL is not set CONFIG_HAVE_GENERIC_DMA_COHERENT=y CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set # CONFIG_MODVERSIONS is not set #
Re: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing
Tony, I tried your latest branch: devel-smp-on-unicore, kernel boots up but got lots of WARN_ON fired: --- [ cut here ] [1.149719] WARNING: at mm/percpu-vm.c:320 pcpu_alloc+0x2fc/0x888() [1.149780] Modules linked in: [1.149841] [c01b34c8] (unwind_backtrace+0x0/0xe4) from [c01e939c] (warn_slowpath_common+0x4c/0x64) [1.149902] [c01e939c] (warn_slowpath_common+0x4c/0x64) from [c01e93cc] (warn_slowpath_null+0x18/0x1c) [1.149993] [c01e93cc] (warn_slowpath_null+0x18/0x1c) from [c0274730] (pcpu_alloc+0x2fc/0x888) [1.150085] [c0274730] (pcpu_alloc+0x2fc/0x888) from [c0279578] (sget+0x198/0x43c) [1.150146] [c0279578] (sget+0x198/0x43c) from [c0279adc] (get_sb_ns+0x20/0x90) [1.150238] [c0279adc] (get_sb_ns+0x20/0x90) from [c02791a4] (vfs_kern_mount+0x9c/0x18c) [1.150299] [c02791a4] (vfs_kern_mount+0x9c/0x18c) from [c0022280] (init_mqueue_fs+0x68/0xc8) [1.150390] [c0022280] (init_mqueue_fs+0x68/0xc8) from [c01ac5d0] (do_one_initcall+0xcc/0x1a4) [1.150451] [c01ac5d0] (do_one_initcall+0xcc/0x1a4) from [c0008760] (kernel_init+0x148/0x210) [1.150543] [c0008760] (kernel_init+0x148/0x210) from [c01adcf8] (kernel_thread_exit+0x0/0x8) [1.150604] ---[ end trace 1b75b31a2719ed74 ]--- --- It looks like we still missed to set some flag for chuck. -Bryan On Fri, Sep 3, 2010 at 8:09 PM, Shilimkar, Santosh santosh.shilim...@ti.com wrote: -Original Message- From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap- ow...@vger.kernel.org] On Behalf Of Tony Lindgren Sent: Thursday, September 02, 2010 11:13 PM To: Russell King - ARM Linux Cc: linux-omap@vger.kernel.org; linux-arm-ker...@lists.infradead.org; Bryan Wu; Will Deacon Subject: Re: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing * Russell King - ARM Linux li...@arm.linux.org.uk [100902 10:00]: On Thu, Sep 02, 2010 at 09:18:47AM -0700, Tony Lindgren wrote: --- a/arch/arm/include/asm/smp_plat.h +++ b/arch/arm/include/asm/smp_plat.h @@ -39,4 +39,20 @@ static inline int cache_ops_need_broadcast(void) #define UP(instr...) _str(instr) #endif +static inline int smp_on_up(void) +{ +#ifdef CONFIG_SMP_ON_UP + int smp_on_up; + + asm( \ + SMP(mov %0, #0) \ + UP(mov %0, #1) \ + : =r (smp_on_up)); + + return smp_on_up; +#else + return 0; +#endif I think this is the wrong approach - rather than a function which tells us just if we are a SMP kernel running on UP, why not something which returns whether we're running on SMP and use that to eliminate some of these ifdefs? Sure. Will has something like this in his patches: static inline int cpu_is_part_of_mp_system(void) { u32 mpidr; asm volatile(mrc p15, 0, %0, c0, c0, 5 : =r (mpidr)); return (mpidr 31) ? !(mpidr 30) : 0; } I guess this register is only available on MP Core extensions. Regards, Santosh -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing
-Original Message- From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap- ow...@vger.kernel.org] On Behalf Of Tony Lindgren Sent: Thursday, September 02, 2010 11:13 PM To: Russell King - ARM Linux Cc: linux-omap@vger.kernel.org; linux-arm-ker...@lists.infradead.org; Bryan Wu; Will Deacon Subject: Re: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing * Russell King - ARM Linux li...@arm.linux.org.uk [100902 10:00]: On Thu, Sep 02, 2010 at 09:18:47AM -0700, Tony Lindgren wrote: --- a/arch/arm/include/asm/smp_plat.h +++ b/arch/arm/include/asm/smp_plat.h @@ -39,4 +39,20 @@ static inline int cache_ops_need_broadcast(void) #define UP(instr...) _str(instr) #endif +static inline int smp_on_up(void) +{ +#ifdef CONFIG_SMP_ON_UP + int smp_on_up; + + asm(\ + SMP(mov %0, #0) \ + UP(mov %0, #1) \ + : =r (smp_on_up)); + + return smp_on_up; +#else + return 0; +#endif I think this is the wrong approach - rather than a function which tells us just if we are a SMP kernel running on UP, why not something which returns whether we're running on SMP and use that to eliminate some of these ifdefs? Sure. Will has something like this in his patches: static inline int cpu_is_part_of_mp_system(void) { u32 mpidr; asm volatile(mrc p15, 0, %0, c0, c0, 5 : =r (mpidr)); return (mpidr 31) ? !(mpidr 30) : 0; } I guess this register is only available on MP Core extensions. Regards, Santosh -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing
On Thu, Sep 02, 2010 at 09:18:47AM -0700, Tony Lindgren wrote: From 7044c13594c3023da6095f8d432eda260bc3207f Mon Sep 17 00:00:00 2001 From: Tony Lindgren t...@atomide.com Date: Mon, 30 Aug 2010 14:00:54 -0700 Subject: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing Add inline function smp_on_up() for early init checks, and change build_mem_type_table to use it. Isn't something missing from this - such as a C-mode definition of SMP() and UP() ? diff --git a/arch/arm/include/asm/smp_plat.h b/arch/arm/include/asm/smp_plat.h index 8db3512..5ef4114 100644 --- a/arch/arm/include/asm/smp_plat.h +++ b/arch/arm/include/asm/smp_plat.h @@ -39,4 +39,20 @@ static inline int cache_ops_need_broadcast(void) #define UP(instr...) _str(instr) #endif +static inline int smp_on_up(void) +{ +#ifdef CONFIG_SMP_ON_UP + int smp_on_up; + + asm(\ + SMP(mov %0, #0) \ + UP(mov %0, #1) \ + : =r (smp_on_up)); + + return smp_on_up; +#else + return 0; +#endif I think this is the wrong approach - rather than a function which tells us just if we are a SMP kernel running on UP, why not something which returns whether we're running on SMP and use that to eliminate some of these ifdefs? -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing
* Russell King - ARM Linux li...@arm.linux.org.uk [100902 10:00]: On Thu, Sep 02, 2010 at 09:18:47AM -0700, Tony Lindgren wrote: --- a/arch/arm/include/asm/smp_plat.h +++ b/arch/arm/include/asm/smp_plat.h @@ -39,4 +39,20 @@ static inline int cache_ops_need_broadcast(void) #define UP(instr...) _str(instr) #endif +static inline int smp_on_up(void) +{ +#ifdef CONFIG_SMP_ON_UP + int smp_on_up; + + asm(\ + SMP(mov %0, #0) \ + UP(mov %0, #1) \ + : =r (smp_on_up)); + + return smp_on_up; +#else + return 0; +#endif I think this is the wrong approach - rather than a function which tells us just if we are a SMP kernel running on UP, why not something which returns whether we're running on SMP and use that to eliminate some of these ifdefs? Sure. Will has something like this in his patches: static inline int cpu_is_part_of_mp_system(void) { u32 mpidr; asm volatile(mrc p15, 0, %0, c0, c0, 5 : =r (mpidr)); return (mpidr 31) ? !(mpidr 30) : 0; } BTW, so far looks like we should only need this during init to set up things. Regards, Tony -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html