Hi, i've got a working version of an mmap()'ed I/O, though read-only. A device puts its data on RAM through dma and userspace can read it (and consequentely dispatch it to other devices). Now, I need to write some data on the buffer, before the data is sent out. So, I added PROT_WRITE to the userspace mmap() and <bang>. :) Data went written on the virtual address, by the userspace, and indeed the userspace app can read it correcly, but... the physical memory seems untouched. Briefly, my driver allocate a page of memory this way: buffer = __get_free_pages(GFP_KERNEL | GFP_DMA, get_order(4K)); and fill it with a pattern: for(i=0; i<maxframebuffer; i++) buffer[i] = (char)(maxframebuffer - i); That works fine. (I can inspect the physical memory through a JTAG debugger). Then I define the device_mmap(), nothing more that the usual mmap stub: int mmaptest_mmap(struct file *filp, struct vm_area_struct *vma) { unsigned int buffersize = 0; buffersize = (4K >> PAGE_SHIFT)+1; if ( (vma->vm_end - vma->vm_start)>>PAGE_SHIFT > buffersize ) return -ENOMEM; vma->vm_flags |= VM_IO | VM_RESERVED; vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); if (remap_pfn_range(vma, vma->vm_start, virt_to_phys(buffer) >> PAGE_SHIFT, vma->vm_end - vma->vm_start, vma->vm_page_prot)){ return -EAGAIN; } vma->vm_ops = &simple_remap_vm_ops; simple_vma_open(vma); return 0; } Finally, the userspace program do simply: pointer = mmap(blablabla); //with PROT_WRITE and MAP_PRIVATE contained *pointer = 0xA5; // just a random constant. After this, the userspace pointer contains actually 0xA5, while both the virtual and physical address of kernel side still contain the values initialized before. ( a snapshot of both memories, user side (left) and kernel (right) could be found here: http://imageshack.us/f/18/screenshot1fo.png/ ) Some ideas of what happen here? Seems there is some kind of COW on pages used with mmap()... is there a way to disable it? Thanks in advance. bye! -- - Andrea Gasparini - ----------------------------------------------- -------- https://launchpad.net/~gaspa --------- ----- HomePage: http://gaspa.yattaweb.it ------ _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies