From: Stephen Rothwell This patch allows iSeries to come much closer to building. This is a precurser to my trying to merge the virtual device drivers for iSeries (console, disk and cdrom). --- arch/ppc64/kernel/iSeries_setup.h | 2 ++ include/asm-ppc64/hw_irq.h | 28 ++++++++++++++++------------ include/asm-ppc64/system.h | 7 ------- 3 files changed, 18 insertions(+), 19 deletions(-) diff -puN arch/ppc64/kernel/iSeries_setup.h~ppc64-iseries-fixes arch/ppc64/kernel/iSeries_setup.h --- 25/arch/ppc64/kernel/iSeries_setup.h~ppc64-iseries-fixes 2004-01-19 21:11:44.000000000 -0800 +++ 25-akpm/arch/ppc64/kernel/iSeries_setup.h 2004-01-19 21:11:44.000000000 -0800 @@ -19,6 +19,8 @@ #ifndef __ISERIES_SETUP_H__ #define __ISERIES_SETUP_H__ +#include /* for irq_desc_t */ + extern void iSeries_init_early(void); extern void iSeries_init(unsigned long r3, unsigned long ird_start, unsigned long ird_end, unsigned long cline_start, diff -puN include/asm-ppc64/hw_irq.h~ppc64-iseries-fixes include/asm-ppc64/hw_irq.h --- 25/include/asm-ppc64/hw_irq.h~ppc64-iseries-fixes 2004-01-19 21:11:44.000000000 -0800 +++ 25-akpm/include/asm-ppc64/hw_irq.h 2004-01-19 21:11:44.000000000 -0800 @@ -21,18 +21,15 @@ extern void ppc_irq_dispatch_handler(str #ifdef CONFIG_PPC_ISERIES -extern void __no_use_sti(void); -extern void __no_use_cli(void); -extern void __no_use_restore_flags(unsigned long); -extern unsigned long __no_use_save_flags(void); -extern void __no_use_set_lost(unsigned long); -extern void __no_lpq_restore_flags(unsigned long); - -#define local_irq_disable() __no_use_cli() -#define local_irq_enable() __no_use_sti() -#define local_save_flags(flags) ((flags) = __no_use_save_flags()) -#define local_irq_restore(flags) __no_use_restore_flags((unsigned long)flags) -#define local_irq_save(flags) ({local_save_flags(flags);local_irq_disable();}) +extern unsigned long local_get_flags(void); +extern unsigned long local_irq_disable(void); +extern void local_irq_restore(unsigned long); + +#define local_irq_enable() local_irq_restore(1) +#define local_save_flags(flags) ((flags) = local_get_flags()) +#define local_irq_save(flags) ((flags) = local_irq_disable()) + +#define irqs_disabled() (local_get_flags() == 0) #else @@ -69,6 +66,13 @@ static inline void __do_save_and_cli(uns #define local_irq_save(flags) __do_save_and_cli(&flags) +#define irqs_disabled() \ +({ \ + unsigned long flags; \ + local_save_flags(flags); \ + !(flags & MSR_EE); \ +}) + #endif /* CONFIG_PPC_ISERIES */ #define mask_irq(irq) ({if (irq_desc[irq].handler && irq_desc[irq].handler->disable) irq_desc[irq].handler->disable(irq);}) diff -puN include/asm-ppc64/system.h~ppc64-iseries-fixes include/asm-ppc64/system.h --- 25/include/asm-ppc64/system.h~ppc64-iseries-fixes 2004-01-19 21:11:44.000000000 -0800 +++ 25-akpm/include/asm-ppc64/system.h 2004-01-19 21:11:44.000000000 -0800 @@ -104,13 +104,6 @@ extern struct task_struct * _switch(stru struct pt_regs; extern void dump_regs(struct pt_regs *); -#define irqs_disabled() \ -({ \ - unsigned long flags; \ - local_save_flags(flags); \ - !(flags & MSR_EE); \ -}) - static inline int __is_processor(unsigned long pv) { unsigned long pvr; _