Re: [PATCH] x86/mm: account for PGDIR_SIZE alignment

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, May 07, 2013 at 10:14:54AM -0600, jerry.hoemann@xxxxxx wrote:
> 
> 
> Greg, Yinghai, ...
> 
> Have you guys had a chance to consider this patch?
> 
> I understand that in general we want to only apply commits
> from upstream, but with the changes to init_memory_mapping in
> the 3.9 kernel the change below isn't applicable.
> 
> I have looked into applying the upstream commits from Yinghai
> from Nov last year,  this gets fairly involved and wasn't sure
> you'd want the larger change back ported.
> 
> If you could let me know your views to one of the above or to
> a third approach I'd be most appreciative as we would like to
> have 3.0-stable based distros 3.0-stable pick up the eventual
> fix as the current code panics during boot on our new system
> with the right memory configurations.

Thanks Jerry, I'm queuing this for the 3.5.y kernel as well.

Cheers,
--
Luis


>
> 
> thanks
> 
> Jerry Hoemann
> 
> -------------------------------------------------------
> 
> On Tue, Apr 30, 2013 at 03:15:55PM -0600, Jerry Hoemann wrote:
> Patch for 3.0-stable.  Function find_early_table_space removed upstream.
> 
> Fixes panic in alloc_low_page due to pgt_buf overflow during
> init_memory_mapping.
> 
> find_early_table_space sizes pgt_buf based upon the size of the
> memory being mapped, but it does not take into account the alignment
> of the memory.  When the region being mapped spans a 512GB (PGDIR_SIZE)
> alignment, a panic from alloc_low_pages occurs.
> 
> kernel_physical_mapping_init takes into account PGDIR_SIZE alignment.
> This causes an extra call to alloc_low_page to be made.  This extra call
> isn't accounted for by find_early_table_space and causes a kernel panic.
> 
> Change is to take into account PGDIR_SIZE alignment in find_early_table_space.
> 
> Signed-off-by: Jerry Hoemann <jerry.hoemann@xxxxxx>
> ---
> 
> Resending to stable@xxxxxxxxxxxxxxx.
> 
> Patch should be applicable to 3.2-stable and 3.4-stable also.
> 
> Code in 2.6.34 is different and patch is not applicable.
> 
> 
> 
>  arch/x86/mm/init.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index c22c423..96c4577 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -44,11 +44,15 @@ static void __init find_early_table_space(struct map_range *mr, int nr_range)
>  	int i;
>  	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
>  	unsigned long start = 0, good_end;
> +	unsigned long pgd_extra = 0;
>  	phys_addr_t base;
>  
>  	for (i = 0; i < nr_range; i++) {
>  		unsigned long range, extra;
>  
> +		if ((mr[i].end >> PGDIR_SHIFT) - (mr[i].start >> PGDIR_SHIFT))
> +			pgd_extra++;
> +
>  		range = mr[i].end - mr[i].start;
>  		puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
>  
> @@ -73,6 +77,7 @@ static void __init find_early_table_space(struct map_range *mr, int nr_range)
>  	tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
>  	tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
>  	tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
> +	tables += (pgd_extra * PAGE_SIZE);
>  
>  #ifdef CONFIG_X86_32
>  	/* for fixmap */
> -- 
> 1.8.1.4
> 
> -- 
> 
> ----------------------------------------------------------------------------
> Jerry Hoemann            Software Engineer              Hewlett-Packard/MODL
> 
> 3404 E Harmony Rd. MS 57                        phone:  (970) 898-1022
> Ft. Collins, CO 80528                           FAX:    (970) 898-XXXX
>                                                 email:  jerry.hoemann@xxxxxx
> ----------------------------------------------------------------------------
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stable" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]