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

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

[S390] Add exception handler for diagnose 224



To be able to run with the diagnose 224 switched off, a potential
specification exception has to be handled.

Signed-off-by: default avatarMichael Holzheu <holzheu@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 3f0a6766
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -481,9 +481,17 @@ out:

/* Diagnose 224 functions */

static void diag224(void *ptr)
static int diag224(void *ptr)
{
	asm volatile("diag %0,%1,0x224" : :"d" (0), "d"(ptr) : "memory");
	int rc = -ENOTSUPP;

	asm volatile(
		"	diag	%1,%2,0x224\n"
		"0:	lhi	%0,0x0\n"
		"1:\n"
		EX_TABLE(0b,1b)
		: "+d" (rc) :"d" (0), "d" (ptr) : "memory");
	return rc;
}

static int diag224_get_name_table(void)
@@ -492,7 +500,10 @@ static int diag224_get_name_table(void)
	diag224_cpu_names = kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
	if (!diag224_cpu_names)
		return -ENOMEM;
	diag224(diag224_cpu_names);
	if (diag224(diag224_cpu_names)) {
		kfree(diag224_cpu_names);
		return -ENOTSUPP;
	}
	EBCASC(diag224_cpu_names + 16, (*diag224_cpu_names + 1) * 16);
	return 0;
}