mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user