Index: linux-2.6.17/arch/um/include/init.h
===================================================================
--- linux-2.6.17.orig/arch/um/include/init.h	2007-09-09 15:50:20.000000000 +0100
+++ linux-2.6.17/arch/um/include/init.h	2007-09-09 15:52:19.000000000 +0100
@@ -1,5 +1,5 @@
-#ifndef _LINUX_UML_INIT_H
-#define _LINUX_UML_INIT_H
+#ifndef _UM_INIT_H
+#define _UM_INIT_H
 
 /* These macros are used to mark some functions or
  * initialized data (doesn't apply to uninitialized data)
@@ -36,7 +36,31 @@
  * Also note, that this data cannot be "const".
  */
 
-#ifndef _LINUX_INIT_H
+#ifdef __KERNEL__
+
+#include <linux/init.h>
+
+#else
+
+#define __define_initcall(level,fn) \
+	static initcall_t __initcall_##fn __used \
+	__attribute__((__section__(".initcall" level ".init"))) = fn
+
+/* Userspace initcalls shouldn't depend on anything in the kernel, so we'll
+ * make them run first.
+ */
+#define __initcall(fn) __define_initcall("1", fn)
+
+#define __exitcall(fn) static exitcall_t __exitcall_##fn __exit_call = fn
+
+#define __init_call	__used __attribute__ ((__section__ (".initcall.init")))
+
+#if __GNUC_MINOR__ >= 3
+# define __used			__attribute__((__used__))
+#else
+# define __used			__attribute__((__unused__))
+#endif
+
 typedef int (*initcall_t)(void);
 typedef void (*exitcall_t)(void);
 
@@ -109,32 +133,4 @@ extern struct uml_param __uml_setup_star
 #define __uml_postsetup_call	__attribute_used__ __attribute__ ((__section__ (".uml.postsetup.init")))
 #define __uml_exit_call		__attribute_used__ __attribute__ ((__section__ (".uml.exitcall.exit")))
 
-#ifndef __KERNEL__
-
-#define __define_initcall(level,fn) \
-	static initcall_t __initcall_##fn __attribute_used__ \
-	__attribute__((__section__(".initcall" level ".init"))) = fn
-
-/* Userspace initcalls shouldn't depend on anything in the kernel, so we'll
- * make them run first.
- */
-#define __initcall(fn) __define_initcall("1", fn)
-
-#define __exitcall(fn) static exitcall_t __exitcall_##fn __exit_call = fn
-
-#define __init_call	__attribute_used__ __attribute__ ((__section__ (".initcall.init")))
-
-#endif
-
-#endif /* _LINUX_UML_INIT_H */
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-file-style: "linux"
- * End:
- */
+#endif /* _UM_INIT_H */