Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932179AbWHKCCU (ORCPT ); Thu, 10 Aug 2006 22:02:20 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932365AbWHKCCU (ORCPT ); Thu, 10 Aug 2006 22:02:20 -0400 Received: from inet-tsb.toshiba.co.jp ([202.33.96.40]:35712 "EHLO inet-tsb.toshiba.co.jp") by vger.kernel.org with ESMTP id S932179AbWHKCCT (ORCPT ); Thu, 10 Aug 2006 22:02:19 -0400 Date: Fri, 11 Aug 2006 11:01:51 +0900 Message-ID: From: Tsutomu OWA To: linux-kernel@vger.kernel.org Cc: mingo@elte.hu, tglx@linutronix.de, linuxppc-dev@ozlabs.org, tsutomu.owa@toshiba.co.jp Subject: [RFC PATCH 1/4] powerpc 2.6.16-rt17: to build on powerpc w/ RT User-Agent: Wanderlust/2.8.1 (Something) Emacs/20.7 Mule/4.0 (HANANOEN) Organization: Software Engineering Center, TOSHIBA. MIME-Version: 1.0 (generated by SEMI 1.14.4 - "Hosorogi") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8607 Lines: 205 To fix following compile errors for powermac and cell. --- with PREEMPT_NONE o arch/powerpc/kernel/head_64.S include/asm-generic/bug.h: Assembler messages: include/asm-generic/bug.h:19: Error: Unrecognized opcode: `extern' o missing percpu related macros arch/powerpc/mm/mem.c In file included from include/asm/tlb.h:53, from arch/powerpc/mm/mem.c:45: include/asm-generic/tlb.h:50: error: parse error before "mmu_gathers" include/asm-generic/tlb.h:50: warning: type defaults to `int' in declaration of `DECLARE_PER_CPU_LOCKED' etc. o kernel/time/clockevents.c:82: error: conflicting types for 'timer_interrupt' include/asm/hw_irq.h:14: error: previous declaration of 'timer_interrupt' was here kernel/time/clockevents.c:82: error: conflicting types for 'timer_interrupt' include/asm/hw_irq.h:14: error: previous declaration of 'timer_interrupt' was here o kernel/built-in.o: In function `do_gettimeofday': : multiple definition of `do_gettimeofday' arch/powerpc/kernel/built-in.o:: first defined here kernel/built-in.o: In function `.do_gettimeofday': : multiple definition of `.do_gettimeofday' arch/powerpc/kernel/built-in.o:: first defined here /usr/local/sti/SDK0.29/bin/pu64-ld: Warning: size of symbol `.do_gettimeofday' changed from 120 in arch/powerpc/kernel/built-in.o to 372 in kernel/built-in.o arch/powerpc/kernel/built-in.o: In function `.do_gettimeofday': o arch/powerpc/kernel/built-in.o: In function `.do_gettimeofday': : undefined reference to `.SCALE_XSEC' with PREEMPT_RT o arch/powerpc/platforms/powermac/.tmp_feature.o arch/powerpc/platforms/powermac/feature.c arch/powerpc/platforms/powermac/feature.c:65: error: conflicting types for 'feature_lock' include/asm/pmac_feature.h:381: error: previous declaration of 'feature_lock' was here arch/powerpc/platforms/powermac/feature.c:65: error: conflicting types for 'feature_lock' include/asm/pmac_feature.h:381: error: previous declaration of 'feature_lock' was here diff -rup -x CVS 2.6.16-rt17/arch/powerpc/kernel/time.c rt-powerpc/arch/powerpc/kernel/time.c --- 2.6.16-rt17/arch/powerpc/kernel/time.c 2006-04-26 18:24:28.000000000 +0900 +++ rt-powerpc/arch/powerpc/kernel/time.c 2006-07-12 13:45:31.000000000 +0900 @@ -200,6 +200,7 @@ void udelay(unsigned long usecs) } EXPORT_SYMBOL(udelay); +#ifndef CONFIG_GENERIC_TIME /* * This version of gettimeofday has microsecond resolution. */ @@ -223,6 +224,7 @@ static inline void __do_gettimeofday(str xsec = temp_stamp_xsec + mulhdu(tb_ticks, temp_tb_to_xs); sec = xsec / XSEC_PER_SEC; usec = (unsigned long)xsec & (XSEC_PER_SEC - 1); +#define SCALE_XSEC(xsec, max) (((xsec) * max) / XSEC_PER_SEC) usec = SCALE_XSEC(usec, 1000000); tv->tv_sec = sec; @@ -254,6 +256,7 @@ void do_gettimeofday(struct timeval *tv) } EXPORT_SYMBOL(do_gettimeofday); +#endif /* !CONFIG_GENERIC_TIME */ /* * There are two copies of tb_to_xs and stamp_xsec so that no diff -rup -x CVS 2.6.16-rt17/include/asm-generic/bug.h rt-powerpc/include/asm-generic/bug.h --- 2.6.16-rt17/include/asm-generic/bug.h 2006-04-26 18:24:28.000000000 +0900 +++ rt-powerpc/include/asm-generic/bug.h 2006-06-08 17:18:06.000000000 +0900 @@ -16,7 +16,9 @@ #define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0) #endif +#ifndef __ASSEMBLY__ extern void __WARN_ON(const char *func, const char *file, const int line); +#endif /* __ASSEMBLY__ */ #ifndef HAVE_ARCH_WARN_ON #define WARN_ON(condition) do { \ diff -rup -x CVS 2.6.16-rt17/include/asm-powerpc/hardirq.h rt-powerpc/include/asm-powerpc/hardirq.h --- 2.6.16-rt17/include/asm-powerpc/hardirq.h 2006-03-20 14:53:29.000000000 +0900 +++ rt-powerpc/include/asm-powerpc/hardirq.h 2006-06-08 17:18:42.000000000 +0900 @@ -11,7 +11,7 @@ * for uniformity. */ typedef struct { - unsigned int __softirq_pending; /* set_bit is used on this */ + unsigned int __softirq_pending; /* set_bit is not used on this */ unsigned int __last_jiffy_stamp; } ____cacheline_aligned irq_cpustat_t; diff -rup -x CVS 2.6.16-rt17/include/asm-powerpc/hw_irq.h rt-powerpc/include/asm-powerpc/hw_irq.h --- 2.6.16-rt17/include/asm-powerpc/hw_irq.h 2006-04-26 18:24:28.000000000 +0900 +++ rt-powerpc/include/asm-powerpc/hw_irq.h 2006-07-12 13:55:15.000000000 +0900 @@ -11,7 +11,11 @@ #include #include -extern void timer_interrupt(struct pt_regs *); +/* + * this conflicts w/ the declaration of 'timer_interrupt' in + * kernel/time/clockevents.c + */ +/* extern void timer_interrupt(struct pt_regs *); */ #ifdef CONFIG_PPC_ISERIES diff -rup -x CVS 2.6.16-rt17/include/asm-powerpc/percpu.h rt-powerpc/include/asm-powerpc/percpu.h --- 2.6.16-rt17/include/asm-powerpc/percpu.h 2006-03-20 14:53:29.000000000 +0900 +++ rt-powerpc/include/asm-powerpc/percpu.h 2006-06-08 21:03:28.000000000 +0900 @@ -18,11 +18,23 @@ /* Separate out the type, so (int[3], foo) works. */ #define DEFINE_PER_CPU(type, name) \ __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name +#define DEFINE_PER_CPU_LOCKED(type, name) \ + __attribute__((__section__(".data.percpu"))) spinlock_t per_cpu_lock__##name##_locked = SPIN_LOCK_UNLOCKED; \ + __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name##_locked /* var is in discarded region: offset to particular copy we want */ #define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu))) #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset())) +#define per_cpu_lock(var, cpu) \ + (*RELOC_HIDE(&per_cpu_lock__##var##_locked, __per_cpu_offset(cpu))) +#define per_cpu_var_locked(var, cpu) \ + (*RELOC_HIDE(&per_cpu__##var##_locked, __per_cpu_offset(cpu))) +#define __get_cpu_lock(var, cpu) \ + per_cpu_lock(var, cpu) +#define __get_cpu_var_locked(var, cpu) \ + per_cpu_var_locked(var, cpu) + /* A macro to avoid #include hell... */ #define percpu_modcopy(pcpudst, src, size) \ do { \ @@ -39,16 +51,27 @@ extern void setup_per_cpu_areas(void); #define DEFINE_PER_CPU(type, name) \ __typeof__(type) per_cpu__##name +#define DEFINE_PER_CPU_LOCKED(type, name) \ + spinlock_t per_cpu_lock__##name##_locked = SPIN_LOCK_UNLOCKED; \ + __typeof__(type) per_cpu__##name##_locked #define per_cpu(var, cpu) (*((void)(cpu), &per_cpu__##var)) +#define per_cpu_var_locked(var, cpu) (*((void)(cpu), &per_cpu__##var##_locked)) #define __get_cpu_var(var) per_cpu__##var +#define __get_cpu_lock(var, cpu) per_cpu_lock__##var##_locked +#define __get_cpu_var_locked(var, cpu) per_cpu__##var##_locked #endif /* SMP */ #define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name +#define DECLARE_PER_CPU_LOCKED(type, name) \ + extern spinlock_t per_cpu_lock__##name##_locked; \ + extern __typeof__(type) per_cpu__##name##_locked #define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var) #define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var) +#define EXPORT_PER_CPU_LOCKED_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu_lock__##var##_locked); EXPORT_SYMBOL_GPL(per_cpu__##var##_locked) + #else #include diff -rup -x CVS 2.6.16-rt17/include/asm-powerpc/pmac_feature.h rt-powerpc/include/asm-powerpc/pmac_feature.h --- 2.6.16-rt17/include/asm-powerpc/pmac_feature.h 2006-03-20 14:53:29.000000000 +0900 +++ rt-powerpc/include/asm-powerpc/pmac_feature.h 2006-05-10 13:52:58.000000000 +0900 @@ -378,7 +378,7 @@ extern struct macio_chip* macio_find(str * Those are exported by pmac feature for internal use by arch code * only like the platform function callbacks, do not use directly in drivers */ -extern spinlock_t feature_lock; +extern raw_spinlock_t feature_lock; extern struct device_node *uninorth_node; extern u32 __iomem *uninorth_base; diff -rup -x CVS 2.6.16-rt17/kernel/time/clockevents.c rt-powerpc/kernel/time/clockevents.c --- 2.6.16-rt17/kernel/time/clockevents.c 2006-04-26 18:24:29.000000000 +0900 +++ rt-powerpc/kernel/time/clockevents.c 2006-07-12 13:58:28.000000000 +0900 @@ -29,6 +29,8 @@ #include #include #include +#include +#include #define MAX_CLOCK_EVENTS 4 - 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/