mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
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: Toshi Kani <toshi.kani@hpe.com> Signed-off-by: Borislav 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.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
03cb525eb2
commit
35d98e93fe
|
@ -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)
|
||||||
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[] = {
|
||||||
.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)
|
||||||
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 = {
|
||||||
.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)
|
||||||
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 = {
|
||||||
.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)
|
||||||
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;
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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, };
|
||||||
|
|
||||||
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,
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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 = {
|
||||||
.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)
|
||||||
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[] = {
|
||||||
.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)
|
||||||
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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue