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 */
 
 /*
  * '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)
 {
        }
 }
 
-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