Commit 4c89eb87 authored by Heiko Carstens's avatar Heiko Carstens
Browse files

s390/pfault: cleanup inline assemblies



Cleanup the pfault inline assemblies:
- Use symbolic names for operands
- Add extra linebreaks, and whitespace to improve readability

In addition, change __pfault_init() to return -EOPNOTSUPP in case of
an exception, and don't return a made up valid diag 258 return value
(aka "8").
This allows to simplify the inline assembly, and makes debugging
easier, in case something is broken.

Reviewed-by: default avatarSven Schnelle <svens@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent 28254f36
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@
#ifndef _ASM_S390_PFAULT_H
#define _ASM_S390_PFAULT_H

#include <linux/errno.h>

int __pfault_init(void);
void __pfault_fini(void);

@@ -12,7 +14,7 @@ static inline int pfault_init(void)
{
	if (IS_ENABLED(CONFIG_PFAULT))
		return __pfault_init();
	return -1;
	return -EOPNOTSUPP;
}

static inline void pfault_fini(void)
+14 −14
Original line number Diff line number Diff line
@@ -51,19 +51,18 @@ static struct pfault_refbk pfault_init_refbk = {

int __pfault_init(void)
{
        int rc;
	int rc = -EOPNOTSUPP;

	if (pfault_disable)
		return -1;
		return rc;
	diag_stat_inc(DIAG_STAT_X258);
	asm volatile(
		"	diag	%1,%0,0x258\n"
		"0:	j	2f\n"
		"1:	la	%0,8\n"
		"2:\n"
		EX_TABLE(0b,1b)
		: "=d" (rc)
		: "a" (&pfault_init_refbk), "m" (pfault_init_refbk) : "cc");
		"	diag	%[refbk],%[rc],0x258\n"
		"0:	nopr	%%r7\n"
		EX_TABLE(0b, 0b)
		: [rc] "+d" (rc)
		: [refbk] "a" (&pfault_init_refbk), "m" (pfault_init_refbk)
		: "cc");
	return rc;
}

@@ -76,15 +75,16 @@ static struct pfault_refbk pfault_fini_refbk = {

void __pfault_fini(void)
{

	if (pfault_disable)
		return;
	diag_stat_inc(DIAG_STAT_X258);
	asm volatile(
		"	diag	%0,0,0x258\n"
		"	diag	%[refbk],0,0x258\n"
		"0:	nopr	%%r7\n"
		EX_TABLE(0b, 0b)
		: : "a" (&pfault_fini_refbk), "m" (pfault_fini_refbk) : "cc");
		:
		: [refbk] "a" (&pfault_fini_refbk), "m" (pfault_fini_refbk)
		: "cc");
}

static DEFINE_SPINLOCK(pfault_lock);