|
@@ -1498,30 +1498,12 @@ static struct shutdown_action __refdata dump_action = {
|
|
|
|
|
|
static void dump_reipl_run(struct shutdown_trigger *trigger)
|
|
|
{
|
|
|
- preempt_disable();
|
|
|
- /*
|
|
|
- * Bypass dynamic address translation (DAT) when storing IPL parameter
|
|
|
- * information block address and checksum into the prefix area
|
|
|
- * (corresponding to absolute addresses 0-8191).
|
|
|
- * When enhanced DAT applies and the STE format control in one,
|
|
|
- * the absolute address is formed without prefixing. In this case a
|
|
|
- * normal store (stg/st) into the prefix area would no more match to
|
|
|
- * absolute addresses 0-8191.
|
|
|
- */
|
|
|
-#ifdef CONFIG_64BIT
|
|
|
- asm volatile("sturg %0,%1"
|
|
|
- :: "a" ((unsigned long) reipl_block_actual),
|
|
|
- "a" (&lowcore_ptr[smp_processor_id()]->ipib));
|
|
|
-#else
|
|
|
- asm volatile("stura %0,%1"
|
|
|
- :: "a" ((unsigned long) reipl_block_actual),
|
|
|
- "a" (&lowcore_ptr[smp_processor_id()]->ipib));
|
|
|
-#endif
|
|
|
- asm volatile("stura %0,%1"
|
|
|
- :: "a" (csum_partial(reipl_block_actual,
|
|
|
- reipl_block_actual->hdr.len, 0)),
|
|
|
- "a" (&lowcore_ptr[smp_processor_id()]->ipib_checksum));
|
|
|
- preempt_enable();
|
|
|
+ u32 csum;
|
|
|
+
|
|
|
+ csum = csum_partial(reipl_block_actual, reipl_block_actual->hdr.len, 0);
|
|
|
+ copy_to_absolute_zero(&S390_lowcore.ipib_checksum, &csum, sizeof(csum));
|
|
|
+ copy_to_absolute_zero(&S390_lowcore.ipib, &reipl_block_actual,
|
|
|
+ sizeof(reipl_block_actual));
|
|
|
dump_run(trigger);
|
|
|
}
|
|
|
|