Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fb0a9d7e authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky
Browse files

[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: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 62d146ff
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -101,11 +101,9 @@ extern void account_vtime(struct task_struct *, struct task_struct *);
extern void account_tick_vtime(struct task_struct *);

#ifdef CONFIG_PFAULT
extern void pfault_irq_init(void);
extern int pfault_init(void);
extern void pfault_fini(void);
#else /* CONFIG_PFAULT */
#define pfault_irq_init()	do { } while (0)
#define pfault_init()		({-1;})
#define pfault_fini()		do { } while (0)
#endif /* CONFIG_PFAULT */
+0 −1
Original line number Diff line number Diff line
@@ -733,5 +733,4 @@ void __init trap_init(void)
        pgm_check_table[0x15] = &operand_exception;
        pgm_check_table[0x1C] = &space_switch_exception;
        pgm_check_table[0x1D] = &hfp_sqrt_exception;
	pfault_irq_init();
}
+15 −12
Original line number Diff line number Diff line
@@ -481,8 +481,7 @@ int __handle_fault(unsigned long uaddr, unsigned long pgm_int_code, int write)
/*
 * 'pfault' pseudo page faults routines.
 */
static ext_int_info_t ext_int_pfault;
static int pfault_disable = 0;
static int pfault_disable;

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)
		return;
	int rc;

	if (!MACHINE_IS_VM)
		return 0;
	/*
	 * Try to get pfault pseudo page faults going.
	 */
	if (register_early_external_interrupt(0x2603, pfault_interrupt,
					      &ext_int_pfault) != 0)
		panic("Couldn't request external interrupt 0x2603");

	rc = register_external_interrupt(0x2603, pfault_interrupt);
	if (rc) {
		pfault_disable = 1;
		return rc;
	}
	if (pfault_init() == 0)
		return;
		return 0;

	/* Tough luck, no pfault. */
	pfault_disable = 1;
	unregister_early_external_interrupt(0x2603, pfault_interrupt,
					    &ext_int_pfault);
	unregister_external_interrupt(0x2603, pfault_interrupt);
	return 0;
}
early_initcall(pfault_irq_init);

#endif