From 9baeca57770ee7fa2cdcc847847cc6f02e3baf62 Mon Sep 17 00:00:00 2001 From: Martin Schwidefsky Date: Tue, 6 Jul 2004 09:18:28 -0700 Subject: [PATCH] s390: cpu hotplug support From: Ursula Braun-Krahl From: Heiko Carstens From: Gerald Schaefer From: Martin Schwidefsky Add s390 architecture support for cpu hotplug. Signed-off-by: Martin Schwidefsky Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- include/asm-s390/sigp.h | 32 ++++---------------------------- include/asm-s390/smp.h | 11 +++++++++++ 2 files changed, 15 insertions(+), 28 deletions(-) (limited to 'include') diff --git a/include/asm-s390/sigp.h b/include/asm-s390/sigp.h index d5583c78dc9b..3979bc3858e2 100644 --- a/include/asm-s390/sigp.h +++ b/include/asm-s390/sigp.h @@ -5,6 +5,7 @@ * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), * Martin Schwidefsky (schwidefsky@de.ibm.com) + * Heiko Carstens (heiko.carstens@de.ibm.com) * * sigp.h by D.J. Barrow (c) IBM 1999 * contains routines / structures for signalling other S/390 processors in an @@ -72,17 +73,10 @@ signal_processor(__u16 cpu_addr, sigp_order_code order_code) sigp_ccode ccode; __asm__ __volatile__( -#ifndef __s390x__ " sr 1,1\n" /* parameter=0 in gpr 1 */ " sigp 1,%1,0(%2)\n" " ipm %0\n" " srl %0,28\n" -#else /* __s390x__ */ - " sgr 1,1\n" /* parameter=0 in gpr 1 */ - " sigp 1,%1,0(%2)\n" - " ipm %0\n" - " srl %0,28" -#endif /* __s390x__ */ : "=d" (ccode) : "d" (__cpu_logical_map[cpu_addr]), "a" (order_code) : "cc" , "memory", "1" ); @@ -93,23 +87,16 @@ signal_processor(__u16 cpu_addr, sigp_order_code order_code) * Signal processor with parameter */ extern __inline__ sigp_ccode -signal_processor_p(unsigned long parameter,__u16 cpu_addr, +signal_processor_p(__u32 parameter, __u16 cpu_addr, sigp_order_code order_code) { sigp_ccode ccode; __asm__ __volatile__( -#ifndef __s390x__ " lr 1,%1\n" /* parameter in gpr 1 */ " sigp 1,%2,0(%3)\n" " ipm %0\n" " srl %0,28\n" -#else /* __s390x__ */ - " lgr 1,%1\n" /* parameter in gpr 1 */ - " sigp 1,%2,0(%3)\n" - " ipm %0\n" - " srl %0,28\n" -#endif /* __s390x__ */ : "=d" (ccode) : "d" (parameter), "d" (__cpu_logical_map[cpu_addr]), "a" (order_code) @@ -121,27 +108,18 @@ signal_processor_p(unsigned long parameter,__u16 cpu_addr, * Signal processor with parameter and return status */ extern __inline__ sigp_ccode -signal_processor_ps(unsigned long *statusptr, unsigned long parameter, +signal_processor_ps(__u32 *statusptr, __u32 parameter, __u16 cpu_addr, sigp_order_code order_code) { sigp_ccode ccode; __asm__ __volatile__( -#ifndef __s390x__ - " sr 2,2\n" /* clear status so it doesn't contain rubbish if not saved. */ + " sr 2,2\n" /* clear status */ " lr 3,%2\n" /* parameter in gpr 3 */ " sigp 2,%3,0(%4)\n" " st 2,%1\n" " ipm %0\n" " srl %0,28\n" -#else /* __s390x__ */ - " sgr 2,2\n" /* clear status so it doesn't contain rubbish if not saved. */ - " lgr 3,%2\n" /* parameter in gpr 3 */ - " sigp 2,%3,0(%4)\n" - " stg 2,%1\n" - " ipm %0\n" - " srl %0,28\n" -#endif /* __s390x__ */ : "=d" (ccode), "=m" (*statusptr) : "d" (parameter), "d" (__cpu_logical_map[cpu_addr]), "a" (order_code) @@ -151,5 +129,3 @@ signal_processor_ps(unsigned long *statusptr, unsigned long parameter, } #endif /* __SIGP__ */ - - diff --git a/include/asm-s390/smp.h b/include/asm-s390/smp.h index 70d06261bb9e..0590eccb051a 100644 --- a/include/asm-s390/smp.h +++ b/include/asm-s390/smp.h @@ -5,6 +5,7 @@ * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), * Martin Schwidefsky (schwidefsky@de.ibm.com) + * Heiko Carstens (heiko.carstens@de.ibm.com) */ #ifndef __ASM_SMP_H #define __ASM_SMP_H @@ -47,6 +48,9 @@ extern int smp_call_function_on(void (*func) (void *info), void *info, #define smp_processor_id() (S390_lowcore.cpu_data.cpu_nr) +extern int smp_get_cpu(cpumask_t cpu_map); +extern void smp_put_cpu(int cpu); + extern __inline__ __u16 hard_smp_processor_id(void) { __u16 cpu_address; @@ -57,10 +61,17 @@ extern __inline__ __u16 hard_smp_processor_id(void) #define cpu_logical_map(cpu) (cpu) +extern int __cpu_disable (void); +extern void __cpu_die (unsigned int cpu); +extern void cpu_die (void) __attribute__ ((noreturn)); +extern int __cpu_up (unsigned int cpu); + #endif #ifndef CONFIG_SMP #define smp_call_function_on(func,info,nonatomic,wait,cpu) ({ 0; }) +#define smp_get_cpu(cpu) ({ 0; }) +#define smp_put_cpu(cpu) ({ 0; }) #endif #endif -- cgit v1.2.3