lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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

Powered by Openwall GNU/*/Linux Powered by OpenVZ