Loading arch/s390/hypfs/hypfs_diag.c +14 −3 Original line number Diff line number Diff line Loading @@ -481,9 +481,17 @@ static void *diag204_store(void) /* 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) Loading @@ -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; } Loading Loading
arch/s390/hypfs/hypfs_diag.c +14 −3 Original line number Diff line number Diff line Loading @@ -481,9 +481,17 @@ static void *diag204_store(void) /* 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) Loading @@ -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; } Loading