lkml.org 
[lkml]   [2010]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 31/35] x86: Use wake_system_ram_range() instead of e820_any_mapped() in agp path
    Date
    Move apterture_valid back to .c

    and early path still use e820_any_mapped()

    So later we can make e820_any_mapped() to _init

    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(-)

    diff --git a/arch/x86/include/asm/gart.h b/arch/x86/include/asm/gart.h
    index 4ac5b0f..2b63a91 100644
    --- a/arch/x86/include/asm/gart.h
    +++ b/arch/x86/include/asm/gart.h
    @@ -74,26 +74,4 @@ static inline void enable_gart_translation(struct pci_dev *dev, u64 addr)
    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 */
    diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c
    index b5d8b0b..4755b5a 100644
    --- a/arch/x86/kernel/aperture_64.c
    +++ b/arch/x86/kernel/aperture_64.c
    @@ -145,6 +145,28 @@ static u32 __init find_cap(int bus, int slot, int func, int cap)
    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)
    {
    diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c
    index fd50ead..85cabd0 100644
    --- a/drivers/char/agp/amd64-agp.c
    +++ b/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 amd_8151_driver = {
    .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)
    {
    --
    1.6.4.2


    \
     
     \ /
      Last update: 2010-05-14 02:27    [W:0.027 / U:2.128 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site