Commit 35d98e93 authored by Toshi Kani's avatar Toshi Kani Committed by Ingo Molnar

arch: Set IORESOURCE_SYSTEM_RAM flag for System RAM

Set IORESOURCE_SYSTEM_RAM in flags of resource ranges with
"System RAM", "Kernel code", "Kernel data", and "Kernel bss".

Note that:

 - IORESOURCE_SYSRAM (i.e. modifier bit) is set in flags when
   IORESOURCE_MEM is already set. IORESOURCE_SYSTEM_RAM is defined
   as (IORESOURCE_MEM|IORESOURCE_SYSRAM).

 - Some archs do not set 'flags' for children nodes, such as
   "Kernel code".  This patch does not change 'flags' in this
   case.
Signed-off-by: default avatarToshi Kani <toshi.kani@hpe.com>
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-arch@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mips@linux-mips.org
Cc: linux-mm <linux-mm@kvack.org>
Cc: linux-parisc@vger.kernel.org
Cc: linux-s390@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: sparclinux@vger.kernel.org
Link: http://lkml.kernel.org/r/1453841853-11383-7-git-send-email-bp@alien8.deSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 03cb525e
...@@ -176,13 +176,13 @@ static struct resource mem_res[] = { ...@@ -176,13 +176,13 @@ static struct resource mem_res[] = {
.name = "Kernel code", .name = "Kernel code",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_MEM .flags = IORESOURCE_SYSTEM_RAM
}, },
{ {
.name = "Kernel data", .name = "Kernel data",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_MEM .flags = IORESOURCE_SYSTEM_RAM
} }
}; };
...@@ -851,7 +851,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) ...@@ -851,7 +851,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc)
res->name = "System RAM"; res->name = "System RAM";
res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region));
res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
request_resource(&iomem_resource, res); request_resource(&iomem_resource, res);
......
...@@ -73,13 +73,13 @@ static struct resource mem_res[] = { ...@@ -73,13 +73,13 @@ static struct resource mem_res[] = {
.name = "Kernel code", .name = "Kernel code",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_MEM .flags = IORESOURCE_SYSTEM_RAM
}, },
{ {
.name = "Kernel data", .name = "Kernel data",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_MEM .flags = IORESOURCE_SYSTEM_RAM
} }
}; };
...@@ -210,7 +210,7 @@ static void __init request_standard_resources(void) ...@@ -210,7 +210,7 @@ static void __init request_standard_resources(void)
res->name = "System RAM"; res->name = "System RAM";
res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region));
res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
request_resource(&iomem_resource, res); request_resource(&iomem_resource, res);
......
...@@ -49,13 +49,13 @@ static struct resource __initdata kernel_data = { ...@@ -49,13 +49,13 @@ static struct resource __initdata kernel_data = {
.name = "Kernel data", .name = "Kernel data",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_SYSTEM_RAM,
}; };
static struct resource __initdata kernel_code = { static struct resource __initdata kernel_code = {
.name = "Kernel code", .name = "Kernel code",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_SYSTEM_RAM,
.sibling = &kernel_data, .sibling = &kernel_data,
}; };
...@@ -134,7 +134,7 @@ add_physical_memory(resource_size_t start, resource_size_t end) ...@@ -134,7 +134,7 @@ add_physical_memory(resource_size_t start, resource_size_t end)
new->start = start; new->start = start;
new->end = end; new->end = end;
new->name = "System RAM"; new->name = "System RAM";
new->flags = IORESOURCE_MEM; new->flags = IORESOURCE_SYSTEM_RAM;
*pprev = new; *pprev = new;
} }
......
...@@ -70,14 +70,14 @@ static struct resource data_resource = { ...@@ -70,14 +70,14 @@ static struct resource data_resource = {
.name = "Kernel data", .name = "Kernel data",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_BUSY | IORESOURCE_MEM .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
}; };
static struct resource code_resource = { static struct resource code_resource = {
.name = "Kernel code", .name = "Kernel code",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_BUSY | IORESOURCE_MEM .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
}; };
unsigned long memory_start; unsigned long memory_start;
......
...@@ -732,21 +732,23 @@ static void __init resource_init(void) ...@@ -732,21 +732,23 @@ static void __init resource_init(void)
end = HIGHMEM_START - 1; end = HIGHMEM_START - 1;
res = alloc_bootmem(sizeof(struct resource)); res = alloc_bootmem(sizeof(struct resource));
res->start = start;
res->end = end;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
switch (boot_mem_map.map[i].type) { switch (boot_mem_map.map[i].type) {
case BOOT_MEM_RAM: case BOOT_MEM_RAM:
case BOOT_MEM_INIT_RAM: case BOOT_MEM_INIT_RAM:
case BOOT_MEM_ROM_DATA: case BOOT_MEM_ROM_DATA:
res->name = "System RAM"; res->name = "System RAM";
res->flags |= IORESOURCE_SYSRAM;
break; break;
case BOOT_MEM_RESERVED: case BOOT_MEM_RESERVED:
default: default:
res->name = "reserved"; res->name = "reserved";
} }
res->start = start;
res->end = end;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
request_resource(&iomem_resource, res); request_resource(&iomem_resource, res);
/* /*
......
...@@ -55,12 +55,12 @@ signed char pfnnid_map[PFNNID_MAP_MAX] __read_mostly; ...@@ -55,12 +55,12 @@ signed char pfnnid_map[PFNNID_MAP_MAX] __read_mostly;
static struct resource data_resource = { static struct resource data_resource = {
.name = "Kernel data", .name = "Kernel data",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM, .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
}; };
static struct resource code_resource = { static struct resource code_resource = {
.name = "Kernel code", .name = "Kernel code",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM, .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
}; };
static struct resource pdcdata_resource = { static struct resource pdcdata_resource = {
...@@ -201,7 +201,7 @@ static void __init setup_bootmem(void) ...@@ -201,7 +201,7 @@ static void __init setup_bootmem(void)
res->name = "System RAM"; res->name = "System RAM";
res->start = pmem_ranges[i].start_pfn << PAGE_SHIFT; res->start = pmem_ranges[i].start_pfn << PAGE_SHIFT;
res->end = res->start + (pmem_ranges[i].pages << PAGE_SHIFT)-1; res->end = res->start + (pmem_ranges[i].pages << PAGE_SHIFT)-1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
request_resource(&iomem_resource, res); request_resource(&iomem_resource, res);
} }
......
...@@ -541,7 +541,7 @@ static int __init add_system_ram_resources(void) ...@@ -541,7 +541,7 @@ static int __init add_system_ram_resources(void)
res->name = "System RAM"; res->name = "System RAM";
res->start = base; res->start = base;
res->end = base + size - 1; res->end = base + size - 1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
WARN_ON(request_resource(&iomem_resource, res) < 0); WARN_ON(request_resource(&iomem_resource, res) < 0);
} }
} }
......
...@@ -374,17 +374,17 @@ static void __init setup_lowcore(void) ...@@ -374,17 +374,17 @@ static void __init setup_lowcore(void)
static struct resource code_resource = { static struct resource code_resource = {
.name = "Kernel code", .name = "Kernel code",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM, .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
}; };
static struct resource data_resource = { static struct resource data_resource = {
.name = "Kernel data", .name = "Kernel data",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM, .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
}; };
static struct resource bss_resource = { static struct resource bss_resource = {
.name = "Kernel bss", .name = "Kernel bss",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM, .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
}; };
static struct resource __initdata *standard_resources[] = { static struct resource __initdata *standard_resources[] = {
...@@ -408,7 +408,7 @@ static void __init setup_resources(void) ...@@ -408,7 +408,7 @@ static void __init setup_resources(void)
for_each_memblock(memory, reg) { for_each_memblock(memory, reg) {
res = alloc_bootmem_low(sizeof(*res)); res = alloc_bootmem_low(sizeof(*res));
res->flags = IORESOURCE_BUSY | IORESOURCE_MEM; res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
res->name = "System RAM"; res->name = "System RAM";
res->start = reg->base; res->start = reg->base;
......
...@@ -101,7 +101,7 @@ static void __init resource_init(void) ...@@ -101,7 +101,7 @@ static void __init resource_init(void)
res->name = "System RAM"; res->name = "System RAM";
res->start = MEMORY_START; res->start = MEMORY_START;
res->end = MEMORY_START + MEMORY_SIZE - 1; res->end = MEMORY_START + MEMORY_SIZE - 1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
request_resource(&iomem_resource, res); request_resource(&iomem_resource, res);
request_resource(res, &code_resource); request_resource(res, &code_resource);
......
...@@ -78,17 +78,17 @@ static char __initdata command_line[COMMAND_LINE_SIZE] = { 0, }; ...@@ -78,17 +78,17 @@ static char __initdata command_line[COMMAND_LINE_SIZE] = { 0, };
static struct resource code_resource = { static struct resource code_resource = {
.name = "Kernel code", .name = "Kernel code",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM, .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
}; };
static struct resource data_resource = { static struct resource data_resource = {
.name = "Kernel data", .name = "Kernel data",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM, .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
}; };
static struct resource bss_resource = { static struct resource bss_resource = {
.name = "Kernel bss", .name = "Kernel bss",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM, .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
}; };
unsigned long memory_start; unsigned long memory_start;
...@@ -202,7 +202,7 @@ void __init __add_active_range(unsigned int nid, unsigned long start_pfn, ...@@ -202,7 +202,7 @@ void __init __add_active_range(unsigned int nid, unsigned long start_pfn,
res->name = "System RAM"; res->name = "System RAM";
res->start = start; res->start = start;
res->end = end - 1; res->end = end - 1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
if (request_resource(&iomem_resource, res)) { if (request_resource(&iomem_resource, res)) {
pr_err("unable to request memory_resource 0x%lx 0x%lx\n", pr_err("unable to request memory_resource 0x%lx 0x%lx\n",
......
...@@ -2863,17 +2863,17 @@ void hugetlb_setup(struct pt_regs *regs) ...@@ -2863,17 +2863,17 @@ void hugetlb_setup(struct pt_regs *regs)
static struct resource code_resource = { static struct resource code_resource = {
.name = "Kernel code", .name = "Kernel code",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
}; };
static struct resource data_resource = { static struct resource data_resource = {
.name = "Kernel data", .name = "Kernel data",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
}; };
static struct resource bss_resource = { static struct resource bss_resource = {
.name = "Kernel bss", .name = "Kernel bss",
.flags = IORESOURCE_BUSY | IORESOURCE_MEM .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
}; };
static inline resource_size_t compute_kern_paddr(void *addr) static inline resource_size_t compute_kern_paddr(void *addr)
...@@ -2909,7 +2909,7 @@ static int __init report_memory(void) ...@@ -2909,7 +2909,7 @@ static int __init report_memory(void)
res->name = "System RAM"; res->name = "System RAM";
res->start = pavail[i].phys_addr; res->start = pavail[i].phys_addr;
res->end = pavail[i].phys_addr + pavail[i].reg_size - 1; res->end = pavail[i].phys_addr + pavail[i].reg_size - 1;
res->flags = IORESOURCE_BUSY | IORESOURCE_MEM; res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
if (insert_resource(&iomem_resource, res) < 0) { if (insert_resource(&iomem_resource, res) < 0) {
pr_warn("Resource insertion failed.\n"); pr_warn("Resource insertion failed.\n");
......
...@@ -1632,14 +1632,14 @@ static struct resource data_resource = { ...@@ -1632,14 +1632,14 @@ static struct resource data_resource = {
.name = "Kernel data", .name = "Kernel data",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_BUSY | IORESOURCE_MEM .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
}; };
static struct resource code_resource = { static struct resource code_resource = {
.name = "Kernel code", .name = "Kernel code",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_BUSY | IORESOURCE_MEM .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
}; };
/* /*
...@@ -1673,10 +1673,15 @@ insert_ram_resource(u64 start_pfn, u64 end_pfn, bool reserved) ...@@ -1673,10 +1673,15 @@ insert_ram_resource(u64 start_pfn, u64 end_pfn, bool reserved)
kzalloc(sizeof(struct resource), GFP_ATOMIC); kzalloc(sizeof(struct resource), GFP_ATOMIC);
if (!res) if (!res)
return NULL; return NULL;
res->name = reserved ? "Reserved" : "System RAM";
res->start = start_pfn << PAGE_SHIFT; res->start = start_pfn << PAGE_SHIFT;
res->end = (end_pfn << PAGE_SHIFT) - 1; res->end = (end_pfn << PAGE_SHIFT) - 1;
res->flags = IORESOURCE_BUSY | IORESOURCE_MEM; res->flags = IORESOURCE_BUSY | IORESOURCE_MEM;
if (reserved) {
res->name = "Reserved";
} else {
res->name = "System RAM";
res->flags |= IORESOURCE_SYSRAM;
}
if (insert_resource(&iomem_resource, res)) { if (insert_resource(&iomem_resource, res)) {
kfree(res); kfree(res);
return NULL; return NULL;
......
...@@ -72,13 +72,13 @@ static struct resource mem_res[] = { ...@@ -72,13 +72,13 @@ static struct resource mem_res[] = {
.name = "Kernel code", .name = "Kernel code",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_MEM .flags = IORESOURCE_SYSTEM_RAM
}, },
{ {
.name = "Kernel data", .name = "Kernel data",
.start = 0, .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_MEM .flags = IORESOURCE_SYSTEM_RAM
} }
}; };
...@@ -211,7 +211,7 @@ request_standard_resources(struct meminfo *mi) ...@@ -211,7 +211,7 @@ request_standard_resources(struct meminfo *mi)
res->name = "System RAM"; res->name = "System RAM";
res->start = mi->bank[i].start; res->start = mi->bank[i].start;
res->end = mi->bank[i].start + mi->bank[i].size - 1; res->end = mi->bank[i].start + mi->bank[i].size - 1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
request_resource(&iomem_resource, res); request_resource(&iomem_resource, res);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment