diff options
| author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2014-11-28 09:40:57 -0500 |
|---|---|---|
| committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-12-01 05:06:55 -0500 |
| commit | 2cb4a18262fd0108cb8abd875710c59d0aa66f1d (patch) | |
| tree | 7312af84b255c04028d95ada295bb1d8711d87ff | |
| parent | 009d0431c3914de64666bec0d350e54fdd59df6a (diff) | |
s390: fix machine check handling
Commit eb7e7d76 "s390: Replace __get_cpu_var uses" broke machine check
handling.
We copy machine check information from per-cpu to a stack variable for
local processing. Next we should zap the per-cpu variable, not the
stack variable.
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Acked-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| -rw-r--r-- | arch/s390/kernel/nmi.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/arch/s390/kernel/nmi.c b/arch/s390/kernel/nmi.c index dd1c24ceda50..3f51cf4e8f02 100644 --- a/arch/s390/kernel/nmi.c +++ b/arch/s390/kernel/nmi.c | |||
| @@ -54,12 +54,8 @@ void s390_handle_mcck(void) | |||
| 54 | */ | 54 | */ |
| 55 | local_irq_save(flags); | 55 | local_irq_save(flags); |
| 56 | local_mcck_disable(); | 56 | local_mcck_disable(); |
| 57 | /* | 57 | mcck = *this_cpu_ptr(&cpu_mcck); |
| 58 | * Ummm... Does this make sense at all? Copying the percpu struct | 58 | memset(this_cpu_ptr(&cpu_mcck), 0, sizeof(mcck)); |
| 59 | * and then zapping it one statement later? | ||
| 60 | */ | ||
| 61 | memcpy(&mcck, this_cpu_ptr(&cpu_mcck), sizeof(mcck)); | ||
| 62 | memset(&mcck, 0, sizeof(struct mcck_struct)); | ||
| 63 | clear_cpu_flag(CIF_MCCK_PENDING); | 59 | clear_cpu_flag(CIF_MCCK_PENDING); |
| 64 | local_mcck_enable(); | 60 | local_mcck_enable(); |
| 65 | local_irq_restore(flags); | 61 | local_irq_restore(flags); |
