Messages in this thread Patch in this message | | | Date | Sun, 10 Oct 2010 04:52:36 +0300 | Subject | Re: [PATCH] ARM: allow, but warn, when issuing ioremap() on RAM | From | Felipe Contreras <> |
| |
On Sat, Oct 9, 2010 at 12:21 PM, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > static unsigned long reserve_mem(struct meminfo *mi, unsigned long size) > { > unsigned long addr = ~0; > int i; > > for (i = mi->nr_banks - 1; i >= 0; i--) > if (mi->bank[i].size >= size) { > mi->bank[i].size -= size; > addr = mi->bank[i].start + mi->bank[i].size; > break; > } > > return addr; > } > > static void __init my_fixup(struct machine_desc *desc, struct tag *tags, > char **cmdline, struct meminfo *mi) > { > omapfb_buffer_phys = reserve_mem(mi, 32*1048576); > if (omapfb_buffer_phys == ~0) > pr_warn("Unable to allocate omapfb buffer\n"); > } > > Then later: > > omapfb_buffer = ioremap(omapfb_buffer_phys, 32*1048576); > > That's a damned simple and direct implementation of exactly what I > described, and results in something which is much more architecturally > correct than what's going on today.
I tried this, it doesn't work.
At the time 'fixup' is called, 'meminfo' is empty; the tags haven't been parsed. So my solution is to move the memblock_add() after 'reserve', and pass 'meminfo' as an argument:
--- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -272,8 +272,6 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc) int i;
memblock_init(); - for (i = 0; i < mi->nr_banks; i++) - memblock_add(mi->bank[i].start, mi->bank[i].size);
/* Register the kernel text, kernel data and initrd with memblock. */ #ifdef CONFIG_XIP_KERNEL @@ -295,7 +293,10 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)
/* reserve any platform specific memblock areas */ if (mdesc->reserve) - mdesc->reserve(); + mdesc->reserve(mi); + + for (i = 0; i < mi->nr_banks; i++) + memblock_add(mi->bank[i].start, mi->bank[i].size);
memblock_analyze(); memblock_dump_all(); -- Felipe Contreras -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |