Mali: midgard: Fix a runtime WARNING as below

[    4.128429] WARNING: CPU: 0 PID: 247 at drivers/gpu/arm/midgard/mali_kbase_mem_linux.c:1772 kbase_mmap+0x380/0xa78
...

Treat VM_FAULT_NOPAGE as success of calling vmf_insert_pfn().
Take https://android.googlesource.com/kernel/hikey-modules/+/refs/heads/android12-5.10/midgard/mali_kbase_mem_linux.c as a reference.

Fixes: 970017f88e ("MALI: midgard: Fix all compile errors under kernel 5.10")
Change-Id: Ie0562d8024e58031ba8126aab42dc7005f08b071
Signed-off-by: Zhen Chen <chenzhen@rock-chips.com>
This commit is contained in:
Zhen Chen
2021-07-15 14:37:02 +08:00
parent 37d5c1a6fd
commit 6a2af737e9

View File

@@ -1662,6 +1662,7 @@ static vm_fault_t kbase_cpu_vm_fault(struct vm_fault *vmf)
pgoff_t rel_pgoff;
size_t i;
pgoff_t addr;
vm_fault_t ret = VM_FAULT_SIGBUS;
KBASE_DEBUG_ASSERT(map);
KBASE_DEBUG_ASSERT(map->count > 0);
@@ -1686,9 +1687,9 @@ static vm_fault_t kbase_cpu_vm_fault(struct vm_fault *vmf)
addr = (pgoff_t)(vmf->address >> PAGE_SHIFT);
#endif
while (i < map->alloc->nents && (addr < vma->vm_end >> PAGE_SHIFT)) {
int ret = vmf_insert_pfn(vma, addr << PAGE_SHIFT,
ret = vmf_insert_pfn(vma, addr << PAGE_SHIFT,
PFN_DOWN(map->alloc->pages[i]));
if (ret < 0 && ret != -EBUSY)
if (ret != VM_FAULT_NOPAGE)
goto locked_bad_fault;
i++; addr++;
@@ -1700,7 +1701,7 @@ static vm_fault_t kbase_cpu_vm_fault(struct vm_fault *vmf)
locked_bad_fault:
kbase_gpu_vm_unlock(map->kctx);
return VM_FAULT_SIGBUS;
return ret;
}
const struct vm_operations_struct kbase_vm_ops = {
@@ -1767,10 +1768,16 @@ static int kbase_cpu_mmap(struct kbase_va_region *reg, struct vm_area_struct *vm
vma->vm_flags |= VM_PFNMAP;
for (i = 0; i < nr_pages; i++) {
unsigned long pfn = PFN_DOWN(page_array[i + start_off]);
vm_fault_t ret;
err = vmf_insert_pfn(vma, addr, pfn);
if (WARN_ON(err))
ret = vmf_insert_pfn(vma, addr, pfn);
if (WARN_ON(ret != VM_FAULT_NOPAGE)) {
if (ret == VM_FAULT_OOM)
err = -ENOMEM;
else
err = -EFAULT;
break;
}
addr += PAGE_SIZE;
}