Re: cache maintenance for device memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi syed,

thanks for your response.

On Fri, Dec 4, 2015 at 9:16 AM, sk.syed2 <sk.syed2@xxxxxxxxx> wrote:
>> I have a device with a piece of RAM. That memory is accessible to CPU.
>> I write a driver for that device and it maps device memory directly to
>> userspace processes. This mapping is cacheable. So far so good.
>>
>    How did you map this device memory? Using ioremap? What platform is this?

No, I provide mmap for the device file and then I do remap_pfn_range
using vma->vm_pgoff as an offset into the device memory block.

That's custom R&D ARM-based thing.

>> Now I'd like to flush or invalidate cache on specific parts of that memory.
>> If it was just normal system memory I could use streaming DMA API:
>> dma_map_*/dma_sync_*/dma_unmap_*. But the device memory is not
>> a part of system memory and so there are no struct page for its pages,
>> and thus streaming DMA support functions don't work.
>
> Once you map the io memory, you get VAs for that memory and you should be able
> to use dma_sync APIs.

I've looked at the following function calls:
arm_dma_sync_single_for_cpu
-> dma_cache_maint_page
-> __dma_page_dev_to_cpu
and I see them mapping DMA handle to struct page and using that struct page.
I'm sure that will not work, because as I said the device memory is not covered
by struct page's.

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux