[S390] pfault: delay register of pfault interrupt
Use an early init call to initialize pfault. That way it is possible to use the register_external_interrupt() instead of the early variant. No need to enable pfault any earlier since it has only effect if user space processes are running. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
62d146ffe3
commit
fb0a9d7e86
@ -101,11 +101,9 @@ extern void account_vtime(struct task_struct *, struct task_struct *);
|
|||||||
extern void account_tick_vtime(struct task_struct *);
|
extern void account_tick_vtime(struct task_struct *);
|
||||||
|
|
||||||
#ifdef CONFIG_PFAULT
|
#ifdef CONFIG_PFAULT
|
||||||
extern void pfault_irq_init(void);
|
|
||||||
extern int pfault_init(void);
|
extern int pfault_init(void);
|
||||||
extern void pfault_fini(void);
|
extern void pfault_fini(void);
|
||||||
#else /* CONFIG_PFAULT */
|
#else /* CONFIG_PFAULT */
|
||||||
#define pfault_irq_init() do { } while (0)
|
|
||||||
#define pfault_init() ({-1;})
|
#define pfault_init() ({-1;})
|
||||||
#define pfault_fini() do { } while (0)
|
#define pfault_fini() do { } while (0)
|
||||||
#endif /* CONFIG_PFAULT */
|
#endif /* CONFIG_PFAULT */
|
||||||
|
@ -733,5 +733,4 @@ void __init trap_init(void)
|
|||||||
pgm_check_table[0x15] = &operand_exception;
|
pgm_check_table[0x15] = &operand_exception;
|
||||||
pgm_check_table[0x1C] = &space_switch_exception;
|
pgm_check_table[0x1C] = &space_switch_exception;
|
||||||
pgm_check_table[0x1D] = &hfp_sqrt_exception;
|
pgm_check_table[0x1D] = &hfp_sqrt_exception;
|
||||||
pfault_irq_init();
|
|
||||||
}
|
}
|
||||||
|
@ -481,8 +481,7 @@ int __handle_fault(unsigned long uaddr, unsigned long pgm_int_code, int write)
|
|||||||
/*
|
/*
|
||||||
* 'pfault' pseudo page faults routines.
|
* 'pfault' pseudo page faults routines.
|
||||||
*/
|
*/
|
||||||
static ext_int_info_t ext_int_pfault;
|
static int pfault_disable;
|
||||||
static int pfault_disable = 0;
|
|
||||||
|
|
||||||
static int __init nopfault(char *str)
|
static int __init nopfault(char *str)
|
||||||
{
|
{
|
||||||
@ -594,24 +593,28 @@ static void pfault_interrupt(unsigned int ext_int_code,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init pfault_irq_init(void)
|
static int __init pfault_irq_init(void)
|
||||||
{
|
{
|
||||||
if (!MACHINE_IS_VM)
|
int rc;
|
||||||
return;
|
|
||||||
|
|
||||||
|
if (!MACHINE_IS_VM)
|
||||||
|
return 0;
|
||||||
/*
|
/*
|
||||||
* Try to get pfault pseudo page faults going.
|
* Try to get pfault pseudo page faults going.
|
||||||
*/
|
*/
|
||||||
if (register_early_external_interrupt(0x2603, pfault_interrupt,
|
rc = register_external_interrupt(0x2603, pfault_interrupt);
|
||||||
&ext_int_pfault) != 0)
|
if (rc) {
|
||||||
panic("Couldn't request external interrupt 0x2603");
|
pfault_disable = 1;
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
if (pfault_init() == 0)
|
if (pfault_init() == 0)
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
/* Tough luck, no pfault. */
|
/* Tough luck, no pfault. */
|
||||||
pfault_disable = 1;
|
pfault_disable = 1;
|
||||||
unregister_early_external_interrupt(0x2603, pfault_interrupt,
|
unregister_external_interrupt(0x2603, pfault_interrupt);
|
||||||
&ext_int_pfault);
|
return 0;
|
||||||
}
|
}
|
||||||
|
early_initcall(pfault_irq_init);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user