aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/ipl.c
diff options
context:
space:
mode:
authorMichael Holzheu <holzheu@linux.vnet.ibm.com>2012-03-11 11:59:28 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2012-03-11 11:59:28 -0400
commitb43445ff6c514822979cc9ae02c76f98bf68721c (patch)
tree4c6099a6065a5af03e85247daf929c10a88d30f6 /arch/s390/kernel/ipl.c
parent4c1051e37a0e2a941115c6fb7ba08c318f25a0f9 (diff)
[S390] Use copy_to_absolute_zero() instead of "stura/sturg"
Use the new copy_to_absolute_zero() function instead of manual "stura" and "sturg" to make the code shorter and more readable. Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/ipl.c')
-rw-r--r--arch/s390/kernel/ipl.c30
1 files changed, 6 insertions, 24 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index e5a72a2b0c5..9e2f6f7c0e5 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
1499static void dump_reipl_run(struct shutdown_trigger *trigger) 1499static 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