[lkml]   [2010]   [Aug]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectRe: [PATCH 1/2] x86-32: Fix crashes with CPU hotplug on AMD machines
    On 08/04/2010 09:45 AM, Borislav Petkov wrote:
    > 2. Do not use swapper_pg_dir to boot secondary CPUs like 64-bit
    > does.
    > This patch implements solution 2. It introduces a trampoline_pg_dir
    > which has the same layout as swapper_pg_dir with low_mappings. This page
    > table is used as the initial page table of the booting CPU. Later in the
    > bringup process, it switches to swapper_pg_dir and does a global TLB
    > flush. This fixes the crashes in our test cases.

    I would like to keep around a page directory with the low mappings
    around -- and not use it for kernel threads -- at all times *anyway*.
    This means we can remove any current hacks that we have to do around S3
    entry and exit, for example.

    --- a/arch/x86/kernel/head_32.S
    +++ b/arch/x86/kernel/head_32.S
    @@ -328,7 +328,7 @@ ENTRY(startup_32_smp)
    * Enable paging
    - movl $pa(swapper_pg_dir),%eax
    + movl pa(initial_page_table), %eax
    movl %eax,%cr3 /* set the page table pointer.. */
    movl %cr0,%eax
    orl $X86_CR0_PG,%eax
    @@ -608,6 +608,8 @@ ignore_int:
    .align 4
    .long i386_start_kernel
    + .long pa(swapper_pg_dir)

    * BSS section
    @@ -623,6 +625,10 @@ ENTRY(swapper_pg_dir)
    .fill 1024,4,0
    + .fill 1024,4,0

    I don't really see why this makes sense, though. It would make more
    sense that the initial page table we set up becomes trampoline_pg_dir;
    we can then set up and change to swapper_pg_dir almost immediately.

    I realize this isn't how the 64-bit code works at the moment, but in a
    lot of ways I think it would be better if it did.


     \ /
      Last update: 2010-08-05 01:09    [W:0.024 / U:55.236 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site