[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <485BF73C.7010802@sgi.com>
Date: Fri, 20 Jun 2008 11:30:20 -0700
From: Mike Travis <travis@....com>
To: Christoph Lameter <clameter@....com>
CC: Jeremy Fitzhardinge <jeremy@...p.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: Re: [crash, bisected] Re: [PATCH 3/4] x86_64: Fold pda into per cpu
area
Christoph Lameter wrote:
> On Fri, 20 Jun 2008, Jeremy Fitzhardinge wrote:
>
>> So it seems the problem is that the pre-initialized gdt_page is being lost and
>> replaced with zero. Linker script bug?
>
> Is the pre initialized gdt page in the per cpu area? Does not look like
> it. The loader setup for the percpu section changes with zero basing.
> Maybe that has bad side effects?
Yes, it is... The fixup logic is this:
0000000000004000 D per_cpu__gdt_page
ffffffff81911000 A __per_cpu_load
arch/x86/kernel/cpu/common.c:
DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = {
[GDT_ENTRY_KERNEL_CS] = { { { 0x0000ffff, 0x00cf9a00 } } },
...
arch/x86/kernel/head_64.S:
startup_64:
...
/*
* Fix up per_cpu__gdt_page offset when basing percpu
* variables at zero. This is only needed for the boot cpu.
*/
addq $__per_cpu_load, early_gdt_descr_base(%rip)
ENTRY(secondary_startup_64)
...
/*
* We must switch to a new descriptor in kernel space for the GDT
* because soon the kernel won't have access anymore to the userspace
* addresses where we're currently running on. We have to do that here
* because in 32bit we couldn't load a 64bit linear address.
*/
lgdt early_gdt_descr(%rip)
...
.globl early_gdt_descr
early_gdt_descr:
.word GDT_ENTRIES*8-1
early_gdt_descr_base:
.quad per_cpu__gdt_page
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists