[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87wsiy20or.fsf@saeurebad.de>
Date: Sun, 03 Aug 2008 06:16:04 +0200
From: Johannes Weiner <hannes@...urebad.de>
To: Yinghai Lu <yhlu.kernel@...il.com>
Cc: Ingo Molnar <mingo@...e.hu>, Thomas Gleixner <tglx@...utronix.de>,
"H. Peter Anvin" <hpa@...or.com>,
"Eric W. Biederman" <ebiederm@...ssion.com>,
Dhaval Giani <dhaval@...ux.vnet.ibm.com>,
Mike Travis <travis@....com>,
Andrew Morton <akpm@...ux-foundation.org>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 05/25] x86: alloc dyn_array all alltogether
Hi,
Yinghai Lu <yhlu.kernel@...il.com> writes:
> @@ -544,45 +548,78 @@ void __init __weak thread_info_cache_init(void)
> void pre_alloc_dyn_array(void)
> {
> #ifdef CONFIG_HAVE_DYN_ARRAY
> - unsigned long size, phys = 0;
> + unsigned long total_size = 0, size, phys;
> + unsigned long max_align = 1;
> struct dyn_array **daa;
> + char *ptr;
>
> + /* get the total size at first */
> for (daa = __dyn_array_start ; daa < __dyn_array_end; daa++) {
> struct dyn_array *da = *daa;
>
> size = da->size * (*da->nr);
> - print_fn_descriptor_symbol("dyna_array %s ", da->name);
> - printk(KERN_CONT "size:%#lx nr:%d align:%#lx",
> + print_fn_descriptor_symbol("dyn_array %s ", da->name);
Is this a correction of a typo you introduced two pages earlier?
> + printk(KERN_CONT "size:%#lx nr:%d align:%#lx\n",
> da->size, *da->nr, da->align);
> - *da->name = __alloc_bootmem_nopanic(size, da->align, phys);
> - phys = virt_to_phys(*da->name);
> + total_size += roundup(size, da->align);
> + if (da->align > max_align)
> + max_align = da->align;
> + }
> + if (total_size)
> + printk(KERN_DEBUG "dyn_array total_size: %#lx\n",
> + total_size);
> + else
> + return;
> +
> + /* allocate them all together */
> + max_align = max_t(unsigned long, max_align, PAGE_SIZE);
> + ptr = __alloc_bootmem_nopanic(total_size, max_align, 0);
> + if (!ptr)
> + panic("Can not alloc dyn_alloc\n");
Uhm... :)
> +
> + phys = virt_to_phys(ptr);
> + for (daa = __dyn_array_start ; daa < __dyn_array_end; daa++) {
> + struct dyn_array *da = *daa;
> +
> + size = da->size * (*da->nr);
> + print_fn_descriptor_symbol("dyn_array %s ", da->name);
> +
> + phys = roundup(phys, da->align);
> + *da->name = phys_to_virt(phys);
> printk(KERN_CONT " ==> [%#lx - %#lx]\n", phys, phys + size);
>
> + phys += size;
> +
> if (da->init_work)
> da->init_work(da);
> }
> #endif
> }
>
> -unsigned long per_cpu_dyn_array_size(void)
> +unsigned long per_cpu_dyn_array_size(unsigned long *align)
> {
> unsigned long total_size = 0;
> #ifdef CONFIG_HAVE_DYN_ARRAY
> unsigned long size;
> struct dyn_array **daa;
> + unsigned max_align = 1;
>
> for (daa = __per_cpu_dyn_array_start ; daa < __per_cpu_dyn_array_end; daa++) {
> struct dyn_array *da = *daa;
>
> size = da->size * (*da->nr);
> - print_fn_descriptor_symbol("per_cpu_dyna_array %s ", da->name);
> + print_fn_descriptor_symbol("per_cpu_dyn_array %s ", da->name);
> printk(KERN_CONT "size:%#lx nr:%d align:%#lx\n",
> da->size, *da->nr, da->align);
> total_size += roundup(size, da->align);
> + if (da->align > max_align)
> + max_align = da->align;
> }
> - if (total_size)
> - printk(KERN_DEBUG "per_cpu_dyna_array total_size: %#lx\n",
> + if (total_size) {
> + printk(KERN_DEBUG "per_cpu_dyn_array total_size: %#lx\n",
> total_size);
...
> + *align = max_align;
> + }
> #endif
> return total_size;
> }
> @@ -596,14 +633,11 @@ void per_cpu_alloc_dyn_array(int cpu, char *ptr)
> void **array;
>
> phys = virt_to_phys(ptr);
> -
> for (daa = __per_cpu_dyn_array_start ; daa < __per_cpu_dyn_array_end; daa++) {
> struct dyn_array *da = *daa;
>
> size = da->size * (*da->nr);
> - print_fn_descriptor_symbol("per_cpu_dyna_array %s ", da->name);
> - printk(KERN_CONT "size:%#lx nr:%d align:%#lx",
> - da->size, *da->nr, da->align);
> + print_fn_descriptor_symbol("per_cpu_dyn_array %s ", da->name);
...
Hannes
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists