Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[S390] pfault code cleanup.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

authored by

Heiko Carstens and committed by
Martin Schwidefsky
29b08d2b 36a2bd42

+40 -44
+1 -7
arch/s390/kernel/machine_kexec.c
··· 49 49 printk(KERN_INFO "kexec: machine_shutdown called\n"); 50 50 } 51 51 52 - extern void pfault_fini(void); 53 - 54 52 void machine_kexec(struct kimage *image) 55 53 { 56 54 relocate_kernel_t data_mover; 57 55 58 - preempt_disable(); 59 - #ifdef CONFIG_PFAULT 60 - if (MACHINE_IS_VM) 61 - pfault_fini(); 62 - #endif 63 56 smp_send_stop(); 57 + pfault_fini(); 64 58 s390_reset_system(); 65 59 66 60 data_mover = (relocate_kernel_t) page_to_phys(image->control_code_page);
+3 -10
arch/s390/kernel/smp.c
··· 460 460 */ 461 461 extern void init_cpu_timer(void); 462 462 extern void init_cpu_vtimer(void); 463 - extern int pfault_init(void); 464 - extern void pfault_fini(void); 465 463 466 464 int __devinit start_secondary(void *cpuvoid) 467 465 { ··· 471 473 #ifdef CONFIG_VIRT_TIMER 472 474 init_cpu_vtimer(); 473 475 #endif 474 - #ifdef CONFIG_PFAULT 475 476 /* Enable pfault pseudo page faults on this cpu. */ 476 - if (MACHINE_IS_VM) 477 - pfault_init(); 478 - #endif 477 + pfault_init(); 478 + 479 479 /* Mark this cpu as online */ 480 480 cpu_set(smp_processor_id(), cpu_online_map); 481 481 /* Switch on interrupts */ ··· 663 667 } 664 668 cpu_clear(cpu, cpu_online_map); 665 669 666 - #ifdef CONFIG_PFAULT 667 670 /* Disable pfault pseudo page faults on this cpu. */ 668 - if (MACHINE_IS_VM) 669 - pfault_fini(); 670 - #endif 671 + pfault_fini(); 671 672 672 673 memset(&cr_parms.orvals, 0, sizeof(cr_parms.orvals)); 673 674 memset(&cr_parms.andvals, 0xff, sizeof(cr_parms.andvals));
+1 -24
arch/s390/kernel/traps.c
··· 58 58 59 59 extern pgm_check_handler_t do_protection_exception; 60 60 extern pgm_check_handler_t do_dat_exception; 61 - #ifdef CONFIG_PFAULT 62 - extern int pfault_init(void); 63 - extern void pfault_fini(void); 64 - extern void pfault_interrupt(__u16 error_code); 65 - static ext_int_info_t ext_int_pfault; 66 - #endif 67 61 extern pgm_check_handler_t do_monitor_call; 68 62 69 63 #define stack_pointer ({ void **sp; asm("la %0,0(15)" : "=&d" (sp)); sp; }) ··· 733 739 pgm_check_table[0x1C] = &space_switch_exception; 734 740 pgm_check_table[0x1D] = &hfp_sqrt_exception; 735 741 pgm_check_table[0x40] = &do_monitor_call; 736 - 737 - if (MACHINE_IS_VM) { 738 - #ifdef CONFIG_PFAULT 739 - /* 740 - * Try to get pfault pseudo page faults going. 741 - */ 742 - if (register_early_external_interrupt(0x2603, pfault_interrupt, 743 - &ext_int_pfault) != 0) 744 - panic("Couldn't request external interrupt 0x2603"); 745 - 746 - if (pfault_init() == 0) 747 - return; 748 - 749 - /* Tough luck, no pfault. */ 750 - unregister_early_external_interrupt(0x2603, pfault_interrupt, 751 - &ext_int_pfault); 752 - #endif 753 - } 742 + pfault_irq_init(); 754 743 }
+25 -3
arch/s390/mm/fault.c
··· 31 31 #include <asm/uaccess.h> 32 32 #include <asm/pgtable.h> 33 33 #include <asm/kdebug.h> 34 + #include <asm/s390_ext.h> 34 35 35 36 #ifndef CONFIG_64BIT 36 37 #define __FAIL_ADDR_MASK 0x7ffff000 ··· 395 394 /* 396 395 * 'pfault' pseudo page faults routines. 397 396 */ 397 + static ext_int_info_t ext_int_pfault; 398 398 static int pfault_disable = 0; 399 399 400 400 static int __init nopfault(char *str) ··· 424 422 __PF_RES_FIELD }; 425 423 int rc; 426 424 427 - if (pfault_disable) 425 + if (!MACHINE_IS_VM || pfault_disable) 428 426 return -1; 429 427 asm volatile( 430 428 " diag %1,%0,0x258\n" ··· 442 440 pfault_refbk_t refbk = 443 441 { 0x258, 1, 5, 2, 0ULL, 0ULL, 0ULL, 0ULL }; 444 442 445 - if (pfault_disable) 443 + if (!MACHINE_IS_VM || pfault_disable) 446 444 return; 447 445 __ctl_clear_bit(0,9); 448 446 asm volatile( ··· 502 500 set_tsk_need_resched(tsk); 503 501 } 504 502 } 505 - #endif 506 503 504 + void __init pfault_irq_init(void) 505 + { 506 + if (!MACHINE_IS_VM) 507 + return; 508 + 509 + /* 510 + * Try to get pfault pseudo page faults going. 511 + */ 512 + if (register_early_external_interrupt(0x2603, pfault_interrupt, 513 + &ext_int_pfault) != 0) 514 + panic("Couldn't request external interrupt 0x2603"); 515 + 516 + if (pfault_init() == 0) 517 + return; 518 + 519 + /* Tough luck, no pfault. */ 520 + pfault_disable = 1; 521 + unregister_early_external_interrupt(0x2603, pfault_interrupt, 522 + &ext_int_pfault); 523 + } 524 + #endif
+10
include/asm-s390/system.h
··· 115 115 #define account_vtime(x) do { /* empty */ } while (0) 116 116 #endif 117 117 118 + #ifdef CONFIG_PFAULT 119 + extern void pfault_irq_init(void); 120 + extern int pfault_init(void); 121 + extern void pfault_fini(void); 122 + #else /* CONFIG_PFAULT */ 123 + #define pfault_irq_init() do { } while (0) 124 + #define pfault_init() ({-1;}) 125 + #define pfault_fini() do { } while (0) 126 + #endif /* CONFIG_PFAULT */ 127 + 118 128 #define finish_arch_switch(prev) do { \ 119 129 set_fs(current->thread.mm_segment); \ 120 130 account_vtime(prev); \