Mapping IO memory read-write

Kenneth Adam Miller kennethadammiller at gmail.com
Wed Jan 13 09:34:17 EST 2016


In this case, have you tried reading and writing to the memory segment
being mmap'd from userland?

Here's an example mmap'ing device driver if you need to see that:
https://github.com/claudioscordino/mmap_alloc

On Tue, Jan 12, 2016 at 6:10 PM, Jethro Beekman <kernel at jbeekman.nl> wrote:

> I'm writing a device driver for a memory-mapped device on x86-64. I'm
> mapping
> the device in the kernel using ioremap_cache(). My file_operations.mmap
> function
> is as follows:
>
> static int dev_mmap(struct file *filep, struct vm_area_struct *vma) {
>         vma->vm_page_prot.pgprot|=_PAGE_BIT_RW;
>         return vm_iomap_memory(vma,START,LEN);
> }
>
> The user process calls mmap(..,PROT_READ|PROT_WRITE|PROT_EXEC,..). The
> mapping
> in /proc/[pid]/maps shows the write bit. However, when looking at the
> actual
> page table entry does not have the RW bit set. For example:
>
> virtual address = 0000_0001_8000_0000
> cr3 = 0000_0000_700a_e000
> phys:0000_0000_700a_e000 = 0000_0000_7e05_5067 (P|RW|US|A|D)
> phys:0000_0000_7e05_5030 = 0000_0001_66e2_9067 (P|RW|US|A|D)
> phys:0000_0001_66e2_9000 = 0000_0001_69db_3067 (P|RW|US|A|D)
> phys:0000_0001_69db_3000 = 0000_0000_8020_0225 (P|US|A|SOFTW1)
>
> Am I doing something wrong?
>
> Jethro
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20160113/5cec8b47/attachment.html 


More information about the Kernelnewbies mailing list