public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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

* [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

* 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

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