lkml.org 
[lkml]   [2012]   [Aug]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/5] x86: Fixup code testing if a pfn is direct mapped
    Date
    Update code that previously assumed pfns [ 0 - max_low_pfn_mapped ) and
    [ 4GB - max_pfn_mapped ) were always direct mapped; to now look up
    pfn_mapped ranges instead.

    Signed-off-by: Jacob Shin <jacob.shin@amd.com>
    ---
    arch/x86/kernel/cpu/amd.c | 6 +-----
    arch/x86/platform/efi/efi.c | 8 ++++----
    2 files changed, 5 insertions(+), 9 deletions(-)

    diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
    index 9d92e19..554ccfc 100644
    --- a/arch/x86/kernel/cpu/amd.c
    +++ b/arch/x86/kernel/cpu/amd.c
    @@ -677,11 +677,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
    */
    if (!rdmsrl_safe(MSR_K8_TSEG_ADDR, &tseg)) {
    printk(KERN_DEBUG "tseg: %010llx\n", tseg);
    - if ((tseg>>PMD_SHIFT) <
    - (max_low_pfn_mapped>>(PMD_SHIFT-PAGE_SHIFT)) ||
    - ((tseg>>PMD_SHIFT) <
    - (max_pfn_mapped>>(PMD_SHIFT-PAGE_SHIFT)) &&
    - (tseg>>PMD_SHIFT) >= (1ULL<<(32 - PMD_SHIFT))))
    + if (pfn_is_mapped(tseg))
    set_memory_4k((unsigned long)__va(tseg), 1);
    }
    }
    diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
    index 2dc29f5..4810ab3 100644
    --- a/arch/x86/platform/efi/efi.c
    +++ b/arch/x86/platform/efi/efi.c
    @@ -754,7 +754,7 @@ void __init efi_enter_virtual_mode(void)
    efi_memory_desc_t *md, *prev_md = NULL;
    efi_status_t status;
    unsigned long size;
    - u64 end, systab, addr, npages, end_pfn;
    + u64 end, systab, addr, npages, start_pfn, end_pfn;
    void *p, *va, *new_memmap = NULL;
    int count = 0;

    @@ -805,10 +805,10 @@ void __init efi_enter_virtual_mode(void)
    size = md->num_pages << EFI_PAGE_SHIFT;
    end = md->phys_addr + size;

    + start_pfn = PFN_DOWN(md->phys_addr);
    end_pfn = PFN_UP(end);
    - if (end_pfn <= max_low_pfn_mapped
    - || (end_pfn > (1UL << (32 - PAGE_SHIFT))
    - && end_pfn <= max_pfn_mapped))
    +
    + if (pfn_range_is_mapped(start_pfn, end_pfn))
    va = __va(md->phys_addr);
    else
    va = efi_ioremap(md->phys_addr, size, md->type);
    --
    1.7.9.5



    \
     
     \ /
      Last update: 2012-08-10 00:01    [W:0.025 / U:1.584 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site