Am Freitag, dem 09.09.2022 um 11:20 +0200 schrieb Lucas Stach: > There is no reason to use page based mappings, as the established > mappings are special driver mappings anyways and should not be > handled like normal pages. > > Be consistent with what other drivers do and use raw PFN based > mappings. Anyone up for reviewing this? Basically it moves etnaviv closer to what all the other DRM drivers are doing. Regards, Lucas > > Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx> > --- > drivers/gpu/drm/etnaviv/etnaviv_gem.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c > index d45bf0368339..68e4446a94ad 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c > @@ -130,7 +130,7 @@ static int etnaviv_gem_mmap_obj(struct etnaviv_gem_object *etnaviv_obj, > { > pgprot_t vm_page_prot; > > - vma->vm_flags |= VM_IO | VM_MIXEDMAP | VM_DONTEXPAND | VM_DONTDUMP; > + vma->vm_flags |= VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP; > > vm_page_prot = vm_get_page_prot(vma->vm_flags); > > @@ -165,7 +165,8 @@ static vm_fault_t etnaviv_gem_fault(struct vm_fault *vmf) > struct vm_area_struct *vma = vmf->vma; > struct drm_gem_object *obj = vma->vm_private_data; > struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj); > - struct page **pages, *page; > + struct page **pages; > + unsigned long pfn; > pgoff_t pgoff; > int err; > > @@ -189,12 +190,12 @@ static vm_fault_t etnaviv_gem_fault(struct vm_fault *vmf) > /* We don't use vmf->pgoff since that has the fake offset: */ > pgoff = (vmf->address - vma->vm_start) >> PAGE_SHIFT; > > - page = pages[pgoff]; > + pfn = page_to_pfn(pages[pgoff]); > > VERB("Inserting %p pfn %lx, pa %lx", (void *)vmf->address, > - page_to_pfn(page), page_to_pfn(page) << PAGE_SHIFT); > + pfn, pfn << PAGE_SHIFT); > > - return vmf_insert_page(vma, vmf->address, page); > + return vmf_insert_pfn(vma, vmf->address, pfn); > } > > int etnaviv_gem_mmap_offset(struct drm_gem_object *obj, u64 *offset)