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

Commit e030c112 authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky
Browse files

s390/hypfs: use basic block for diag inline assembly



Use only simple inline assemblies which consist of a single basic
block if the register asm construct is being used.

Otherwise gcc would generate broken code if the compiler option
--sanitize-coverage=trace-pc would be used.

Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 2c79813a
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -337,9 +337,9 @@ static inline __u64 phys_cpu__ctidx(enum diag204_format type, void *hdr)

/* Diagnose 204 functions */

static inline int __diag204(unsigned long subcode, unsigned long size, void *addr)
static inline int __diag204(unsigned long *subcode, unsigned long size, void *addr)
{
	register unsigned long _subcode asm("0") = subcode;
	register unsigned long _subcode asm("0") = *subcode;
	register unsigned long _size asm("1") = size;

	asm volatile(
@@ -347,15 +347,17 @@ static inline int __diag204(unsigned long subcode, unsigned long size, void *add
		"0:	nopr	%%r7\n"
		EX_TABLE(0b,0b)
		: "+d" (_subcode), "+d" (_size) : "d" (addr) : "memory");
	if (_subcode)
		return -1;
	*subcode = _subcode;
	return _size;
}

static int diag204(unsigned long subcode, unsigned long size, void *addr)
{
	diag_stat_inc(DIAG_STAT_X204);
	return __diag204(subcode, size, addr);
	size = __diag204(&subcode, size, addr);
	if (subcode)
		return -1;
	return size;
}

/*