summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b2f932f)
raw | patch | inline | side by side (parent: b2f932f)
author | Sam Nelson <sam.nelson@ti.com> | |
Thu, 15 Feb 2018 22:07:06 +0000 (17:07 -0500) | ||
committer | Sam Nelson <sam.nelson@ti.com> | |
Thu, 15 Feb 2018 22:07:06 +0000 (17:07 -0500) |
Fixes one issue related to falling through for direct mapped memory.
Signed-off-by: Sam Nelson <sam.nelson@ti.com>
Signed-off-by: Sam Nelson <sam.nelson@ti.com>
src/cmem/module/cmemk.c | patch | blob | history |
index e1efbffff2a23791a256591ce64e0b7bcc6049b5..53444a7139e15d7539e9fe91572cfee3a14975b6 100644 (file)
--- a/src/cmem/module/cmemk.c
+++ b/src/cmem/module/cmemk.c
physp = virt_to_phys(virtp);
__D("get_phys: virt_to_phys translated direct-mapped %#lx to %#llx\n",
virt, (unsigned long long)physp);
+ return(physp);
}
+
down_read(¤t->mm->mmap_sem);
vma = find_vma(mm, virt);
- up_read(¤t->mm->mmap_sem);
/* this will catch, kernel-allocated, mmaped-to-usermode addresses */
if (vma &&
(vma->vm_flags & VM_IO) &&
(vma->vm_pgoff)) {
- physp = ((unsigned long long)vma->vm_pgoff << PAGE_SHIFT) +
+ physp = (((unsigned long long)vma->vm_pgoff) << PAGE_SHIFT) +
(virt - vma->vm_start);
+ up_read(¤t->mm->mmap_sem);
__D("get_phys: find_vma translated user %#lx to %#llx\n", virt,
(unsigned long long)physp);
+ return(physp);
}
/* otherwise, use get_user_pages() for general userland pages */
- else {
+ {
int res, nr_pages = 1;
struct page *pages;
- down_read(¤t->mm->mmap_sem);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))
res = get_user_pages_remote(current, current->mm, virt, nr_pages,
FOLL_WRITE, &pages, NULL, NULL);
__D("FREE%s: translated 0x%p user virtual to %#llx physical\n",
cmd & CMEM_HEAP ? "HEAP" : "",
virtp, (unsigned long long)physp);
- }
- else {
+ } else {
virtp = 0L; /* silence the compiler warning */
if (copy_from_user(&physArg, llargp,
sizeof(unsigned long long))) {