add per_cpu_dyn_array support
[deliverable/linux.git] / include / linux / init.h
index 11b84e1060532ecf62f73e3151b9f6eaed043c8b..332806826b8e0740daaade5283dd6c3df422948c 100644 (file)
@@ -139,6 +139,7 @@ extern initcall_t __con_initcall_start[], __con_initcall_end[];
 extern initcall_t __security_initcall_start[], __security_initcall_end[];
 
 /* Defined in init/main.c */
+extern int do_one_initcall(initcall_t fn);
 extern char __initdata boot_command_line[];
 extern char *saved_command_line;
 extern unsigned int reset_devices;
@@ -245,6 +246,50 @@ struct obs_kernel_param {
 
 /* Relies on boot_command_line being set */
 void __init parse_early_param(void);
+
+struct dyn_array {
+       void **name;
+       unsigned long size;
+       unsigned int *nr;
+       unsigned long align;
+       void (*init_work)(void *);
+};
+extern struct dyn_array *__dyn_array_start[], *__dyn_array_end[];
+extern struct dyn_array *__per_cpu_dyn_array_start[], *__per_cpu_dyn_array_end[];
+
+#define DEFINE_DYN_ARRAY_ADDR(nameX, addrX, sizeX, nrX, alignX, init_workX) \
+               static struct dyn_array __dyn_array_##nameX __initdata = \
+               {       .name = (void **)&(nameX),\
+                       .size = sizeX,\
+                       .nr   = &(nrX),\
+                       .align = alignX,\
+                       .init_work = init_workX,\
+               }; \
+               static struct dyn_array *__dyn_array_ptr_##nameX __used \
+               __attribute__((__section__(".dyn_array.init"))) = \
+                       &__dyn_array_##nameX
+
+#define DEFINE_DYN_ARRAY(nameX, sizeX, nrX, alignX, init_workX) \
+       DEFINE_DYN_ARRAY_ADDR(nameX, nameX, sizeX, nrX, alignX, init_workX)
+
+#define DEFINE_PER_CPU_DYN_ARRAY_ADDR(nameX, addrX, sizeX, nrX, alignX, init_workX) \
+               static struct dyn_array __per_cpu_dyn_array_##nameX __initdata = \
+               {       .name = (void **)&(addrX),\
+                       .size = sizeX,\
+                       .nr   = &(nrX),\
+                       .align = alignX,\
+                       .init_work = init_workX,\
+               }; \
+               static struct dyn_array *__per_cpu_dyn_array_ptr_##nameX __used \
+               __attribute__((__section__(".per_cpu_dyn_array.init"))) = \
+                       &__per_cpu_dyn_array_##nameX
+
+#define DEFINE_PER_CPU_DYN_ARRAY(nameX, sizeX, nrX, alignX, init_workX) \
+       DEFINE_PER_CPU_DYN_ARRAY_ADDR(nameX, nameX, nrX, alignX, init_workX)
+
+extern void pre_alloc_dyn_array(void);
+extern unsigned long per_cpu_dyn_array_size(void);
+extern void per_cpu_alloc_dyn_array(int cpu, char *ptr);
 #endif /* __ASSEMBLY__ */
 
 /**
This page took 0.090434 seconds and 5 git commands to generate.