You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Merge branch 'core-resources-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull ram resource handling changes from Ingo Molnar: "Core kernel resource handling changes to support NVDIMM error injection. This tree introduces a new I/O resource type, IORESOURCE_SYSTEM_RAM, for System RAM while keeping the current IORESOURCE_MEM type bit set for all memory-mapped ranges (including System RAM) for backward compatibility. With this resource flag it no longer takes a strcmp() loop through the resource tree to find "System RAM" resources. The new resource type is then used to extend ACPI/APEI error injection facility to also support NVDIMM" * 'core-resources-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: ACPI/EINJ: Allow memory error injection to NVDIMM resource: Kill walk_iomem_res() x86/kexec: Remove walk_iomem_res() call with GART type x86, kexec, nvdimm: Use walk_iomem_res_desc() for iomem search resource: Add walk_iomem_res_desc() memremap: Change region_intersects() to take @flags and @desc arm/samsung: Change s3c_pm_run_res() to use System RAM type resource: Change walk_system_ram() to use System RAM type drivers: Initialize resource entry to zero xen, mm: Set IORESOURCE_SYSTEM_RAM to System RAM kexec: Set IORESOURCE_SYSTEM_RAM for System RAM arch: Set IORESOURCE_SYSTEM_RAM flag for System RAM ia64: Set System RAM type and descriptor x86/e820: Set System RAM type and descriptor resource: Add I/O resource descriptor resource: Handle resource flags properly resource: Add System RAM resource type
This commit is contained in:
@@ -176,13 +176,13 @@ static struct resource mem_res[] = {
|
||||
.name = "Kernel code",
|
||||
.start = 0,
|
||||
.end = 0,
|
||||
.flags = IORESOURCE_MEM
|
||||
.flags = IORESOURCE_SYSTEM_RAM
|
||||
},
|
||||
{
|
||||
.name = "Kernel data",
|
||||
.start = 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->start = __pfn_to_phys(memblock_region_memory_base_pfn(region));
|
||||
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);
|
||||
|
||||
|
||||
@@ -53,8 +53,8 @@ static void s3c_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg)
|
||||
if (ptr->child != NULL)
|
||||
s3c_pm_run_res(ptr->child, fn, arg);
|
||||
|
||||
if ((ptr->flags & IORESOURCE_MEM) &&
|
||||
strcmp(ptr->name, "System RAM") == 0) {
|
||||
if ((ptr->flags & IORESOURCE_SYSTEM_RAM)
|
||||
== IORESOURCE_SYSTEM_RAM) {
|
||||
S3C_PMDBG("Found system RAM at %08lx..%08lx\n",
|
||||
(unsigned long)ptr->start,
|
||||
(unsigned long)ptr->end);
|
||||
|
||||
@@ -73,13 +73,13 @@ static struct resource mem_res[] = {
|
||||
.name = "Kernel code",
|
||||
.start = 0,
|
||||
.end = 0,
|
||||
.flags = IORESOURCE_MEM
|
||||
.flags = IORESOURCE_SYSTEM_RAM
|
||||
},
|
||||
{
|
||||
.name = "Kernel data",
|
||||
.start = 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->start = __pfn_to_phys(memblock_region_memory_base_pfn(region));
|
||||
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);
|
||||
|
||||
|
||||
@@ -49,13 +49,13 @@ static struct resource __initdata kernel_data = {
|
||||
.name = "Kernel data",
|
||||
.start = 0,
|
||||
.end = 0,
|
||||
.flags = IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
static struct resource __initdata kernel_code = {
|
||||
.name = "Kernel code",
|
||||
.start = 0,
|
||||
.end = 0,
|
||||
.flags = IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_SYSTEM_RAM,
|
||||
.sibling = &kernel_data,
|
||||
};
|
||||
|
||||
@@ -134,7 +134,7 @@ add_physical_memory(resource_size_t start, resource_size_t end)
|
||||
new->start = start;
|
||||
new->end = end;
|
||||
new->name = "System RAM";
|
||||
new->flags = IORESOURCE_MEM;
|
||||
new->flags = IORESOURCE_SYSTEM_RAM;
|
||||
|
||||
*pprev = new;
|
||||
}
|
||||
|
||||
@@ -1178,7 +1178,7 @@ efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
efi_memory_desc_t *md;
|
||||
u64 efi_desc_size;
|
||||
char *name;
|
||||
unsigned long flags;
|
||||
unsigned long flags, desc;
|
||||
|
||||
efi_map_start = __va(ia64_boot_param->efi_memmap);
|
||||
efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size;
|
||||
@@ -1193,6 +1193,8 @@ efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
continue;
|
||||
|
||||
flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
desc = IORES_DESC_NONE;
|
||||
|
||||
switch (md->type) {
|
||||
|
||||
case EFI_MEMORY_MAPPED_IO:
|
||||
@@ -1207,14 +1209,17 @@ efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
if (md->attribute & EFI_MEMORY_WP) {
|
||||
name = "System ROM";
|
||||
flags |= IORESOURCE_READONLY;
|
||||
} else if (md->attribute == EFI_MEMORY_UC)
|
||||
} else if (md->attribute == EFI_MEMORY_UC) {
|
||||
name = "Uncached RAM";
|
||||
else
|
||||
} else {
|
||||
name = "System RAM";
|
||||
flags |= IORESOURCE_SYSRAM;
|
||||
}
|
||||
break;
|
||||
|
||||
case EFI_ACPI_MEMORY_NVS:
|
||||
name = "ACPI Non-volatile Storage";
|
||||
desc = IORES_DESC_ACPI_NV_STORAGE;
|
||||
break;
|
||||
|
||||
case EFI_UNUSABLE_MEMORY:
|
||||
@@ -1224,6 +1229,7 @@ efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
|
||||
case EFI_PERSISTENT_MEMORY:
|
||||
name = "Persistent Memory";
|
||||
desc = IORES_DESC_PERSISTENT_MEMORY;
|
||||
break;
|
||||
|
||||
case EFI_RESERVED_TYPE:
|
||||
@@ -1246,6 +1252,7 @@ efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
res->start = md->phys_addr;
|
||||
res->end = md->phys_addr + efi_md_size(md) - 1;
|
||||
res->flags = flags;
|
||||
res->desc = desc;
|
||||
|
||||
if (insert_resource(&iomem_resource, res) < 0)
|
||||
kfree(res);
|
||||
|
||||
@@ -80,17 +80,17 @@ unsigned long vga_console_membase;
|
||||
|
||||
static struct resource data_resource = {
|
||||
.name = "Kernel data",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
|
||||
};
|
||||
|
||||
static struct resource code_resource = {
|
||||
.name = "Kernel code",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
|
||||
};
|
||||
|
||||
static struct resource bss_resource = {
|
||||
.name = "Kernel bss",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
|
||||
};
|
||||
|
||||
unsigned long ia64_max_cacheline_size;
|
||||
|
||||
@@ -70,14 +70,14 @@ 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
|
||||
};
|
||||
|
||||
unsigned long memory_start;
|
||||
|
||||
@@ -732,21 +732,23 @@ static void __init resource_init(void)
|
||||
end = HIGHMEM_START - 1;
|
||||
|
||||
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) {
|
||||
case BOOT_MEM_RAM:
|
||||
case BOOT_MEM_INIT_RAM:
|
||||
case BOOT_MEM_ROM_DATA:
|
||||
res->name = "System RAM";
|
||||
res->flags |= IORESOURCE_SYSRAM;
|
||||
break;
|
||||
case BOOT_MEM_RESERVED:
|
||||
default:
|
||||
res->name = "reserved";
|
||||
}
|
||||
|
||||
res->start = start;
|
||||
res->end = end;
|
||||
|
||||
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
request_resource(&iomem_resource, res);
|
||||
|
||||
/*
|
||||
|
||||
@@ -55,12 +55,12 @@ signed char pfnnid_map[PFNNID_MAP_MAX] __read_mostly;
|
||||
|
||||
static struct resource data_resource = {
|
||||
.name = "Kernel data",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
|
||||
static struct resource code_resource = {
|
||||
.name = "Kernel code",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
|
||||
static struct resource pdcdata_resource = {
|
||||
@@ -201,7 +201,7 @@ static void __init setup_bootmem(void)
|
||||
res->name = "System RAM";
|
||||
res->start = pmem_ranges[i].start_pfn << PAGE_SHIFT;
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -541,7 +541,7 @@ static int __init add_system_ram_resources(void)
|
||||
res->name = "System RAM";
|
||||
res->start = base;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -374,17 +374,17 @@ static void __init setup_lowcore(void)
|
||||
|
||||
static struct resource code_resource = {
|
||||
.name = "Kernel code",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
|
||||
static struct resource data_resource = {
|
||||
.name = "Kernel data",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
|
||||
static struct resource bss_resource = {
|
||||
.name = "Kernel bss",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
|
||||
static struct resource __initdata *standard_resources[] = {
|
||||
@@ -408,7 +408,7 @@ static void __init setup_resources(void)
|
||||
|
||||
for_each_memblock(memory, reg) {
|
||||
res = alloc_bootmem_low(sizeof(*res));
|
||||
res->flags = IORESOURCE_BUSY | IORESOURCE_MEM;
|
||||
res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
|
||||
|
||||
res->name = "System RAM";
|
||||
res->start = reg->base;
|
||||
|
||||
@@ -101,7 +101,7 @@ static void __init resource_init(void)
|
||||
res->name = "System RAM";
|
||||
res->start = MEMORY_START;
|
||||
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(res, &code_resource);
|
||||
|
||||
@@ -78,17 +78,17 @@ static char __initdata command_line[COMMAND_LINE_SIZE] = { 0, };
|
||||
|
||||
static struct resource code_resource = {
|
||||
.name = "Kernel code",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
|
||||
static struct resource data_resource = {
|
||||
.name = "Kernel data",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
|
||||
static struct resource bss_resource = {
|
||||
.name = "Kernel bss",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM,
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
|
||||
};
|
||||
|
||||
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->start = start;
|
||||
res->end = end - 1;
|
||||
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
|
||||
|
||||
if (request_resource(&iomem_resource, res)) {
|
||||
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 = {
|
||||
.name = "Kernel code",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
|
||||
};
|
||||
|
||||
static struct resource data_resource = {
|
||||
.name = "Kernel data",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
|
||||
};
|
||||
|
||||
static struct resource bss_resource = {
|
||||
.name = "Kernel bss",
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||
.flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
|
||||
};
|
||||
|
||||
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->start = pavail[i].phys_addr;
|
||||
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) {
|
||||
pr_warn("Resource insertion failed.\n");
|
||||
|
||||
@@ -1632,14 +1632,14 @@ 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
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1673,10 +1673,15 @@ insert_ram_resource(u64 start_pfn, u64 end_pfn, bool reserved)
|
||||
kzalloc(sizeof(struct resource), GFP_ATOMIC);
|
||||
if (!res)
|
||||
return NULL;
|
||||
res->name = reserved ? "Reserved" : "System RAM";
|
||||
res->start = start_pfn << PAGE_SHIFT;
|
||||
res->end = (end_pfn << PAGE_SHIFT) - 1;
|
||||
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)) {
|
||||
kfree(res);
|
||||
return NULL;
|
||||
|
||||
@@ -72,13 +72,13 @@ static struct resource mem_res[] = {
|
||||
.name = "Kernel code",
|
||||
.start = 0,
|
||||
.end = 0,
|
||||
.flags = IORESOURCE_MEM
|
||||
.flags = IORESOURCE_SYSTEM_RAM
|
||||
},
|
||||
{
|
||||
.name = "Kernel data",
|
||||
.start = 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->start = mi->bank[i].start;
|
||||
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);
|
||||
|
||||
|
||||
@@ -57,10 +57,9 @@ struct crash_elf_data {
|
||||
struct kimage *image;
|
||||
/*
|
||||
* Total number of ram ranges we have after various adjustments for
|
||||
* GART, crash reserved region etc.
|
||||
* crash reserved region, etc.
|
||||
*/
|
||||
unsigned int max_nr_ranges;
|
||||
unsigned long gart_start, gart_end;
|
||||
|
||||
/* Pointer to elf header */
|
||||
void *ehdr;
|
||||
@@ -201,17 +200,6 @@ static int get_nr_ram_ranges_callback(u64 start, u64 end, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_gart_ranges_callback(u64 start, u64 end, void *arg)
|
||||
{
|
||||
struct crash_elf_data *ced = arg;
|
||||
|
||||
ced->gart_start = start;
|
||||
ced->gart_end = end;
|
||||
|
||||
/* Not expecting more than 1 gart aperture */
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* Gather all the required information to prepare elf headers for ram regions */
|
||||
static void fill_up_crash_elf_data(struct crash_elf_data *ced,
|
||||
@@ -226,22 +214,6 @@ static void fill_up_crash_elf_data(struct crash_elf_data *ced,
|
||||
|
||||
ced->max_nr_ranges = nr_ranges;
|
||||
|
||||
/*
|
||||
* We don't create ELF headers for GART aperture as an attempt
|
||||
* to dump this memory in second kernel leads to hang/crash.
|
||||
* If gart aperture is present, one needs to exclude that region
|
||||
* and that could lead to need of extra phdr.
|
||||
*/
|
||||
walk_iomem_res("GART", IORESOURCE_MEM, 0, -1,
|
||||
ced, get_gart_ranges_callback);
|
||||
|
||||
/*
|
||||
* If we have gart region, excluding that could potentially split
|
||||
* a memory range, resulting in extra header. Account for that.
|
||||
*/
|
||||
if (ced->gart_end)
|
||||
ced->max_nr_ranges++;
|
||||
|
||||
/* Exclusion of crash region could split memory ranges */
|
||||
ced->max_nr_ranges++;
|
||||
|
||||
@@ -350,13 +322,6 @@ static int elf_header_exclude_ranges(struct crash_elf_data *ced,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Exclude GART region */
|
||||
if (ced->gart_end) {
|
||||
ret = exclude_mem_range(cmem, ced->gart_start, ced->gart_end);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -599,12 +564,12 @@ int crash_setup_memmap_entries(struct kimage *image, struct boot_params *params)
|
||||
/* Add ACPI tables */
|
||||
cmd.type = E820_ACPI;
|
||||
flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
walk_iomem_res("ACPI Tables", flags, 0, -1, &cmd,
|
||||
walk_iomem_res_desc(IORES_DESC_ACPI_TABLES, flags, 0, -1, &cmd,
|
||||
memmap_entry_callback);
|
||||
|
||||
/* Add ACPI Non-volatile Storage */
|
||||
cmd.type = E820_NVS;
|
||||
walk_iomem_res("ACPI Non-volatile Storage", flags, 0, -1, &cmd,
|
||||
walk_iomem_res_desc(IORES_DESC_ACPI_NV_STORAGE, flags, 0, -1, &cmd,
|
||||
memmap_entry_callback);
|
||||
|
||||
/* Add crashk_low_res region */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -13,11 +13,11 @@ static int found(u64 start, u64 end, void *data)
|
||||
|
||||
static __init int register_e820_pmem(void)
|
||||
{
|
||||
char *pmem = "Persistent Memory (legacy)";
|
||||
struct platform_device *pdev;
|
||||
int rc;
|
||||
|
||||
rc = walk_iomem_res(pmem, IORESOURCE_MEM, 0, -1, NULL, found);
|
||||
rc = walk_iomem_res_desc(IORES_DESC_PERSISTENT_MEMORY_LEGACY,
|
||||
IORESOURCE_MEM, 0, -1, NULL, found);
|
||||
if (rc <= 0)
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user