[PATCH 2/2] drm/panthor: Fix the user MMIO offset logic for emulators

Boris Brezillon boris.brezillon at collabora.com
Thu Apr 17 12:49:38 UTC 2025


On Thu, 17 Apr 2025 14:10:31 +0200
Boris Brezillon <boris.brezillon at collabora.com> wrote:

> > I can't help feeling we can just simplify this to:
> > 
> > 	u64 mmio_offset = pfile->user_mmio.offset;
> > 
> > 	if (offset >= mmio_offset) {
> > 		offset -= mmio_offset;
> > 		offset += DRM_PANTHOR_USER_MMIO_OFFSET;
> > 		vma->vm_pgoff = offset >> PAGE_SHIFT;
> > 
> > 		ret = panthor_device_mmap_io(ptdev, vma);
> > 	} else {
> > 		ret = drm_gem_mmap(filp, vma);
> > 	}
> > 
> > Or even go further and push the offset calculations into
> > panthor_device_mmap_io().  
> 
> Sure, I can do that.

Actually, if I drop the lock in favor of a

	u64 mmio_offset = READ_ONCE(pfile->user_mmio.offset);

I can't move the vm_pgoff/offset adjustement to
panthor_device_mmap_io() because userspace might have called
SET_MMIO_OFFSET in the meantime, thus changing the final offset. One
option would be to pass the mmio_offset to panthor_device_mmap_io(),
but I think I prefer keeping the offset adjustment here if you don't
mind.


More information about the dri-devel mailing list