usage of dma_common_mmap
Malte Vesper
malte.vesper at postgrad.manchester.ac.uk
Sun Mar 29 00:28:09 EDT 2015
Hello,
I am trying to use dma_mmap_attrs . However I keep getting the following
error:
mmap:6420 map pfn RAM range req uncached-minus for [mem
0xfd0000000-0xfd0000fff], got write-back
Assuming that dma_common_map is used
(http://lxr.free-electrons.com/source/drivers/base/dma-mapping.c#L246) I
tracked the error source to be comming from: remap_pfn_range
After struding the codeflow I think that this macro is the culprit:
12 #define pgprot_noncached(prot) \
13 ((boot_cpu_data.x86 >
3) \
14 ? (__pgprot(pgprot_val(prot)
| \
15 cachemode2protval(_PAGE_CACHE_MODE_UC_MINUS))) \
16 : (prot))
since the "got write-back" is calculated from the memory address I
assume I can not change that bit.
Could anyone explain to me, why the page protection depends on
boot_cpu_data?
Googling turned up further hints
http://comments.gmane.org/gmane.linux.kernel.mm/125059. Is this a Bug or
am I missing something?
How do I correctly use dma_mmap_attrs? Currently I try:
mmap function:
return dma_mmap_attrs(&pcidev->dev, vma, buffer->memoryAddress,
buffer->dmaAddress, BUF_SIZE, 0);
testfile:
char* fpath = "/proc/myDevice";
uint64_t* buffer;
int filepointer = open(fpath, O_RDWR);
if(filepointer < 0) {
printf("Could not open %s.\n", fpath);
return -1;
}
buffer = (uint64_t*) mmap(0, 4096, PROT_READ | PROT_WRITE,
MAP_PRIVATE, filepointer, 0);
Thanks for any help,
Malte
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20150329/ac2ed550/attachment.html
More information about the Kernelnewbies
mailing list