diff options
| author | Michael Holzheu <holzheu@linux.vnet.ibm.com> | 2012-03-11 11:59:28 -0400 | 
|---|---|---|
| committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-03-11 11:59:28 -0400 | 
| commit | b43445ff6c514822979cc9ae02c76f98bf68721c (patch) | |
| tree | 4c6099a6065a5af03e85247daf929c10a88d30f6 | |
| parent | 4c1051e37a0e2a941115c6fb7ba08c318f25a0f9 (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>
| -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 = {  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);  }  | 
