public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* BUG: unable to handle kernel paging request at 000000effd870020
@ 2013-01-02 17:21 Nathan Zimmer
  2013-01-02 18:04 ` H. Peter Anvin
  0 siblings, 1 reply; 6+ messages in thread
From: Nathan Zimmer @ 2013-01-02 17:21 UTC (permalink / raw)
  To: linux-kernel, linux-efi; +Cc: matt.fleming, tglx, mingo, hpa

I am getting an early boot problem. It only happens on the larger of the
machines I haven't seen it crop up on machines with more then 512 GB of ram.
It shows in the latest linus kernel too.

I am (wildly) guessing that what is happening is that the new_memmap that is
being passed to bios is somehow placed incorrectly.  
I have come up with a workaround.  By placing it the DMA area the issue goes
away but that doesn't seem like a real fix. 


BUG: unable to handle kernel paging request at 000000effd870020
IP: [<0000000078bce331>] 0x78bce330
PGD 0 
Oops: 0000 [#1] SMP 
Modules linked in:
CPU 0 
Pid: 0, comm: swapper/0 Tainted: G        W    3.8.0-rc1-next-20121224-medusa_ntz+ #2 Intel Corp. Stoutland Platform
RIP: 0010:[<0000000078bce331>]  [<0000000078bce331>] 0x78bce330
RSP: 0000:ffffffff81601d28  EFLAGS: 00010006
RAX: 0000000078b80e18 RBX: 0000000000000004 RCX: 0000000000000004
RDX: 0000000078bcf958 RSI: 0000000000002400 RDI: 8000000000000000
RBP: 0000000078bcf760 R08: 000000effd870000 R09: 0000000000000000
R10: 0000000000000000 R11: 00000000000000c3 R12: 0000000000000030
R13: 000000effd870000 R14: 0000000000000000 R15: ffff88effd870000
FS:  0000000000000000(0000) GS:ffff88effe400000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000000effd870020 CR3: 000000000160c000 CR4: 00000000000006b0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process swapper/0 (pid: 0, threadinfo ffffffff81600000, task ffffffff81614400)
Stack:
 0000000078b80d18 0000000000000004 0000000078bced7b ffff880078b81fff
 0000000000000000 0000000000000082 0000000078bce3a8 0000000000002400
 0000000060000202 0000000078b80da0 0000000078bce45d ffffffff8107cb5a
Call Trace:
 [<ffffffff8107cb5a>] ? on_each_cpu+0x77/0x83
 [<ffffffff8102f4eb>] ? change_page_attr_set_clr+0x32f/0x3ed
 [<ffffffff81035946>] ? efi_call4+0x46/0x80
 [<ffffffff816c5abb>] ? efi_enter_virtual_mode+0x1f5/0x305
 [<ffffffff816aeb24>] ? start_kernel+0x34a/0x3d2
 [<ffffffff816ae5ed>] ? repair_env_string+0x60/0x60
 [<ffffffff816ae2be>] ? x86_64_start_reservations+0xba/0xc1
 [<ffffffff816ae120>] ? early_idt_handlers+0x120/0x120
 [<ffffffff816ae419>] ? x86_64_start_kernel+0x154/0x163
Code:  Bad RIP value.
RIP  [<0000000078bce331>] 0x78bce330
 RSP <ffffffff81601d28>
CR2: 000000effd870020
---[ end trace ead828934fef5eab ]---



---
 arch/x86/platform/efi/efi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: linux/arch/x86/platform/efi/efi.c
===================================================================
--- linux.orig/arch/x86/platform/efi/efi.c	2012-11-24 09:43:09.236997834 -0600
+++ linux/arch/x86/platform/efi/efi.c	2012-11-24 09:53:30.264654748 -0600
@@ -915,7 +915,7 @@
 		}
 		new_memmap = krealloc(new_memmap,
 				      (count + 1) * memmap.desc_size,
-				      GFP_KERNEL);
+				      GFP_DMA);
 		memcpy(new_memmap + (count * memmap.desc_size), md,
 		       memmap.desc_size);
 		count++;


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: BUG: unable to handle kernel paging request at 000000effd870020
  2013-01-02 17:21 BUG: unable to handle kernel paging request at 000000effd870020 Nathan Zimmer
@ 2013-01-02 18:04 ` H. Peter Anvin
  2013-01-02 19:13   ` Nathan Zimmer
  0 siblings, 1 reply; 6+ messages in thread
From: H. Peter Anvin @ 2013-01-02 18:04 UTC (permalink / raw)
  To: Nathan Zimmer; +Cc: linux-kernel, linux-efi, matt.fleming, tglx, mingo

On 01/02/2013 09:21 AM, Nathan Zimmer wrote:
> I am getting an early boot problem. It only happens on the larger of the
> machines I haven't seen it crop up on machines with more then 512 GB of ram.
> It shows in the latest linus kernel too.
> 
> I am (wildly) guessing that what is happening is that the new_memmap that is
> being passed to bios is somehow placed incorrectly.  
> I have come up with a workaround.  By placing it the DMA area the issue goes
> away but that doesn't seem like a real fix. 
>

What does your memory map look like?

	-hpa


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: BUG: unable to handle kernel paging request at 000000effd870020
  2013-01-02 18:04 ` H. Peter Anvin
@ 2013-01-02 19:13   ` Nathan Zimmer
  2013-01-02 21:09     ` Robin Holt
  0 siblings, 1 reply; 6+ messages in thread
From: Nathan Zimmer @ 2013-01-02 19:13 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: linux-kernel, linux-efi, matt.fleming, tglx, mingo

On 01/02/2013 12:04 PM, H. Peter Anvin wrote:
> On 01/02/2013 09:21 AM, Nathan Zimmer wrote:
>> I am getting an early boot problem. It only happens on the larger of the
>> machines I haven't seen it crop up on machines with more then 512 GB of ram.
>> It shows in the latest linus kernel too.
>>
>> I am (wildly) guessing that what is happening is that the new_memmap that is
>> being passed to bios is somehow placed incorrectly.
>> I have come up with a workaround.  By placing it the DMA area the issue goes
>> away but that doesn't seem like a real fix.
>>
> What does your memory map look like?
>
> 	-hpa
>


efi: EFI v2.10 by INTEL
efi:  ACPI 2.0=0x78d40014  SMBIOS=0x78bd2000  UVsystab=0x76314000
efi: mem00: type=3, attr=0xf, 
range=[0x0000000000000000-0x0000000000001000) (0MB)
efi: mem01: type=7, attr=0xf, 
range=[0x0000000000001000-0x000000000000e000) (0MB)
efi: mem02: type=3, attr=0xf, 
range=[0x000000000000e000-0x0000000000010000) (0MB)
efi: mem03: type=7, attr=0xf, 
range=[0x0000000000010000-0x000000000005f000) (0MB)
efi: mem04: type=4, attr=0xf, 
range=[0x000000000005f000-0x0000000000060000) (0MB)
efi: mem05: type=3, attr=0xf, 
range=[0x0000000000060000-0x000000000008f000) (0MB)
efi: mem06: type=10, attr=0xf, 
range=[0x000000000008f000-0x0000000000090000) (0MB)
efi: mem07: type=3, attr=0xf, 
range=[0x0000000000090000-0x00000000000a0000) (0MB)
efi: mem08: type=2, attr=0xf, 
range=[0x0000000000100000-0x0000000000900000) (8MB)
efi: mem09: type=7, attr=0xf, 
range=[0x0000000000900000-0x0000000000c00000) (3MB)
efi: mem10: type=3, attr=0xf, 
range=[0x0000000000c00000-0x0000000001000000) (4MB)
efi: mem11: type=7, attr=0xf, 
range=[0x0000000001000000-0x00000000731a7000) (1825MB)
efi: mem12: type=2, attr=0xf, 
range=[0x00000000731a7000-0x00000000738f6000) (7MB)
efi: mem13: type=1, attr=0xf, 
range=[0x00000000738f6000-0x0000000073934000) (0MB)
efi: mem14: type=7, attr=0xf, 
range=[0x0000000073934000-0x000000007394b000) (0MB)
efi: mem15: type=2, attr=0xf, 
range=[0x000000007394b000-0x0000000073950000) (0MB)
efi: mem16: type=7, attr=0xf, 
range=[0x0000000073950000-0x0000000073951000) (0MB)
efi: mem17: type=2, attr=0xf, 
range=[0x0000000073951000-0x0000000073954000) (0MB)
efi: mem18: type=4, attr=0xf, 
range=[0x0000000073954000-0x0000000073955000) (0MB)
efi: mem19: type=2, attr=0xf, 
range=[0x0000000073955000-0x0000000073970000) (0MB)
efi: mem20: type=4, attr=0xf, 
range=[0x0000000073970000-0x0000000073976000) (0MB)
efi: mem21: type=2, attr=0xf, 
range=[0x0000000073976000-0x0000000073978000) (0MB)
efi: mem22: type=4, attr=0xf, 
range=[0x0000000073978000-0x00000000739d4000) (0MB)
efi: mem23: type=7, attr=0xf, 
range=[0x00000000739d4000-0x00000000739d5000) (0MB)
efi: mem24: type=4, attr=0xf, 
range=[0x00000000739d5000-0x00000000739d6000) (0MB)
efi: mem25: type=2, attr=0xf, 
range=[0x00000000739d6000-0x00000000739d7000) (0MB)
efi: mem26: type=4, attr=0xf, 
range=[0x00000000739d7000-0x00000000739ff000) (0MB)
efi: mem27: type=2, attr=0xf, 
range=[0x00000000739ff000-0x0000000073a13000) (0MB)
efi: mem28: type=4, attr=0xf, 
range=[0x0000000073a13000-0x0000000073a15000) (0MB)
efi: mem29: type=2, attr=0xf, 
range=[0x0000000073a15000-0x0000000073a1e000) (0MB)
efi: mem30: type=4, attr=0xf, 
range=[0x0000000073a1e000-0x0000000073ba2000) (1MB)
efi: mem31: type=1, attr=0xf, 
range=[0x0000000073ba2000-0x0000000073c63000) (0MB)
efi: mem32: type=4, attr=0xf, 
range=[0x0000000073c63000-0x0000000073ca0000) (0MB)
efi: mem33: type=2, attr=0xf, 
range=[0x0000000073ca0000-0x0000000073ca1000) (0MB)
efi: mem34: type=4, attr=0xf, 
range=[0x0000000073ca1000-0x0000000073ca2000) (0MB)
efi: mem35: type=2, attr=0xf, 
range=[0x0000000073ca2000-0x0000000073cab000) (0MB)
efi: mem36: type=4, attr=0xf, 
range=[0x0000000073cab000-0x0000000073cd6000) (0MB)
efi: mem37: type=3, attr=0xf, 
range=[0x0000000073cd6000-0x0000000073cec000) (0MB)
efi: mem38: type=4, attr=0xf, 
range=[0x0000000073cec000-0x0000000075a31000) (29MB)
efi: mem39: type=6, attr=0x800000000000000f, 
range=[0x0000000075a31000-0x0000000075a32000) (0MB)
efi: mem40: type=4, attr=0xf, 
range=[0x0000000075a32000-0x0000000075a33000) (0MB)
efi: mem41: type=5, attr=0x800000000000000f, 
range=[0x0000000075a33000-0x0000000075a3c000) (0MB)
efi: mem42: type=6, attr=0x800000000000000f, 
range=[0x0000000075a3c000-0x0000000075a3d000) (0MB)
efi: mem43: type=5, attr=0x800000000000000f, 
range=[0x0000000075a3d000-0x0000000075a58000) (0MB)
efi: mem44: type=3, attr=0xf, 
range=[0x0000000075a58000-0x0000000075a5c000) (0MB)
efi: mem45: type=4, attr=0xf, 
range=[0x0000000075a5c000-0x0000000075c53000) (1MB)
efi: mem46: type=3, attr=0xf, 
range=[0x0000000075c53000-0x0000000075c56000) (0MB)
efi: mem47: type=4, attr=0xf, 
range=[0x0000000075c56000-0x0000000075cbc000) (0MB)
efi: mem48: type=3, attr=0xf, 
range=[0x0000000075cbc000-0x0000000075cbe000) (0MB)
efi: mem49: type=4, attr=0xf, 
range=[0x0000000075cbe000-0x0000000075cc0000) (0MB)
efi: mem50: type=5, attr=0x800000000000000f, 
range=[0x0000000075cc0000-0x0000000075cc5000) (0MB)
efi: mem51: type=3, attr=0xf, 
range=[0x0000000075cc5000-0x0000000075cc7000) (0MB)
efi: mem52: type=4, attr=0xf, 
range=[0x0000000075cc7000-0x0000000075ccb000) (0MB)
efi: mem53: type=3, attr=0xf, 
range=[0x0000000075ccb000-0x0000000075ccf000) (0MB)
efi: mem54: type=0, attr=0xf, 
range=[0x0000000075ccf000-0x0000000075cd8000) (0MB)
efi: mem55: type=4, attr=0xf, 
range=[0x0000000075cd8000-0x0000000075cdb000) (0MB)
efi: mem56: type=3, attr=0xf, 
range=[0x0000000075cdb000-0x0000000075cdd000) (0MB)
efi: mem57: type=4, attr=0xf, 
range=[0x0000000075cdd000-0x0000000075cde000) (0MB)
efi: mem58: type=3, attr=0xf, 
range=[0x0000000075cde000-0x0000000075ce4000) (0MB)
efi: mem59: type=4, attr=0xf, 
range=[0x0000000075ce4000-0x0000000075ce5000) (0MB)
efi: mem60: type=3, attr=0xf, 
range=[0x0000000075ce5000-0x0000000075cec000) (0MB)
efi: mem61: type=4, attr=0xf, 
range=[0x0000000075cec000-0x0000000075cee000) (0MB)
efi: mem62: type=3, attr=0xf, 
range=[0x0000000075cee000-0x0000000075cf6000) (0MB)
efi: mem63: type=4, attr=0xf, 
range=[0x0000000075cf6000-0x0000000075cf7000) (0MB)
efi: mem64: type=3, attr=0xf, 
range=[0x0000000075cf7000-0x0000000075cfa000) (0MB)
efi: mem65: type=4, attr=0xf, 
range=[0x0000000075cfa000-0x0000000075cfb000) (0MB)
efi: mem66: type=3, attr=0xf, 
range=[0x0000000075cfb000-0x0000000075cff000) (0MB)
efi: mem67: type=4, attr=0xf, 
range=[0x0000000075cff000-0x0000000075d00000) (0MB)
efi: mem68: type=3, attr=0xf, 
range=[0x0000000075d00000-0x0000000075d02000) (0MB)
efi: mem69: type=4, attr=0xf, 
range=[0x0000000075d02000-0x0000000075d04000) (0MB)
efi: mem70: type=3, attr=0xf, 
range=[0x0000000075d04000-0x0000000075d06000) (0MB)
efi: mem71: type=4, attr=0xf, 
range=[0x0000000075d06000-0x0000000075d07000) (0MB)
efi: mem72: type=5, attr=0x800000000000000f, 
range=[0x0000000075d07000-0x0000000075d0f000) (0MB)
efi: mem73: type=4, attr=0xf, 
range=[0x0000000075d0f000-0x0000000075d10000) (0MB)
efi: mem74: type=3, attr=0xf, 
range=[0x0000000075d10000-0x0000000075d18000) (0MB)
efi: mem75: type=5, attr=0x800000000000000f, 
range=[0x0000000075d18000-0x0000000075d1a000) (0MB)
efi: mem76: type=4, attr=0xf, 
range=[0x0000000075d1a000-0x0000000075d1b000) (0MB)
efi: mem77: type=3, attr=0xf, 
range=[0x0000000075d1b000-0x0000000075d1e000) (0MB)
efi: mem78: type=4, attr=0xf, 
range=[0x0000000075d1e000-0x0000000075d21000) (0MB)
efi: mem79: type=3, attr=0xf, 
range=[0x0000000075d21000-0x0000000075d28000) (0MB)
efi: mem80: type=4, attr=0xf, 
range=[0x0000000075d28000-0x0000000075d29000) (0MB)
efi: mem81: type=3, attr=0xf, 
range=[0x0000000075d29000-0x0000000075d2c000) (0MB)
efi: mem82: type=4, attr=0xf, 
range=[0x0000000075d2c000-0x0000000075d2e000) (0MB)
efi: mem83: type=3, attr=0xf, 
range=[0x0000000075d2e000-0x0000000075d3c000) (0MB)
efi: mem84: type=4, attr=0xf, 
range=[0x0000000075d3c000-0x0000000075d3d000) (0MB)
efi: mem85: type=3, attr=0xf, 
range=[0x0000000075d3d000-0x0000000075d45000) (0MB)
efi: mem86: type=4, attr=0xf, 
range=[0x0000000075d45000-0x0000000075d46000) (0MB)
efi: mem87: type=3, attr=0xf, 
range=[0x0000000075d46000-0x0000000075d4f000) (0MB)
efi: mem88: type=4, attr=0xf, 
range=[0x0000000075d4f000-0x0000000075d53000) (0MB)
efi: mem89: type=3, attr=0xf, 
range=[0x0000000075d53000-0x0000000075d5c000) (0MB)
efi: mem90: type=4, attr=0xf, 
range=[0x0000000075d5c000-0x0000000075d5d000) (0MB)
efi: mem91: type=3, attr=0xf, 
range=[0x0000000075d5d000-0x0000000075d63000) (0MB)
efi: mem92: type=4, attr=0xf, 
range=[0x0000000075d63000-0x0000000075d64000) (0MB)
efi: mem93: type=5, attr=0x800000000000000f, 
range=[0x0000000075d64000-0x0000000075d66000) (0MB)
efi: mem94: type=6, attr=0x800000000000000f, 
range=[0x0000000075d66000-0x0000000075d6b000) (0MB)
efi: mem95: type=5, attr=0x800000000000000f, 
range=[0x0000000075d6b000-0x0000000075d75000) (0MB)
efi: mem96: type=4, attr=0xf, 
range=[0x0000000075d75000-0x0000000075d77000) (0MB)
efi: mem97: type=5, attr=0x800000000000000f, 
range=[0x0000000075d77000-0x0000000075d85000) (0MB)
efi: mem98: type=4, attr=0xf, 
range=[0x0000000075d85000-0x0000000075d87000) (0MB)
efi: mem99: type=3, attr=0xf, 
range=[0x0000000075d87000-0x0000000075da1000) (0MB)
efi: mem100: type=4, attr=0xf, 
range=[0x0000000075da1000-0x0000000075da2000) (0MB)
efi: mem101: type=3, attr=0xf, 
range=[0x0000000075da2000-0x0000000075da8000) (0MB)
efi: mem102: type=4, attr=0xf, 
range=[0x0000000075da8000-0x000000007615c000) (3MB)
efi: mem103: type=3, attr=0xf, 
range=[0x000000007615c000-0x0000000076162000) (0MB)
efi: mem104: type=4, attr=0xf, 
range=[0x0000000076162000-0x0000000076163000) (0MB)
efi: mem105: type=3, attr=0xf, 
range=[0x0000000076163000-0x00000000761d6000) (0MB)
efi: mem106: type=4, attr=0xf, 
range=[0x00000000761d6000-0x00000000761d9000) (0MB)
efi: mem107: type=3, attr=0xf, 
range=[0x00000000761d9000-0x00000000761e0000) (0MB)
efi: mem108: type=4, attr=0xf, 
range=[0x00000000761e0000-0x00000000761e1000) (0MB)
efi: mem109: type=5, attr=0x800000000000000f, 
range=[0x00000000761e1000-0x0000000076211000) (0MB)
efi: mem110: type=4, attr=0xf, 
range=[0x0000000076211000-0x0000000076214000) (0MB)
efi: mem111: type=3, attr=0xf, 
range=[0x0000000076214000-0x0000000076250000) (0MB)
efi: mem112: type=4, attr=0xf, 
range=[0x0000000076250000-0x0000000076253000) (0MB)
efi: mem113: type=3, attr=0xf, 
range=[0x0000000076253000-0x0000000076258000) (0MB)
efi: mem114: type=4, attr=0xf, 
range=[0x0000000076258000-0x000000007625b000) (0MB)
efi: mem115: type=3, attr=0xf, 
range=[0x000000007625b000-0x0000000076267000) (0MB)
efi: mem116: type=4, attr=0xf, 
range=[0x0000000076267000-0x00000000762b8000) (0MB)
efi: mem117: type=3, attr=0xf, 
range=[0x00000000762b8000-0x00000000762c2000) (0MB)
efi: mem118: type=5, attr=0x800000000000000f, 
range=[0x00000000762c2000-0x00000000762c4000) (0MB)
efi: mem119: type=3, attr=0xf, 
range=[0x00000000762c4000-0x00000000762d3000) (0MB)
efi: mem120: type=4, attr=0xf, 
range=[0x00000000762d3000-0x00000000762dd000) (0MB)
efi: mem121: type=5, attr=0x800000000000000f, 
range=[0x00000000762dd000-0x00000000762e0000) (0MB)
efi: mem122: type=4, attr=0xf, 
range=[0x00000000762e0000-0x00000000762ec000) (0MB)
efi: mem123: type=5, attr=0x800000000000000f, 
range=[0x00000000762ec000-0x00000000762f2000) (0MB)
efi: mem124: type=3, attr=0xf, 
range=[0x00000000762f2000-0x00000000762f3000) (0MB)
efi: mem125: type=4, attr=0xf, 
range=[0x00000000762f3000-0x00000000762f4000) (0MB)
efi: mem126: type=3, attr=0xf, 
range=[0x00000000762f4000-0x00000000762f7000) (0MB)
efi: mem127: type=5, attr=0x800000000000000f, 
range=[0x00000000762f7000-0x00000000762ff000) (0MB)
efi: mem128: type=3, attr=0xf, 
range=[0x00000000762ff000-0x0000000076307000) (0MB)
efi: mem129: type=2, attr=0xf, 
range=[0x0000000076307000-0x0000000076308000) (0MB)
efi: mem130: type=4, attr=0xf, 
range=[0x0000000076308000-0x000000007630a000) (0MB)
efi: mem131: type=0, attr=0xf, 
range=[0x000000007630a000-0x0000000076313000) (0MB)
efi: mem132: type=6, attr=0x800000000000000f, 
range=[0x0000000076313000-0x0000000076315000) (0MB)
efi: mem133: type=4, attr=0xf, 
range=[0x0000000076315000-0x000000007647f000) (1MB)
efi: mem134: type=3, attr=0xf, 
range=[0x000000007647f000-0x0000000076497000) (0MB)
efi: mem135: type=4, attr=0xf, 
range=[0x0000000076497000-0x000000007649b000) (0MB)
efi: mem136: type=3, attr=0xf, 
range=[0x000000007649b000-0x000000007649d000) (0MB)
efi: mem137: type=4, attr=0xf, 
range=[0x000000007649d000-0x000000007649e000) (0MB)
efi: mem138: type=3, attr=0xf, 
range=[0x000000007649e000-0x00000000764a8000) (0MB)
efi: mem139: type=4, attr=0xf, 
range=[0x00000000764a8000-0x00000000764ba000) (0MB)
efi: mem140: type=3, attr=0xf, 
range=[0x00000000764ba000-0x00000000764bc000) (0MB)
efi: mem141: type=4, attr=0xf, 
range=[0x00000000764bc000-0x000000007652f000) (0MB)
efi: mem142: type=3, attr=0xf, 
range=[0x000000007652f000-0x0000000076534000) (0MB)
efi: mem143: type=4, attr=0xf, 
range=[0x0000000076534000-0x0000000076548000) (0MB)
efi: mem144: type=3, attr=0xf, 
range=[0x0000000076548000-0x0000000076552000) (0MB)
efi: mem145: type=4, attr=0xf, 
range=[0x0000000076552000-0x0000000076554000) (0MB)
efi: mem146: type=3, attr=0xf, 
range=[0x0000000076554000-0x000000007655b000) (0MB)
efi: mem147: type=4, attr=0xf, 
range=[0x000000007655b000-0x0000000076572000) (0MB)
efi: mem148: type=3, attr=0xf, 
range=[0x0000000076572000-0x0000000076573000) (0MB)
efi: mem149: type=4, attr=0xf, 
range=[0x0000000076573000-0x0000000076580000) (0MB)
efi: mem150: type=3, attr=0xf, 
range=[0x0000000076580000-0x0000000076582000) (0MB)
efi: mem151: type=4, attr=0xf, 
range=[0x0000000076582000-0x0000000076584000) (0MB)
efi: mem152: type=3, attr=0xf, 
range=[0x0000000076584000-0x00000000765c1000) (0MB)
efi: mem153: type=4, attr=0xf, 
range=[0x00000000765c1000-0x00000000765c2000) (0MB)
efi: mem154: type=3, attr=0xf, 
range=[0x00000000765c2000-0x00000000765c6000) (0MB)
efi: mem155: type=4, attr=0xf, 
range=[0x00000000765c6000-0x00000000765ce000) (0MB)
efi: mem156: type=3, attr=0xf, 
range=[0x00000000765ce000-0x00000000765d2000) (0MB)
efi: mem157: type=4, attr=0xf, 
range=[0x00000000765d2000-0x00000000765d4000) (0MB)
efi: mem158: type=3, attr=0xf, 
range=[0x00000000765d4000-0x00000000765d9000) (0MB)
efi: mem159: type=4, attr=0xf, 
range=[0x00000000765d9000-0x00000000765da000) (0MB)
efi: mem160: type=3, attr=0xf, 
range=[0x00000000765da000-0x0000000076603000) (0MB)
efi: mem161: type=4, attr=0xf, 
range=[0x0000000076603000-0x0000000076604000) (0MB)
efi: mem162: type=3, attr=0xf, 
range=[0x0000000076604000-0x0000000076611000) (0MB)
efi: mem163: type=4, attr=0xf, 
range=[0x0000000076611000-0x0000000076612000) (0MB)
efi: mem164: type=3, attr=0xf, 
range=[0x0000000076612000-0x0000000076618000) (0MB)
efi: mem165: type=4, attr=0xf, 
range=[0x0000000076618000-0x000000007661a000) (0MB)
efi: mem166: type=3, attr=0xf, 
range=[0x000000007661a000-0x0000000076652000) (0MB)
efi: mem167: type=4, attr=0xf, 
range=[0x0000000076652000-0x0000000076653000) (0MB)
efi: mem168: type=3, attr=0xf, 
range=[0x0000000076653000-0x0000000076664000) (0MB)
efi: mem169: type=4, attr=0xf, 
range=[0x0000000076664000-0x0000000076665000) (0MB)
efi: mem170: type=3, attr=0xf, 
range=[0x0000000076665000-0x0000000076667000) (0MB)
efi: mem171: type=4, attr=0xf, 
range=[0x0000000076667000-0x0000000076668000) (0MB)
efi: mem172: type=3, attr=0xf, 
range=[0x0000000076668000-0x0000000076673000) (0MB)
efi: mem173: type=4, attr=0xf, 
range=[0x0000000076673000-0x0000000076675000) (0MB)
efi: mem174: type=3, attr=0xf, 
range=[0x0000000076675000-0x000000007667d000) (0MB)
efi: mem175: type=4, attr=0xf, 
range=[0x000000007667d000-0x0000000076a7d000) (4MB)
efi: mem176: type=3, attr=0xf, 
range=[0x0000000076a7d000-0x0000000076a82000) (0MB)
efi: mem177: type=4, attr=0xf, 
range=[0x0000000076a82000-0x0000000076a9f000) (0MB)
efi: mem178: type=3, attr=0xf, 
range=[0x0000000076a9f000-0x0000000076aa1000) (0MB)
efi: mem179: type=4, attr=0xf, 
range=[0x0000000076aa1000-0x0000000076ae7000) (0MB)
efi: mem180: type=3, attr=0xf, 
range=[0x0000000076ae7000-0x0000000076aec000) (0MB)
efi: mem181: type=4, attr=0xf, 
range=[0x0000000076aec000-0x0000000076b01000) (0MB)
efi: mem182: type=3, attr=0xf, 
range=[0x0000000076b01000-0x0000000076b23000) (0MB)
efi: mem183: type=4, attr=0xf, 
range=[0x0000000076b23000-0x0000000076b93000) (0MB)
efi: mem184: type=3, attr=0xf, 
range=[0x0000000076b93000-0x0000000076b95000) (0MB)
efi: mem185: type=4, attr=0xf, 
range=[0x0000000076b95000-0x0000000076b96000) (0MB)
efi: mem186: type=3, attr=0xf, 
range=[0x0000000076b96000-0x0000000076ba5000) (0MB)
efi: mem187: type=4, attr=0xf, 
range=[0x0000000076ba5000-0x0000000076ba6000) (0MB)
efi: mem188: type=3, attr=0xf, 
range=[0x0000000076ba6000-0x0000000076ba8000) (0MB)
efi: mem189: type=4, attr=0xf, 
range=[0x0000000076ba8000-0x0000000078b31000) (31MB)
efi: mem190: type=6, attr=0x800000000000000f, 
range=[0x0000000078b31000-0x0000000078b33000) (0MB)
efi: mem191: type=5, attr=0x800000000000000f, 
range=[0x0000000078b33000-0x0000000078b35000) (0MB)
efi: mem192: type=6, attr=0x800000000000000f, 
range=[0x0000000078b35000-0x0000000078b37000) (0MB)
efi: mem193: type=5, attr=0x800000000000000f, 
range=[0x0000000078b37000-0x0000000078b41000) (0MB)
efi: mem194: type=6, attr=0x800000000000000f, 
range=[0x0000000078b41000-0x0000000078b67000) (0MB)
efi: mem195: type=5, attr=0x800000000000000f, 
range=[0x0000000078b67000-0x0000000078b71000) (0MB)
efi: mem196: type=6, attr=0x800000000000000f, 
range=[0x0000000078b71000-0x0000000078b81000) (0MB)
efi: mem197: type=5, attr=0x800000000000000f, 
range=[0x0000000078b81000-0x0000000078bd1000) (0MB)
efi: mem198: type=0, attr=0xf, 
range=[0x0000000078bd1000-0x0000000078bd2000) (0MB)
efi: mem199: type=0, attr=0xf, 
range=[0x0000000078bd2000-0x0000000078bde000) (0MB)
efi: mem200: type=0, attr=0xf, 
range=[0x0000000078bde000-0x0000000078bf6000) (0MB)
efi: mem201: type=0, attr=0xf, 
range=[0x0000000078bf6000-0x0000000078c21000) (0MB)
efi: mem202: type=10, attr=0xf, 
range=[0x0000000078c21000-0x0000000078c7a000) (0MB)
efi: mem203: type=9, attr=0xf, 
range=[0x0000000078c7a000-0x0000000078cda000) (0MB)
efi: mem204: type=10, attr=0xf, 
range=[0x0000000078cda000-0x0000000078cf0000) (0MB)
efi: mem205: type=10, attr=0xf, 
range=[0x0000000078cf0000-0x0000000078d21000) (0MB)
efi: mem206: type=9, attr=0xf, 
range=[0x0000000078d21000-0x0000000078d22000) (0MB)
efi: mem207: type=9, attr=0xf, 
range=[0x0000000078d22000-0x0000000078d41000) (0MB)
efi: mem208: type=4, attr=0xf, 
range=[0x0000000078d41000-0x000000007cda2000) (64MB)
efi: mem209: type=6, attr=0x800000000000000f, 
range=[0x000000007cda2000-0x000000007cda3000) (0MB)
efi: mem210: type=4, attr=0xf, 
range=[0x000000007cda3000-0x000000007cdb5000) (0MB)
efi: mem211: type=6, attr=0x800000000000000f, 
range=[0x000000007cdb5000-0x000000007ce35000) (0MB)
efi: mem212: type=4, attr=0xf, 
range=[0x000000007ce35000-0x000000007f000000) (33MB)
efi: mem213: type=7, attr=0xf, 
range=[0x0000008080000000-0x0000008800000000) (30720MB)
efi: mem214: type=7, attr=0xf, 
range=[0x000000a000000000-0x000000bfff000000) (131056MB)
efi: mem215: type=7, attr=0xf, 
range=[0x000000c000000000-0x000000cfff000000) (65520MB)
efi: mem216: type=7, attr=0xf, 
range=[0x000000e000000000-0x000000efff000000) (65520MB)
efi: mem217: type=11, attr=0x8000000000000001, 
range=[0x0000000080000000-0x0000000090000000) (256MB)
efi: mem218: type=11, attr=0x8000000000000001, 
range=[0x00000000f0000000-0x00000000fc000000) (192MB)
efi: mem219: type=11, attr=0x8000000000000001, 
range=[0x00000000feb00000-0x00000000fec00000) (1MB)
efi: mem220: type=11, attr=0x8000000000000001, 
range=[0x000000ff50000000-0x000000ff53d00000) (61MB)
efi: mem221: type=11, attr=0x8000000000000001, 
range=[0x000000ff53e00000-0x000000ff54000000) (2MB)
efi: mem222: type=11, attr=0x8000000000000001, 
range=[0x000000ff57e00000-0x000000ff58000000) (2MB)
efi: mem223: type=11, attr=0x8000000000000001, 
range=[0x000000ff5be00000-0x000000ff5c000000) (2MB)
efi: mem224: type=11, attr=0x8000000000000001, 
range=[0x000000ff5fe00000-0x000000ff60000000) (2MB)
efi: mem225: type=11, attr=0x8000000000000001, 
range=[0x000000ff80000000-0x000000ff83000000) (48MB)
efi: mem226: type=11, attr=0x8000000000000001, 
range=[0x000000ff84000000-0x000000ff87000000) (48MB)
efi: mem227: type=11, attr=0x8000000000000001, 
range=[0x000000ff88000000-0x000000ff8b000000) (48MB)
efi: mem228: type=11, attr=0x8000000000000001, 
range=[0x000000ff8c000000-0x000000ff8f000000) (48MB)
efi: mem229: type=11, attr=0x8000000000000001, 
range=[0x000000ff90000000-0x000000ff93000000) (48MB)
efi: mem230: type=11, attr=0x8000000000000001, 
range=[0x000000ff94000000-0x000000ff97000000) (48MB)
efi: mem231: type=11, attr=0x8000000000000001, 
range=[0x000000ff98000000-0x000000ff9b000000) (48MB)
efi: mem232: type=11, attr=0x8000000000000001, 
range=[0x000000ff9c000000-0x000000ff9f000000) (48MB)


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: BUG: unable to handle kernel paging request at 000000effd870020
  2013-01-02 19:13   ` Nathan Zimmer
@ 2013-01-02 21:09     ` Robin Holt
  2013-01-03 15:50       ` Matt Fleming
  0 siblings, 1 reply; 6+ messages in thread
From: Robin Holt @ 2013-01-02 21:09 UTC (permalink / raw)
  To: Nathan Zimmer
  Cc: H. Peter Anvin, linux-kernel, linux-efi, matt.fleming, tglx,
	mingo

On Wed, Jan 02, 2013 at 01:13:43PM -0600, Nathan Zimmer wrote:
> On 01/02/2013 12:04 PM, H. Peter Anvin wrote:
> >On 01/02/2013 09:21 AM, Nathan Zimmer wrote:
> >>I am getting an early boot problem. It only happens on the larger of the
> >>machines I haven't seen it crop up on machines with more then 512 GB of ram.
> >>It shows in the latest linus kernel too.
> >>
> >>I am (wildly) guessing that what is happening is that the new_memmap that is
> >>being passed to bios is somehow placed incorrectly.
> >>I have come up with a workaround.  By placing it the DMA area the issue goes
> >>away but that doesn't seem like a real fix.
> >>
> >What does your memory map look like?

We reported this a few times (Russ Anderson and I both).  The problem is
at the point in boot where the efi_enter_virtual_mode callback is, there
is no identity mapping for most of memory.  If the allocation happens
to be above the 512GB (or maybe something lower than that) point, the
BIOS is not able to address this via the physical address passed to it.

Russ' solution was to not remap at all.  The interim workaround I have
been using is adding a GFP_DMA flag to the kmalloc.  An earlier post I
made to the list was to pass in the va to the new memmap table.

Robin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: BUG: unable to handle kernel paging request at 000000effd870020
  2013-01-02 21:09     ` Robin Holt
@ 2013-01-03 15:50       ` Matt Fleming
  2013-01-03 22:07         ` Nathan Zimmer
  0 siblings, 1 reply; 6+ messages in thread
From: Matt Fleming @ 2013-01-03 15:50 UTC (permalink / raw)
  To: Robin Holt
  Cc: Nathan Zimmer, H. Peter Anvin, linux-kernel, linux-efi, tglx,
	mingo

On Wed, 2013-01-02 at 15:09 -0600, Robin Holt wrote:
> On Wed, Jan 02, 2013 at 01:13:43PM -0600, Nathan Zimmer wrote:
> > On 01/02/2013 12:04 PM, H. Peter Anvin wrote:
> > >On 01/02/2013 09:21 AM, Nathan Zimmer wrote:
> > >>I am getting an early boot problem. It only happens on the larger of the
> > >>machines I haven't seen it crop up on machines with more then 512 GB of ram.
> > >>It shows in the latest linus kernel too.
> > >>
> > >>I am (wildly) guessing that what is happening is that the new_memmap that is
> > >>being passed to bios is somehow placed incorrectly.
> > >>I have come up with a workaround.  By placing it the DMA area the issue goes
> > >>away but that doesn't seem like a real fix.
> > >>
> > >What does your memory map look like?
> 
> We reported this a few times (Russ Anderson and I both).  The problem is
> at the point in boot where the efi_enter_virtual_mode callback is, there
> is no identity mapping for most of memory.  If the allocation happens
> to be above the 512GB (or maybe something lower than that) point, the
> BIOS is not able to address this via the physical address passed to it.

Right, looks like efi_call_phys_prelog() needs rewriting to install a
proper identity mapping that actually addresses *all* of available
memory, instead of just the first PGDIR_SIZE bytes.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: BUG: unable to handle kernel paging request at 000000effd870020
  2013-01-03 15:50       ` Matt Fleming
@ 2013-01-03 22:07         ` Nathan Zimmer
  0 siblings, 0 replies; 6+ messages in thread
From: Nathan Zimmer @ 2013-01-03 22:07 UTC (permalink / raw)
  To: Matt Fleming, Robin Holt
  Cc: H. Peter Anvin, linux-kernel, linux-efi, tglx, mingo

On Thu, Jan 03, 2013 at 03:50:55PM +0000, Matt Fleming wrote:
> On Wed, 2013-01-02 at 15:09 -0600, Robin Holt wrote:
> > On Wed, Jan 02, 2013 at 01:13:43PM -0600, Nathan Zimmer wrote:
> > > On 01/02/2013 12:04 PM, H. Peter Anvin wrote:
> > > >On 01/02/2013 09:21 AM, Nathan Zimmer wrote:
> > > >>I am getting an early boot problem. It only happens on the larger of the
> > > >>machines I haven't seen it crop up on machines with more then 512 GB of ram.
> > > >>It shows in the latest linus kernel too.
> > > >>
> > > >>I am (wildly) guessing that what is happening is that the new_memmap that is
> > > >>being passed to bios is somehow placed incorrectly.
> > > >>I have come up with a workaround.  By placing it the DMA area the issue goes
> > > >>away but that doesn't seem like a real fix.
> > > >>
> > > >What does your memory map look like?
> > 
> > We reported this a few times (Russ Anderson and I both).  The problem is
> > at the point in boot where the efi_enter_virtual_mode callback is, there
> > is no identity mapping for most of memory.  If the allocation happens
> > to be above the 512GB (or maybe something lower than that) point, the
> > BIOS is not able to address this via the physical address passed to it.
> 
> Right, looks like efi_call_phys_prelog() needs rewriting to install a
> proper identity mapping that actually addresses *all* of available
> memory, instead of just the first PGDIR_SIZE bytes.
> 
> 

Ok here is what Robin and I came up with


>From c96406c36a45de25ac83681971b64d48096288e2 Mon Sep 17 00:00:00 2001
From: Nathan Zimmer <nzimmer@sgi.com>
Date: Thu, 3 Jan 2013 15:41:10 -0600
Subject: [PATCH] Pass a proper identity mapping in efi_call_phys_prelog

Update efi_call_phys_prelog to install an identity mapping of all available
memory.  This corrects a bug on very large systems with more then 512 GB in
which bios would not be able to access addresses above not in the mapping.

The result is a crash that looks much like this.

BUG: unable to handle kernel paging request at 000000effd870020
IP: [<0000000078bce331>] 0x78bce330
PGD 0
Oops: 0000 [#1] SMP
Modules linked in:
CPU 0
Pid: 0, comm: swapper/0 Tainted: G        W    3.8.0-rc1-next-20121224-medusa_ntz+ #2 Intel Corp. Stoutland Platform
RIP: 0010:[<0000000078bce331>]  [<0000000078bce331>] 0x78bce330
RSP: 0000:ffffffff81601d28  EFLAGS: 00010006
RAX: 0000000078b80e18 RBX: 0000000000000004 RCX: 0000000000000004
RDX: 0000000078bcf958 RSI: 0000000000002400 RDI: 8000000000000000
RBP: 0000000078bcf760 R08: 000000effd870000 R09: 0000000000000000
R10: 0000000000000000 R11: 00000000000000c3 R12: 0000000000000030
R13: 000000effd870000 R14: 0000000000000000 R15: ffff88effd870000
FS:  0000000000000000(0000) GS:ffff88effe400000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000000effd870020 CR3: 000000000160c000 CR4: 00000000000006b0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process swapper/0 (pid: 0, threadinfo ffffffff81600000, task ffffffff81614400)
Stack:
 0000000078b80d18 0000000000000004 0000000078bced7b ffff880078b81fff
 0000000000000000 0000000000000082 0000000078bce3a8 0000000000002400
 0000000060000202 0000000078b80da0 0000000078bce45d ffffffff8107cb5a
Call Trace:
 [<ffffffff8107cb5a>] ? on_each_cpu+0x77/0x83
 [<ffffffff8102f4eb>] ? change_page_attr_set_clr+0x32f/0x3ed
 [<ffffffff81035946>] ? efi_call4+0x46/0x80
 [<ffffffff816c5abb>] ? efi_enter_virtual_mode+0x1f5/0x305
 [<ffffffff816aeb24>] ? start_kernel+0x34a/0x3d2
 [<ffffffff816ae5ed>] ? repair_env_string+0x60/0x60
 [<ffffffff816ae2be>] ? x86_64_start_reservations+0xba/0xc1
 [<ffffffff816ae120>] ? early_idt_handlers+0x120/0x120
 [<ffffffff816ae419>] ? x86_64_start_kernel+0x154/0x163
Code:  Bad RIP value.
RIP  [<0000000078bce331>] 0x78bce330
 RSP <ffffffff81601d28>
CR2: 000000effd870020
---[ end trace ead828934fef5eab ]---

Cc: Matt Fleming <matt.fleming@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Nathan Zimmer <nzimmer@sgi.com>
Signed-off-by: Robin Holt <holt@sgi.com>
---
 arch/x86/platform/efi/efi_64.c |   23 ++++++++++++++++++-----
 1 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
index 95fd505..79d54d7 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
@@ -38,7 +38,7 @@
 #include <asm/cacheflush.h>
 #include <asm/fixmap.h>
 
-static pgd_t save_pgd __initdata;
+static pgd_t *save_pgd __initdata;
 static unsigned long efi_flags __initdata;
 
 static void __init early_code_mapping_set_exec(int executable)
@@ -61,13 +61,22 @@ static void __init early_code_mapping_set_exec(int executable)
 void __init efi_call_phys_prelog(void)
 {
 	unsigned long vaddress;
+	int pgd;
+	int n_pgds;
 
 	early_code_mapping_set_exec(1);
 	local_irq_save(efi_flags);
-	vaddress = (unsigned long)__va(0x0UL);
-	save_pgd = *pgd_offset_k(0x0UL);
-	set_pgd(pgd_offset_k(0x0UL), *pgd_offset_k(vaddress));
+
+	n_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT), PGDIR_SIZE);
+	save_pgd = kmalloc(n_pgds * sizeof(pgd_t), GFP_KERNEL);
+
+	for (pgd = 0; pgd < n_pgds; pgd++) {
+		save_pgd[pgd] = *pgd_offset_k(pgd * PGDIR_SIZE);
+		vaddress = (unsigned long)__va(pgd * PGDIR_SIZE);
+		set_pgd(pgd_offset_k(j * PGDIR_SIZE), *pgd_offset_k(vaddress));
+	}
 	__flush_tlb_all();
+
 }
 
 void __init efi_call_phys_epilog(void)
@@ -75,7 +84,11 @@ void __init efi_call_phys_epilog(void)
 	/*
 	 * After the lock is released, the original page table is restored.
 	 */
-	set_pgd(pgd_offset_k(0x0UL), save_pgd);
+	int pgd;
+	int n_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT) , PGDIR_SIZE);
+	for (pgd = 0; pgd < n_pgds; pgd++)
+		set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), save_pgd[pgd]);
+	kfree(save_pgd);
 	__flush_tlb_all();
 	local_irq_restore(efi_flags);
 	early_code_mapping_set_exec(0);
-- 
1.6.0.2



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-01-03 22:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-02 17:21 BUG: unable to handle kernel paging request at 000000effd870020 Nathan Zimmer
2013-01-02 18:04 ` H. Peter Anvin
2013-01-02 19:13   ` Nathan Zimmer
2013-01-02 21:09     ` Robin Holt
2013-01-03 15:50       ` Matt Fleming
2013-01-03 22:07         ` Nathan Zimmer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox