linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / arm / nwfpe / fpmodule.c
index 4c0ab50..2dfe1ac 100644 (file)
@@ -24,6 +24,7 @@
 #include "fpa11.h"
 
 #include <linux/module.h>
+#include <linux/config.h>
 
 /* XXX */
 #include <linux/errno.h>
@@ -32,8 +33,7 @@
 #include <linux/signal.h>
 #include <linux/sched.h>
 #include <linux/init.h>
-
-#include <asm/thread_notify.h>
+/* XXX */
 
 #include "softfloat.h"
 #include "fpopcode.h"
@@ -56,28 +56,16 @@ void fp_send_sig(unsigned long sig, struct task_struct *p, int priv);
 extern char fpe_type[];
 #endif
 
-static int nwfpe_notify(struct notifier_block *self, unsigned long cmd, void *v)
-{
-       struct thread_info *thread = v;
-
-       if (cmd == THREAD_NOTIFY_FLUSH)
-               nwfpe_init_fpa(&thread->fpstate);
-
-       return NOTIFY_DONE;
-}
-
-static struct notifier_block nwfpe_notifier_block = {
-       .notifier_call = nwfpe_notify,
-};
-
 /* kernel function prototypes required */
 void fp_setup(void);
 
 /* external declarations for saved kernel symbols */
 extern void (*kern_fp_enter)(void);
+extern void (*fp_init)(union fp_state *);
 
 /* Original value of fp_enter from kernel before patched by fpe_init. */
 static void (*orig_fp_enter)(void);
+static void (*orig_fp_init)(union fp_state *);
 
 /* forward declarations */
 extern void nwfpe_enter(void);
@@ -100,20 +88,20 @@ static int __init fpe_init(void)
        printk(KERN_WARNING "NetWinder Floating Point Emulator V0.97 ("
               NWFPE_BITS " precision)\n");
 
-       thread_register_notifier(&nwfpe_notifier_block);
-
        /* Save pointer to the old FP handler and then patch ourselves in */
        orig_fp_enter = kern_fp_enter;
+       orig_fp_init = fp_init;
        kern_fp_enter = nwfpe_enter;
+       fp_init = nwfpe_init_fpa;
 
        return 0;
 }
 
 static void __exit fpe_exit(void)
 {
-       thread_unregister_notifier(&nwfpe_notifier_block);
        /* Restore the values we saved earlier. */
        kern_fp_enter = orig_fp_enter;
+       fp_init = orig_fp_init;
 }
 
 /*