lkml.org 
[lkml]   [2008]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] x86: max_low_pfn_mapped fix #2
    Date

    tight the boundary check

    also print out tseg for amd cpu.

    Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>

    ---
    arch/x86/kernel/cpu/amd_64.c | 1 +
    arch/x86/mm/pageattr.c | 4 ++--
    arch/x86/mm/pat.c | 4 ++--
    arch/x86/pci/i386.c | 4 ++--
    4 files changed, 7 insertions(+), 6 deletions(-)

    Index: linux-2.6/arch/x86/kernel/cpu/amd_64.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/kernel/cpu/amd_64.c
    +++ linux-2.6/arch/x86/kernel/cpu/amd_64.c
    @@ -200,6 +200,7 @@ static void __cpuinit init_amd(struct cp
    * benefit in doing so.
    */
    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) <
    Index: linux-2.6/arch/x86/mm/pageattr.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/mm/pageattr.c
    +++ linux-2.6/arch/x86/mm/pageattr.c
    @@ -658,11 +658,11 @@ static int cpa_process_alias(struct cpa_
    struct cpa_data alias_cpa;
    int ret = 0;

    - if (cpa->pfn > max_pfn_mapped)
    + if (cpa->pfn >= max_pfn_mapped)
    return 0;

    #ifdef CONFIG_X86_64
    - if (cpa->pfn > max_low_pfn_mapped && cpa->pfn < (1UL<<(32-PAGE_SHIFT)))
    + if (cpa->pfn >= max_low_pfn_mapped && cpa->pfn < (1UL<<(32-PAGE_SHIFT)))
    return 0;
    #endif
    /*
    Index: linux-2.6/arch/x86/mm/pat.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/mm/pat.c
    +++ linux-2.6/arch/x86/mm/pat.c
    @@ -449,8 +449,8 @@ int phys_mem_access_prot_allowed(struct
    if (retval < 0)
    return 0;

    - if (((pfn <= max_low_pfn_mapped) ||
    - (pfn >= (1UL<<(32 - PAGE_SHIFT)) && pfn <= max_pfn_mapped)) &&
    + if (((pfn < max_low_pfn_mapped) ||
    + (pfn >= (1UL<<(32 - PAGE_SHIFT)) && pfn < max_pfn_mapped)) &&
    ioremap_change_attr((unsigned long)__va(offset), size, flags) < 0) {
    free_memtype(offset, offset + size);
    printk(KERN_INFO
    Index: linux-2.6/arch/x86/pci/i386.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/pci/i386.c
    +++ linux-2.6/arch/x86/pci/i386.c
    @@ -334,9 +334,9 @@ int pci_mmap_page_range(struct pci_dev *
    flags = new_flags;
    }

    - if (((vma->vm_pgoff <= max_low_pfn_mapped) ||
    + if (((vma->vm_pgoff < max_low_pfn_mapped) ||
    (vma->vm_pgoff >= (1UL<<(32 - PAGE_SHIFT)) &&
    - vma->vm_pgoff <= max_pfn_mapped)) &&
    + vma->vm_pgoff < max_pfn_mapped)) &&
    ioremap_change_attr((unsigned long)__va(addr), len, flags)) {
    free_memtype(addr, addr + len);
    return -EINVAL;

    \
     
     \ /
      Last update: 2008-07-12 23:37    [W:0.022 / U:62.716 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site