On Fri, Aug 29, 2008 at 3:20 PM, Andrew Morton <akpm@linux-foundation.org> wrote: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) and use is struct irq_desc *sparse_irqs; DEFINE_DYN_ARRAY(sparse_irqs, sizeof(struct irq_desc), nr_irq_desc, PAGE_SIZE, init_work); then sparse_irqs is pointer, and .name store the address of that pointer. later use *da->name = phys_to_virt(phys); to take back the dyn address. YH --
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| Linus Torvalds | Re: init's children list is long and slows reaping children. |
| Kohei KaiGai | [PATCH 0/3] exporting capability name/code pairs (final#2) |
git: | |
| Gerrit Renker | [PATCH 33/37] dccp: Initialisation framework for feature negotiation |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Arjan van de Ven | Re: [GIT]: Networking |
| Mark Ryden | Re: Linux Wireless Mini-Summit -- Ottawa -- July 22, 2008 |
