diff options
Diffstat (limited to 'arch/s390/mm/fault.c')
| -rw-r--r-- | arch/s390/mm/fault.c | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 44f0cda7e72e..f2b9a84dc2bf 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
| @@ -355,6 +355,7 @@ out_of_memory: | |||
| 355 | up_read(&mm->mmap_sem); | 355 | up_read(&mm->mmap_sem); |
| 356 | if (tsk->pid == 1) { | 356 | if (tsk->pid == 1) { |
| 357 | yield(); | 357 | yield(); |
| 358 | down_read(&mm->mmap_sem); | ||
| 358 | goto survive; | 359 | goto survive; |
| 359 | } | 360 | } |
| 360 | printk("VM: killing process %s\n", tsk->comm); | 361 | printk("VM: killing process %s\n", tsk->comm); |
| @@ -423,20 +424,13 @@ int pfault_init(void) | |||
| 423 | 424 | ||
| 424 | if (pfault_disable) | 425 | if (pfault_disable) |
| 425 | return -1; | 426 | return -1; |
| 426 | __asm__ __volatile__( | 427 | asm volatile( |
| 427 | " diag %1,%0,0x258\n" | 428 | " diag %1,%0,0x258\n" |
| 428 | "0: j 2f\n" | 429 | "0: j 2f\n" |
| 429 | "1: la %0,8\n" | 430 | "1: la %0,8\n" |
| 430 | "2:\n" | 431 | "2:\n" |
| 431 | ".section __ex_table,\"a\"\n" | 432 | EX_TABLE(0b,1b) |
| 432 | " .align 4\n" | 433 | : "=d" (rc) : "a" (&refbk), "m" (refbk) : "cc"); |
| 433 | #ifndef CONFIG_64BIT | ||
| 434 | " .long 0b,1b\n" | ||
| 435 | #else /* CONFIG_64BIT */ | ||
| 436 | " .quad 0b,1b\n" | ||
| 437 | #endif /* CONFIG_64BIT */ | ||
| 438 | ".previous" | ||
| 439 | : "=d" (rc) : "a" (&refbk), "m" (refbk) : "cc" ); | ||
| 440 | __ctl_set_bit(0, 9); | 434 | __ctl_set_bit(0, 9); |
| 441 | return rc; | 435 | return rc; |
| 442 | } | 436 | } |
| @@ -449,18 +443,11 @@ void pfault_fini(void) | |||
| 449 | if (pfault_disable) | 443 | if (pfault_disable) |
| 450 | return; | 444 | return; |
| 451 | __ctl_clear_bit(0,9); | 445 | __ctl_clear_bit(0,9); |
| 452 | __asm__ __volatile__( | 446 | asm volatile( |
| 453 | " diag %0,0,0x258\n" | 447 | " diag %0,0,0x258\n" |
| 454 | "0:\n" | 448 | "0:\n" |
| 455 | ".section __ex_table,\"a\"\n" | 449 | EX_TABLE(0b,0b) |
| 456 | " .align 4\n" | 450 | : : "a" (&refbk), "m" (refbk) : "cc"); |
| 457 | #ifndef CONFIG_64BIT | ||
| 458 | " .long 0b,0b\n" | ||
| 459 | #else /* CONFIG_64BIT */ | ||
| 460 | " .quad 0b,0b\n" | ||
| 461 | #endif /* CONFIG_64BIT */ | ||
| 462 | ".previous" | ||
| 463 | : : "a" (&refbk), "m" (refbk) : "cc" ); | ||
| 464 | } | 451 | } |
| 465 | 452 | ||
| 466 | asmlinkage void | 453 | asmlinkage void |
