* [PATCH] x86: fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline @ 2010-08-25 5:44 Hugh Dickins 2010-08-25 6:30 ` Borislav Petkov 2010-08-25 7:13 ` [tip:x86/urgent] x86, mm: Fix " tip-bot for Hugh Dickins 0 siblings, 2 replies; 5+ messages in thread From: Hugh Dickins @ 2010-08-25 5:44 UTC (permalink / raw) To: H. Peter Anvin Cc: Linus Torvalds, Andrew Morton, Joerg Roedel, Borislav Petkov, x86, linux-kernel rc2 kernel crashes when booting second cpu on this CONFIG_VMSPLIT_2G_OPT laptop: whereas cloning from kernel to low mappings pgd range does need to limit by both KERNEL_PGD_PTRS and KERNEL_PGD_BOUNDARY, cloning kernel pgd range itself must not be limited by the smaller KERNEL_PGD_BOUNDARY. Signed-off-by: Hugh Dickins <hughd@google.com> --- arch/x86/kernel/trampoline.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --- 2.6.36-rc2/arch/x86/kernel/trampoline.c.0 2010-08-22 18:56:44.000000000 -0700 +++ linux/arch/x86/kernel/trampoline.c 2010-08-24 22:11:08.000000000 -0700 @@ -45,8 +45,7 @@ void __init setup_trampoline_page_table( /* Copy kernel address range */ clone_pgd_range(trampoline_pg_dir + KERNEL_PGD_BOUNDARY, swapper_pg_dir + KERNEL_PGD_BOUNDARY, - min_t(unsigned long, KERNEL_PGD_PTRS, - KERNEL_PGD_BOUNDARY)); + KERNEL_PGD_PTRS); /* Initialize low mappings */ clone_pgd_range(trampoline_pg_dir, ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] x86: fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline 2010-08-25 5:44 [PATCH] x86: fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline Hugh Dickins @ 2010-08-25 6:30 ` Borislav Petkov 2010-08-25 7:06 ` H. Peter Anvin 2010-08-25 7:13 ` [tip:x86/urgent] x86, mm: Fix " tip-bot for Hugh Dickins 1 sibling, 1 reply; 5+ messages in thread From: Borislav Petkov @ 2010-08-25 6:30 UTC (permalink / raw) To: Hugh Dickins Cc: H. Peter Anvin, Linus Torvalds, Andrew Morton, Roedel, Joerg, x86@kernel.org, linux-kernel@vger.kernel.org From: Hugh Dickins <hughd@google.com> Date: Wed, Aug 25, 2010 at 01:44:12AM -0400 > rc2 kernel crashes when booting second cpu on this CONFIG_VMSPLIT_2G_OPT > laptop: whereas cloning from kernel to low mappings pgd range does need > to limit by both KERNEL_PGD_PTRS and KERNEL_PGD_BOUNDARY, cloning kernel > pgd range itself must not be limited by the smaller KERNEL_PGD_BOUNDARY. Yep, makes sense. In looking around for other swapper_pg_dir manipulations, there's this piece in <arch/x86/kernel/reboot.c:machine_real_restart()>: /* Remap the kernel at virtual address zero, as well as offset zero from the kernel segment. This assumes the kernel segment starts at virtual address PAGE_OFFSET. */ memcpy(swapper_pg_dir, swapper_pg_dir + KERNEL_PGD_BOUNDARY, sizeof(swapper_pg_dir [0]) * KERNEL_PGD_PTRS); and we're cloning to low mappings here but still take KERNEL_PGD_PTRS. In the CONFIG_VMSPLIT_2G_OPT case, KERNEL_PGD_BOUNDARY and KERNEL_PGD_PTRS are 480 and 544, respectively, and IINM, and we end up overwriting the virtual mappings beginning at PAGE_OFFSET. I guess this doesn't matter on reboot or am I missing something else? > > Signed-off-by: Hugh Dickins <hughd@google.com> Acked-by: Borislav Petkov <borislav.petkov@amd.com> > --- > > arch/x86/kernel/trampoline.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > --- 2.6.36-rc2/arch/x86/kernel/trampoline.c.0 2010-08-22 18:56:44.000000000 -0700 > +++ linux/arch/x86/kernel/trampoline.c 2010-08-24 22:11:08.000000000 -0700 > @@ -45,8 +45,7 @@ void __init setup_trampoline_page_table( > /* Copy kernel address range */ > clone_pgd_range(trampoline_pg_dir + KERNEL_PGD_BOUNDARY, > swapper_pg_dir + KERNEL_PGD_BOUNDARY, > - min_t(unsigned long, KERNEL_PGD_PTRS, > - KERNEL_PGD_BOUNDARY)); > + KERNEL_PGD_PTRS); > > /* Initialize low mappings */ > clone_pgd_range(trampoline_pg_dir, > -- Regards/Gruss, Boris. Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach General Managers: Alberto Bozzo, Andrew Bowd Registration: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] x86: fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline 2010-08-25 6:30 ` Borislav Petkov @ 2010-08-25 7:06 ` H. Peter Anvin 2010-08-25 7:13 ` Borislav Petkov 0 siblings, 1 reply; 5+ messages in thread From: H. Peter Anvin @ 2010-08-25 7:06 UTC (permalink / raw) To: Borislav Petkov Cc: Hugh Dickins, Linus Torvalds, Andrew Morton, Roedel, Joerg, x86@kernel.org, linux-kernel@vger.kernel.org On 08/24/2010 11:30 PM, Borislav Petkov wrote: > From: Hugh Dickins <hughd@google.com> > Date: Wed, Aug 25, 2010 at 01:44:12AM -0400 > >> rc2 kernel crashes when booting second cpu on this CONFIG_VMSPLIT_2G_OPT >> laptop: whereas cloning from kernel to low mappings pgd range does need >> to limit by both KERNEL_PGD_PTRS and KERNEL_PGD_BOUNDARY, cloning kernel >> pgd range itself must not be limited by the smaller KERNEL_PGD_BOUNDARY. > > Yep, makes sense. > > In looking around for other swapper_pg_dir manipulations, there's this > piece in <arch/x86/kernel/reboot.c:machine_real_restart()>: > > /* Remap the kernel at virtual address zero, as well as offset zero > from the kernel segment. This assumes the kernel segment starts at > virtual address PAGE_OFFSET. */ > memcpy(swapper_pg_dir, swapper_pg_dir + KERNEL_PGD_BOUNDARY, > sizeof(swapper_pg_dir [0]) * KERNEL_PGD_PTRS); > > and we're cloning to low mappings here but still take KERNEL_PGD_PTRS. > > In the CONFIG_VMSPLIT_2G_OPT case, KERNEL_PGD_BOUNDARY and > KERNEL_PGD_PTRS are 480 and 544, respectively, and IINM, and we end up > overwriting the virtual mappings beginning at PAGE_OFFSET. > > I guess this doesn't matter on reboot or am I missing something else? > It doesn't matter on reboot, but the right thing would be to switch to the trampoline page table here. Same with suspend. -hpa -- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] x86: fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline 2010-08-25 7:06 ` H. Peter Anvin @ 2010-08-25 7:13 ` Borislav Petkov 0 siblings, 0 replies; 5+ messages in thread From: Borislav Petkov @ 2010-08-25 7:13 UTC (permalink / raw) To: H. Peter Anvin Cc: Hugh Dickins, Linus Torvalds, Andrew Morton, Roedel, Joerg, x86@kernel.org, linux-kernel@vger.kernel.org From: "H. Peter Anvin" <hpa@zytor.com> Date: Wed, Aug 25, 2010 at 03:06:34AM -0400 > It doesn't matter on reboot, but the right thing would be to switch to > the trampoline page table here. Same with suspend. Yeah, I do that in my other patch (http://lkml.org/lkml/2010/8/24/61) which adds the initial_page_table and keeps swapper_pg_dir clear of low mappings. I'll add Hugh's fix there too and will start testing to see what happens :). -- Regards/Gruss, Boris. Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach General Managers: Alberto Bozzo, Andrew Bowd Registration: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [tip:x86/urgent] x86, mm: Fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline 2010-08-25 5:44 [PATCH] x86: fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline Hugh Dickins 2010-08-25 6:30 ` Borislav Petkov @ 2010-08-25 7:13 ` tip-bot for Hugh Dickins 1 sibling, 0 replies; 5+ messages in thread From: tip-bot for Hugh Dickins @ 2010-08-25 7:13 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, hughd, tglx Commit-ID: b7d460897739e02f186425b7276e3fdb1595cea7 Gitweb: http://git.kernel.org/tip/b7d460897739e02f186425b7276e3fdb1595cea7 Author: Hugh Dickins <hughd@google.com> AuthorDate: Tue, 24 Aug 2010 22:44:12 -0700 Committer: H. Peter Anvin <hpa@zytor.com> CommitDate: Tue, 24 Aug 2010 23:05:17 -0700 x86, mm: Fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline rc2 kernel crashes when booting second cpu on this CONFIG_VMSPLIT_2G_OPT laptop: whereas cloning from kernel to low mappings pgd range does need to limit by both KERNEL_PGD_PTRS and KERNEL_PGD_BOUNDARY, cloning kernel pgd range itself must not be limited by the smaller KERNEL_PGD_BOUNDARY. Signed-off-by: Hugh Dickins <hughd@google.com> LKML-Reference: <alpine.LSU.2.00.1008242235120.2515@sister.anvils> Signed-off-by: H. Peter Anvin <hpa@zytor.com> --- arch/x86/kernel/trampoline.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/trampoline.c b/arch/x86/kernel/trampoline.c index a874495..e2a5952 100644 --- a/arch/x86/kernel/trampoline.c +++ b/arch/x86/kernel/trampoline.c @@ -45,8 +45,7 @@ void __init setup_trampoline_page_table(void) /* Copy kernel address range */ clone_pgd_range(trampoline_pg_dir + KERNEL_PGD_BOUNDARY, swapper_pg_dir + KERNEL_PGD_BOUNDARY, - min_t(unsigned long, KERNEL_PGD_PTRS, - KERNEL_PGD_BOUNDARY)); + KERNEL_PGD_PTRS); /* Initialize low mappings */ clone_pgd_range(trampoline_pg_dir, ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-08-25 7:14 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-08-25 5:44 [PATCH] x86: fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline Hugh Dickins 2010-08-25 6:30 ` Borislav Petkov 2010-08-25 7:06 ` H. Peter Anvin 2010-08-25 7:13 ` Borislav Petkov 2010-08-25 7:13 ` [tip:x86/urgent] x86, mm: Fix " tip-bot for Hugh Dickins
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox