diff options
-rw-r--r-- | arch/s390/kernel/ipl.c | 30 |
1 files changed, 6 insertions, 24 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index e5a72a2b0c56..9e2f6f7c0e5a 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
@@ -1498,30 +1498,12 @@ static struct shutdown_action __refdata dump_action = { | |||
1498 | 1498 | ||
1499 | static void dump_reipl_run(struct shutdown_trigger *trigger) | 1499 | static void dump_reipl_run(struct shutdown_trigger *trigger) |
1500 | { | 1500 | { |
1501 | preempt_disable(); | 1501 | u32 csum; |
1502 | /* | 1502 | |
1503 | * Bypass dynamic address translation (DAT) when storing IPL parameter | 1503 | csum = csum_partial(reipl_block_actual, reipl_block_actual->hdr.len, 0); |
1504 | * information block address and checksum into the prefix area | 1504 | copy_to_absolute_zero(&S390_lowcore.ipib_checksum, &csum, sizeof(csum)); |
1505 | * (corresponding to absolute addresses 0-8191). | 1505 | copy_to_absolute_zero(&S390_lowcore.ipib, &reipl_block_actual, |
1506 | * When enhanced DAT applies and the STE format control in one, | 1506 | sizeof(reipl_block_actual)); |
1507 | * the absolute address is formed without prefixing. In this case a | ||
1508 | * normal store (stg/st) into the prefix area would no more match to | ||
1509 | * absolute addresses 0-8191. | ||
1510 | */ | ||
1511 | #ifdef CONFIG_64BIT | ||
1512 | asm volatile("sturg %0,%1" | ||
1513 | :: "a" ((unsigned long) reipl_block_actual), | ||
1514 | "a" (&lowcore_ptr[smp_processor_id()]->ipib)); | ||
1515 | #else | ||
1516 | asm volatile("stura %0,%1" | ||
1517 | :: "a" ((unsigned long) reipl_block_actual), | ||
1518 | "a" (&lowcore_ptr[smp_processor_id()]->ipib)); | ||
1519 | #endif | ||
1520 | asm volatile("stura %0,%1" | ||
1521 | :: "a" (csum_partial(reipl_block_actual, | ||
1522 | reipl_block_actual->hdr.len, 0)), | ||
1523 | "a" (&lowcore_ptr[smp_processor_id()]->ipib_checksum)); | ||
1524 | preempt_enable(); | ||
1525 | dump_run(trigger); | 1507 | dump_run(trigger); |
1526 | } | 1508 | } |
1527 | 1509 | ||