diff options
Diffstat (limited to 'arch/s390/kernel/nmi.c')
-rw-r--r-- | arch/s390/kernel/nmi.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/s390/kernel/nmi.c b/arch/s390/kernel/nmi.c index 210e1285f75a..d75c42f4147d 100644 --- a/arch/s390/kernel/nmi.c +++ b/arch/s390/kernel/nmi.c | |||
@@ -53,8 +53,12 @@ void s390_handle_mcck(void) | |||
53 | */ | 53 | */ |
54 | local_irq_save(flags); | 54 | local_irq_save(flags); |
55 | local_mcck_disable(); | 55 | local_mcck_disable(); |
56 | mcck = __get_cpu_var(cpu_mcck); | 56 | /* |
57 | memset(&__get_cpu_var(cpu_mcck), 0, sizeof(struct mcck_struct)); | 57 | * Ummm... Does this make sense at all? Copying the percpu struct |
58 | * and then zapping it one statement later? | ||
59 | */ | ||
60 | memcpy(&mcck, this_cpu_ptr(&cpu_mcck), sizeof(mcck)); | ||
61 | memset(&mcck, 0, sizeof(struct mcck_struct)); | ||
58 | clear_cpu_flag(CIF_MCCK_PENDING); | 62 | clear_cpu_flag(CIF_MCCK_PENDING); |
59 | local_mcck_enable(); | 63 | local_mcck_enable(); |
60 | local_irq_restore(flags); | 64 | local_irq_restore(flags); |
@@ -253,7 +257,7 @@ void notrace s390_do_machine_check(struct pt_regs *regs) | |||
253 | nmi_enter(); | 257 | nmi_enter(); |
254 | inc_irq_stat(NMI_NMI); | 258 | inc_irq_stat(NMI_NMI); |
255 | mci = (struct mci *) &S390_lowcore.mcck_interruption_code; | 259 | mci = (struct mci *) &S390_lowcore.mcck_interruption_code; |
256 | mcck = &__get_cpu_var(cpu_mcck); | 260 | mcck = this_cpu_ptr(&cpu_mcck); |
257 | umode = user_mode(regs); | 261 | umode = user_mode(regs); |
258 | 262 | ||
259 | if (mci->sd) { | 263 | if (mci->sd) { |