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