x86: alloc dyn_array all together
[deliverable/linux.git] / include / linux / init.h
index 93538b696e3d99f2bb30d96b83d3516c66442233..59fbb4aaba6a18e6ad4e74cbeffd23ff8d2221b3 100644 (file)
@@ -246,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(unsigned long *align);
+extern void per_cpu_alloc_dyn_array(int cpu, char *ptr);
 #endif /* __ASSEMBLY__ */
 
 /**
This page took 0.027538 seconds and 5 git commands to generate.