diff options
Diffstat (limited to 'arch/s390/kernel/nmi.c')
| -rw-r--r-- | arch/s390/kernel/nmi.c | 26 | 
1 files changed, 10 insertions, 16 deletions
diff --git a/arch/s390/kernel/nmi.c b/arch/s390/kernel/nmi.c index ac151399ef3..210e1285f75 100644 --- a/arch/s390/kernel/nmi.c +++ b/arch/s390/kernel/nmi.c @@ -1,13 +1,14 @@  /*   *   Machine check handler   * - *    Copyright IBM Corp. 2000,2009 + *    Copyright IBM Corp. 2000, 2009   *    Author(s): Ingo Adlung <adlung@de.ibm.com>,   *		 Martin Schwidefsky <schwidefsky@de.ibm.com>,   *		 Cornelia Huck <cornelia.huck@de.ibm.com>,   *		 Heiko Carstens <heiko.carstens@de.ibm.com>,   */ +#include <linux/kernel_stat.h>  #include <linux/init.h>  #include <linux/errno.h>  #include <linux/hardirq.h> @@ -29,7 +30,7 @@ struct mcck_struct {  static DEFINE_PER_CPU(struct mcck_struct, cpu_mcck); -static NORET_TYPE void s390_handle_damage(char *msg) +static void s390_handle_damage(char *msg)  {  	smp_send_stop();  	disabled_wait((unsigned long) __builtin_return_address(0)); @@ -54,7 +55,7 @@ void s390_handle_mcck(void)  	local_mcck_disable();  	mcck = __get_cpu_var(cpu_mcck);  	memset(&__get_cpu_var(cpu_mcck), 0, sizeof(struct mcck_struct)); -	clear_thread_flag(TIF_MCCK_PENDING); +	clear_cpu_flag(CIF_MCCK_PENDING);  	local_mcck_enable();  	local_irq_restore(flags); @@ -95,7 +96,6 @@ EXPORT_SYMBOL_GPL(s390_handle_mcck);  static int notrace s390_revalidate_registers(struct mci *mci)  {  	int kill_task; -	u64 tmpclock;  	u64 zero;  	void *fpt_save_area, *fpt_creg_save_area; @@ -214,11 +214,7 @@ static int notrace s390_revalidate_registers(struct mci *mci)  			: "0", "cc");  #endif  	/* Revalidate clock comparator register */ -	asm volatile( -		"	stck	0(%1)\n" -		"	sckc	0(%1)" -		: "=m" (tmpclock) : "a" (&(tmpclock)) : "cc", "memory"); - +	set_clock_comparator(S390_lowcore.clock_comparator);  	/* Check if old PSW is valid */  	if (!mci->wp)  		/* @@ -255,9 +251,7 @@ void notrace s390_do_machine_check(struct pt_regs *regs)  	int umode;  	nmi_enter(); -	s390_idle_check(regs, S390_lowcore.mcck_clock, -			S390_lowcore.mcck_enter_timer); - +	inc_irq_stat(NMI_NMI);  	mci = (struct mci *) &S390_lowcore.mcck_interruption_code;  	mcck = &__get_cpu_var(cpu_mcck);  	umode = user_mode(regs); @@ -296,7 +290,7 @@ void notrace s390_do_machine_check(struct pt_regs *regs)  			 * retry this instruction.  			 */  			spin_lock(&ipd_lock); -			tmp = get_clock(); +			tmp = get_tod_clock();  			if (((tmp - last_ipd) >> 12) < MAX_IPD_TIME)  				ipd_count++;  			else @@ -319,7 +313,7 @@ void notrace s390_do_machine_check(struct pt_regs *regs)  			 */  			mcck->kill_task = 1;  			mcck->mcck_code = *(unsigned long long *) mci; -			set_thread_flag(TIF_MCCK_PENDING); +			set_cpu_flag(CIF_MCCK_PENDING);  		} else {  			/*  			 * Couldn't restore all register contents while in @@ -358,12 +352,12 @@ void notrace s390_do_machine_check(struct pt_regs *regs)  	if (mci->cp) {  		/* Channel report word pending */  		mcck->channel_report = 1; -		set_thread_flag(TIF_MCCK_PENDING); +		set_cpu_flag(CIF_MCCK_PENDING);  	}  	if (mci->w) {  		/* Warning pending */  		mcck->warning = 1; -		set_thread_flag(TIF_MCCK_PENDING); +		set_cpu_flag(CIF_MCCK_PENDING);  	}  	nmi_exit();  }  | 
