lkml.org 
[lkml]   [2016]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 04/17] x86/e820: Set System RAM type and descriptor
    Date
    Change e820_reserve_resources() to set 'flags' and 'desc' from
    e820 types.

    IORESOURCE_SYSTEM_RAM is set to 'flags' for System RAM, which
    are E820_RESERVED_KERN and E820_RAM. IORESOURCE_SYSTEM_RAM is
    also set to "Kernel data", "Kernel code", and "Kernel bss",
    which are child nodes of System RAM.

    I/O resource descriptor is set to 'desc' for entries that are
    (and will be) target ranges of walk_iomem_res() and
    region_intersects().

    Cc: Borislav Petkov <bp@alien8.de>
    Cc: x86@kernel.org
    Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
    ---
    arch/x86/kernel/e820.c | 38 +++++++++++++++++++++++++++++++++++++-
    arch/x86/kernel/setup.c | 6 +++---
    2 files changed, 40 insertions(+), 4 deletions(-)

    diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
    index 569c1e4..837365f 100644
    --- a/arch/x86/kernel/e820.c
    +++ b/arch/x86/kernel/e820.c
    @@ -925,6 +925,41 @@ static const char *e820_type_to_string(int e820_type)
    }
    }

    +static unsigned long e820_type_to_iomem_type(int e820_type)
    +{
    + switch (e820_type) {
    + case E820_RESERVED_KERN:
    + case E820_RAM:
    + return IORESOURCE_SYSTEM_RAM;
    + case E820_ACPI:
    + case E820_NVS:
    + case E820_UNUSABLE:
    + case E820_PRAM:
    + case E820_PMEM:
    + default:
    + return IORESOURCE_MEM;
    + }
    +}
    +
    +static unsigned long e820_type_to_iores_desc(int e820_type)
    +{
    + switch (e820_type) {
    + case E820_ACPI:
    + return IORES_DESC_ACPI_TABLES;
    + case E820_NVS:
    + return IORES_DESC_ACPI_NV_STORAGE;
    + case E820_PMEM:
    + return IORES_DESC_PERSISTENT_MEMORY;
    + case E820_PRAM:
    + return IORES_DESC_PERSISTENT_MEMORY_LEGACY;
    + case E820_RESERVED_KERN:
    + case E820_RAM:
    + case E820_UNUSABLE:
    + default:
    + return IORES_DESC_NONE;
    + }
    +}
    +
    static bool do_mark_busy(u32 type, struct resource *res)
    {
    /* this is the legacy bios/dos rom-shadow + mmio region */
    @@ -967,7 +1002,8 @@ void __init e820_reserve_resources(void)
    res->start = e820.map[i].addr;
    res->end = end;

    - res->flags = IORESOURCE_MEM;
    + res->flags = e820_type_to_iomem_type(e820.map[i].type);
    + res->desc = e820_type_to_iores_desc(e820.map[i].type);

    /*
    * don't register the region that could be conflicted with
    diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
    index d2bbe34..a492c30 100644
    --- a/arch/x86/kernel/setup.c
    +++ b/arch/x86/kernel/setup.c
    @@ -152,21 +152,21 @@ static struct resource data_resource = {
    .name = "Kernel data",
    .start = 0,
    .end = 0,
    - .flags = IORESOURCE_BUSY | IORESOURCE_MEM
    + .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
    };

    static struct resource code_resource = {
    .name = "Kernel code",
    .start = 0,
    .end = 0,
    - .flags = IORESOURCE_BUSY | IORESOURCE_MEM
    + .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
    };

    static struct resource bss_resource = {
    .name = "Kernel bss",
    .start = 0,
    .end = 0,
    - .flags = IORESOURCE_BUSY | IORESOURCE_MEM
    + .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
    };



    \
     
     \ /
      Last update: 2016-01-05 20:21    [W:6.822 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site