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