Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b43445ff authored by Michael Holzheu's avatar Michael Holzheu Committed by Martin Schwidefsky
Browse files

[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: default avatarMichael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 4c1051e3
Loading
Loading
Loading
Loading
+6 −24
Original line number Diff line number Diff line
@@ -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);
}