[PATCH] ARM: use memblock memory regions for "System RAM" I/O resources
Dima Zavin
dima at android.com
Wed Jan 12 19:10:24 EST 2011
Thanks for the review.
--Dima
On Wed, Jan 12, 2011 at 4:08 PM, Dima Zavin <dima at android.com> wrote:
> Do not use memory bank info to request the "system ram" resources as
> they do not track holes created by memblock_remove inside
> machine's reserve callback. If the removed memory is passed as
> platform_device's ioresource, then drivers that call
> request_mem_region would fail due to a conflict with the incorrectly
> configured system ram resource.
>
> Instead, iterate through the regions of memblock.memory and add
> those as "System RAM" resources.
>
> Signed-off-by: Dima Zavin <dima at android.com>
> ---
> arch/arm/kernel/setup.c | 16 ++++++----------
> 1 files changed, 6 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
> index 336f14e..470efbc 100644
> --- a/arch/arm/kernel/setup.c
> +++ b/arch/arm/kernel/setup.c
> @@ -517,25 +517,21 @@ setup_ramdisk(int doload, int prompt, int image_start, unsigned int rd_sz)
> #endif
> }
>
> -static void __init
> -request_standard_resources(struct meminfo *mi, struct machine_desc *mdesc)
> +static void __init request_standard_resources(struct machine_desc *mdesc)
> {
> + struct memblock_region *region;
> struct resource *res;
> - int i;
>
> kernel_code.start = virt_to_phys(_text);
> kernel_code.end = virt_to_phys(_etext - 1);
> kernel_data.start = virt_to_phys(_sdata);
> kernel_data.end = virt_to_phys(_end - 1);
>
> - for (i = 0; i < mi->nr_banks; i++) {
> - if (mi->bank[i].size == 0)
> - continue;
> -
> + for_each_memblock(memory, region) {
> res = alloc_bootmem_low(sizeof(*res));
> res->name = "System RAM";
> - res->start = mi->bank[i].start;
> - res->end = mi->bank[i].start + mi->bank[i].size - 1;
> + 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;
>
> request_resource(&iomem_resource, res);
> @@ -857,7 +853,7 @@ void __init setup_arch(char **cmdline_p)
> arm_memblock_init(&meminfo, mdesc);
>
> paging_init(mdesc);
> - request_standard_resources(&meminfo, mdesc);
> + request_standard_resources(mdesc);
>
> #ifdef CONFIG_SMP
> if (is_smp())
> --
> 1.7.3.1
>
>
More information about the linux-arm-kernel
mailing list