]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/init.h
Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6
[linux-2.6-omap-h63xx.git] / include / linux / init.h
index 8bc32bb2fce20a23e04b9327b1912a59f5e97252..5141381a75279bbb0a6b15c729e93d015302088b 100644 (file)
 
 /* These are for everybody (although not all archs will actually
    discard it in modules) */
-#define __init         __attribute__ ((__section__ (".init.text")))
+#define __init         __attribute__ ((__section__ (".init.text"))) __cold
 #define __initdata     __attribute__ ((__section__ (".init.data")))
 #define __exitdata     __attribute__ ((__section__(".exit.data")))
 #define __exit_call    __attribute_used__ __attribute__ ((__section__ (".exitcall.exit")))
 
+/* modpost check for section mismatches during the kernel build.
+ * A section mismatch happens when there are references from a
+ * code or data section to an init section (both code or data).
+ * The init sections are (for most archs) discarded by the kernel
+ * when early init has completed so all such references are potential bugs.
+ * For exit sections the same issue exists.
+ * The following markers are used for the cases where the reference to
+ * the init/exit section (code or data) is valid and will teach modpost
+ * not to issue a warning.
+ * The markers follow same syntax rules as __init / __initdata. */
+#define __init_refok     noinline __attribute__ ((__section__ (".text.init.refok")))
+#define __initdata_refok          __attribute__ ((__section__ (".data.init.refok")))
+#define __exit_refok     noinline __attribute__ ((__section__ (".exit.text.refok")))
+
 #ifdef MODULE
-#define __exit         __attribute__ ((__section__(".exit.text")))
+#define __exit         __attribute__ ((__section__(".exit.text"))) __cold
 #else
-#define __exit         __attribute_used__ __attribute__ ((__section__(".exit.text")))
+#define __exit         __attribute_used__ __attribute__ ((__section__(".exit.text"))) __cold
 #endif
 
 /* For assembly routines */
-#ifdef CONFIG_HOTPLUG_CPU
-#define __INIT         .section        ".text","ax"
-#define __INITDATA     .section        ".data","aw"
-#else
 #define __INIT         .section        ".init.text","ax"
-#define __INITDATA     .section        ".init.data","aw"
-#endif
+#define __INIT_REFOK   .section        ".text.init.refok","ax"
 #define __FINIT                .previous
+#define __INITDATA     .section        ".init.data","aw"
+#define __INITDATA_REFOK .section      ".data.init.refok","aw"
 
 #ifndef __ASSEMBLY__
 /*
@@ -106,7 +117,7 @@ void prepare_namespace(void);
  *
  * This only exists for built-in code, not for modules.
  */
-#define pure_initcall(fn)              __define_initcall("0",fn,1)
+#define pure_initcall(fn)              __define_initcall("0",fn,0)
 
 #define core_initcall(fn)              __define_initcall("1",fn,1)
 #define core_initcall_sync(fn)         __define_initcall("1s",fn,1s)
@@ -150,7 +161,7 @@ struct obs_kernel_param {
  * obs_kernel_param "array" too far apart in .init.setup.
  */
 #define __setup_param(str, unique_id, fn, early)                       \
-       static char __setup_str_##unique_id[] __initdata = str; \
+       static char __setup_str_##unique_id[] __initdata __aligned(1) = str; \
        static struct obs_kernel_param __setup_##unique_id      \
                __attribute_used__                              \
                __attribute__((__section__(".init.setup")))     \
@@ -163,9 +174,6 @@ struct obs_kernel_param {
 #define __setup(str, fn)                                       \
        __setup_param(str, fn, fn, 0)
 
-#define __obsolete_setup(str)                                  \
-       __setup_null_param(str, __LINE__)
-
 /* NOTE: fn is as per module_param, not __setup!  Emits warning if fn
  * returns non-zero. */
 #define early_param(str, fn)                                   \
@@ -231,7 +239,6 @@ void __init parse_early_param(void);
 #define __setup_param(str, unique_id, fn)      /* nothing */
 #define __setup_null_param(str, unique_id)     /* nothing */
 #define __setup(str, func)                     /* nothing */
-#define __obsolete_setup(str)                  /* nothing */
 #endif
 
 /* Data marked not to be saved by software suspend */