lkml.org 
[lkml]   [2010]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/4] x86: use wake_system_ram_range instead of e820_any_mapped in agp path
    put apterture_valid back to .c
    and early path still use e820_any_mapped()

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>

    ---
    arch/x86/include/asm/gart.h | 22 ----------------------
    arch/x86/kernel/aperture_64.c | 22 ++++++++++++++++++++++
    drivers/char/agp/amd64-agp.c | 39 ++++++++++++++++++++++++++++++++++++++-
    3 files changed, 60 insertions(+), 23 deletions(-)

    Index: linux-2.6/arch/x86/include/asm/gart.h
    ===================================================================
    --- linux-2.6.orig/arch/x86/include/asm/gart.h
    +++ linux-2.6/arch/x86/include/asm/gart.h
    @@ -74,26 +74,4 @@ static inline void enable_gart_translati
    pci_write_config_dword(dev, AMD64_GARTAPERTURECTL, ctl);
    }

    -static inline int aperture_valid(u64 aper_base, u32 aper_size, u32 min_size)
    -{
    - if (!aper_base)
    - return 0;
    -
    - if (aper_base + aper_size > 0x100000000ULL) {
    - printk(KERN_INFO "Aperture beyond 4GB. Ignoring.\n");
    - return 0;
    - }
    - if (e820_any_mapped(aper_base, aper_base + aper_size, E820_RAM)) {
    - printk(KERN_INFO "Aperture pointing to e820 RAM. Ignoring.\n");
    - return 0;
    - }
    - if (aper_size < min_size) {
    - printk(KERN_INFO "Aperture too small (%d MB) than (%d MB)\n",
    - aper_size>>20, min_size>>20);
    - return 0;
    - }
    -
    - return 1;
    -}
    -
    #endif /* _ASM_X86_GART_H */
    Index: linux-2.6/arch/x86/kernel/aperture_64.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/kernel/aperture_64.c
    +++ linux-2.6/arch/x86/kernel/aperture_64.c
    @@ -145,6 +145,28 @@ static u32 __init find_cap(int bus, int
    return 0;
    }

    +static int __init aperture_valid(u64 aper_base, u32 aper_size, u32 min_size)
    +{
    + if (!aper_base)
    + return 0;
    +
    + if (aper_base + aper_size > 0x100000000ULL) {
    + printk(KERN_INFO "Aperture beyond 4GB. Ignoring.\n");
    + return 0;
    + }
    + if (e820_any_mapped(aper_base, aper_base + aper_size, E820_RAM)) {
    + printk(KERN_INFO "Aperture pointing to e820 RAM. Ignoring.\n");
    + return 0;
    + }
    + if (aper_size < min_size) {
    + printk(KERN_INFO "Aperture too small (%d MB) than (%d MB)\n",
    + aper_size>>20, min_size>>20);
    + return 0;
    + }
    +
    + return 1;
    +}
    +
    /* Read a standard AGPv3 bridge header */
    static u32 __init read_agp(int bus, int slot, int func, int cap, u32 *order)
    {
    Index: linux-2.6/drivers/char/agp/amd64-agp.c
    ===================================================================
    --- linux-2.6.orig/drivers/char/agp/amd64-agp.c
    +++ linux-2.6/drivers/char/agp/amd64-agp.c
    @@ -14,7 +14,6 @@
    #include <linux/agp_backend.h>
    #include <linux/mmzone.h>
    #include <asm/page.h> /* PAGE_SIZE */
    -#include <asm/e820.h>
    #include <asm/k8.h>
    #include <asm/gart.h>
    #include "agp.h"
    @@ -231,6 +230,44 @@ static const struct agp_bridge_driver am
    .agp_type_to_mask_type = agp_generic_type_to_mask_type,
    };

    +static int __devinit
    +__is_ram(unsigned long pfn, unsigned long nr_pages, void *arg)
    +{
    + return 1;
    +}
    +
    +static int __devinit any_ram_in_range(u64 base, u64 size)
    +{
    + unsigned long pfn, nr_pages;
    +
    + pfn = base >> PAGE_SHIFT;
    + nr_pages = size >> PAGE_SHIFT;
    +
    + return walk_system_ram_range(pfn, nr_pages, NULL, __is_ram) == 1;
    +}
    +
    +static int __devinit aperture_valid(u64 aper_base, u32 aper_size, u32 min_size)
    +{
    + if (!aper_base)
    + return 0;
    +
    + if (aper_base + aper_size > 0x100000000ULL) {
    + printk(KERN_INFO "Aperture beyond 4GB. Ignoring.\n");
    + return 0;
    + }
    + if (any_ram_in_range(aper_base, aper_size)) {
    + printk(KERN_INFO "Aperture pointing to E820 RAM. Ignoring.\n");
    + return 0;
    + }
    + if (aper_size < min_size) {
    + printk(KERN_INFO "Aperture too small (%d MB) than (%d MB)\n",
    + aper_size>>20, min_size>>20);
    + return 0;
    + }
    +
    + return 1;
    +}
    +
    /* Some basic sanity checks for the aperture. */
    static int __devinit agp_aperture_valid(u64 aper, u32 size)
    {

    \
     
     \ /
      Last update: 2010-03-10 22:27    [W:2.756 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site