From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2B345CD4F54 for ; Wed, 27 May 2026 10:18:42 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8F43110E312; Wed, 27 May 2026 10:18:41 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=collabora.com header.i=@collabora.com header.b="MfBVuMQr"; dkim-atps=neutral Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4F39210E312 for ; Wed, 27 May 2026 10:18:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779877118; bh=4ru3wYjtQnM8/T3ZwOVDnP+xTOoJR3KuUN+b8D2TEW4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=MfBVuMQrz+Ajs/ARbEEcg8WdWJUVy0PYzBS9azsAlXQ1r5Ci0jfqmzRAePWI2/G5B TysT7sUgy8mdrNobUd4IS6b1ykrEKu/w1av5GZSXMeSIWEVY0gp2eg4hSK+Q3lMVjL z+uT8oC7mjGMCny1QXIyPkZ40UCYUHtNSlJ4Bzi3WUeOsuxWvx7vr2xuHysW/mdZeA c32AWgemx+Zi4+3dOm70EJr2auijgV4makuFSp/JiIK4CY208djoQez6Ir/810dqc+ YrgKN0yxg8uI1UhiLO02pEiZFYxeGAl7XiERZGhLsgM3H0DS+yce3DCq0+QwBgD0AC V2QURmlLFUKkg== Received: from fedora (unknown [100.64.0.11]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: bbrezillon) by bali.collaboradmins.com (Postfix) with ESMTPSA id 5A9B217E0411; Wed, 27 May 2026 12:18:38 +0200 (CEST) Date: Wed, 27 May 2026 12:18:32 +0200 From: Boris Brezillon To: Thomas Zimmermann Cc: Igor Torrente , loic.molinari@collabora.com, willy@infradead.org, frank.binns@imgtec.com, matt.coster@imgtec.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, airlied@gmail.com, simona@ffwll.ch, dri-devel@lists.freedesktop.org, linux-mm@kvack.org Subject: Re: [PATCH v3 5/6] drm/gem-shmem: Track folio accessed/dirty status in mmap Message-ID: <20260527121832.7264f0db@fedora> In-Reply-To: <67855fcd-2afe-4a1d-a51a-210e45f56167@suse.de> References: <20260209133241.238813-1-tzimmermann@suse.de> <20260209133241.238813-6-tzimmermann@suse.de> <850e8355-7884-405c-a70a-986ce032c019@suse.de> <831c0943-c75f-4d42-aa5f-90ce34cf8530@collabora.com> <67855fcd-2afe-4a1d-a51a-210e45f56167@suse.de> Organization: Collabora X-Mailer: Claws Mail 4.4.0 (GTK 3.24.52; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hello Thomas, I'm inlining the diff you posted so I can comment on it directly before it's officially posted to the list. On Wed, 27 May 2026 08:56:33 +0200 Thomas Zimmermann wrote: > diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c > index 545933c7f712..07e117673124 100644 > --- a/drivers/gpu/drm/drm_gem_shmem_helper.c > +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c > @@ -554,21 +554,6 @@ int drm_gem_shmem_dumb_create(struct drm_file *file, struct drm_device *dev, > } > EXPORT_SYMBOL_GPL(drm_gem_shmem_dumb_create); > > -static void drm_gem_shmem_record_mkwrite(struct vm_fault *vmf) > -{ > - struct vm_area_struct *vma = vmf->vma; > - struct drm_gem_object *obj = vma->vm_private_data; > - struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); > - loff_t num_pages = obj->size >> PAGE_SHIFT; > - pgoff_t page_offset = vmf->pgoff - vma->vm_pgoff; /* page offset within VMA */ > - > - if (drm_WARN_ON(obj->dev, !shmem->pages || page_offset >= num_pages)) > - return; > - > - file_update_time(vma->vm_file); > - folio_mark_dirty(page_folio(shmem->pages[page_offset])); > -} > - > static vm_fault_t try_insert_pfn(struct vm_fault *vmf, unsigned int order, > unsigned long pfn) > { > @@ -581,23 +566,16 @@ static vm_fault_t try_insert_pfn(struct vm_fault *vmf, unsigned int order, > > if (aligned && > folio_test_pmd_mappable(page_folio(pfn_to_page(pfn)))) { > - vm_fault_t ret; > - > pfn &= PMD_MASK >> PAGE_SHIFT; > > - /* Unlike PTEs which are automatically upgraded to > + /* > + * Unlike PTEs which are automatically upgraded to > * writeable entries, the PMD upgrades go through > * .huge_fault(). Make sure we pass the "write" info > * along in that case. > - * This also means we have to record the write fault > - * here, instead of in .pfn_mkwrite(). > */ > - ret = vmf_insert_pfn_pmd(vmf, pfn, > - vmf->flags & FAULT_FLAG_WRITE); > - if (ret == VM_FAULT_NOPAGE && (vmf->flags & FAULT_FLAG_WRITE)) > - drm_gem_shmem_record_mkwrite(vmf); > - > - return ret; > + return vmf_insert_pfn_pmd(vmf, pfn, > + vmf->flags & FAULT_FLAG_WRITE); I believe we can go back to return vmf_insert_pfn_pmd(vmf, pfn, false); if the mappings are no longer adjusted to catch write accesses. > } > #endif > } > @@ -635,8 +613,15 @@ static vm_fault_t drm_gem_shmem_any_fault(struct vm_fault *vmf, unsigned int ord > pfn = page_to_pfn(page); > > ret = try_insert_pfn(vmf, order, pfn); > - if (ret == VM_FAULT_NOPAGE) > + if (ret == VM_FAULT_NOPAGE) { > folio_mark_accessed(folio); > + /* > + * Always record write access to the buffer. The natural > + * place would be pfn_mkwrite, but this breaks KVM. > + */ > + file_update_time(vma->vm_file); > + folio_mark_dirty(folio); We can be a bit smarter here: /* * Always record write access to the buffer if the * mapping is writeable. The natural place would be * pfn_mkwrite, but this breaks KVM. */ if (vma->vm_flags & VM_WRITE) { file_update_time(vma->vm_file); folio_mark_dirty(folio); } > + } The rest looks good to me. Regards, Boris