Hi,

Running with latest linux-omap kernel on OMAP3 SDP board, I have problem
with iounmap(). It looks like iounmap() does not properly free large
areas. Below is a test which fails for me in 6-7 loops.

OMAP spesific ioremap code doesn't do much, so I think it's somewhere in
generic ARM code. I looked at the ioremap code and for larger areas the
code uses area sections, and I believe the bug is somewhere there. 

Does this work on other processors?

 Tomi



#include <linux/module.h>
#include <linux/io.h>

static int test_init(void)
{
        const unsigned long paddr = 0x70000000;
        const unsigned long size = 2048 * 2048 * 4;
        void *vaddr;
        int i;

        for (i = 0; i < 200; ++i) {
                vaddr = ioremap(paddr, size);

                if (!vaddr) {
                        printk("couldn't ioremap\n");
                        break;
                }

                printk("ioremapped to %p\n", vaddr);

                iounmap(vaddr);
        }

        return 0;
}

static void test_exit(void) { }

module_init(test_init);
module_exit(test_exit);



--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to