mmap() on 2.6

From: Lance Spaulding
Date: Wed Dec 01 2004 - 23:33:24 EST


I'm trying to port one of my drivers from 2.4 to 2.6 and am having problems getting mmap() to work. The driver works fine in 2.4 but hangs on 2.6 (using the same machine).

What I'm doing is setting aside 40 Meg of memory so I can use a 32 meg buffer for DMAs from a custom ASIC. I need to be able to acccess this memory both from kernel and user space.

To do this, I do the following steps:

- In grub.conf, I use "mem=472m"

- In my driver, I do an ioremap(0x1d800000, 0x02000000) to get a kernel pointer to the memory. This part works fine.

- In myapp, I call mmap(0, 0x02000000, (PROT_READ | PROT_WRITE), (MAP_SHARED | MAP_LOCKED), fd, (uint32)0x1d800000)

- In my driver's mmap() function, I do the following:
vma->vm_flags|=(VM_RESERVED | VM_IO | VM_LOCKED | VM_SHM);
remap_page_range(vma, vma->vm_start, offset, vma->vm_end-vma->vm_start, vma->vm_page_prot)
which ends up being:
remap_page_range(0xDC3C7078, 0xB7257000, 0x1D800000, 0xC00000, 0x27)

This remap call works fine and my driver then tries to return 0 but at that point, the thread appears completely locked up. I'm never getting control back to the calling app. I can switch virtual consoles and run other commands just fine.

Can anyone tell me what I'm doing wrong and what I need to change for 2.6? This part of the driver has always worked fine on 2.4.

Thanks in advance,
Lance
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/