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

[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
...@@ -481,9 +481,17 @@ out: ...@@ -481,9 +481,17 @@ out:
/* Diagnose 224 functions */ /* 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) static int diag224_get_name_table(void)
...@@ -492,7 +500,10 @@ 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); diag224_cpu_names = kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
if (!diag224_cpu_names) if (!diag224_cpu_names)
return -ENOMEM; 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); EBCASC(diag224_cpu_names + 16, (*diag224_cpu_names + 1) * 16);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment