From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011021.outbound.protection.outlook.com [40.107.74.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E223228980F for ; Fri, 20 Mar 2026 16:38:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.21 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024717; cv=fail; b=rcEJEcBkLQd/wZ1pcn8XZc6wu46yTu+WMl12++Swq+3wTGGacFU3noLLy9YrXWzZwVHZt9xk/SdXcYEBqc0BGDpiYUhKkaiWN953g2YqhYiFn1rfTPUR+kUdHC52XtRe+vZkeLelXjxTObf8KnAW4HSfDuCylTvpnLFAJNRHFXs= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024717; c=relaxed/simple; bh=hBmTBGz2duehgEZPnOa6kjIoFrHcsa0qXzmDRAZeUGk=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=hKvdCYB5R8fX0lbJxthxdUTvlnTkjaJXi7/lN1ugAadZcu0TQX7tHg0MVmAgcuvoORo5W8W8RWEVczMqddi04w/Cgqg40qAOlNGf5SOc7zRoJb1hsmkGIeMDTYIikLGgLqOPCKuM5h2V/8rQwLG8IJHZWXeAJACbbq01cFIwyQs= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=bp.renesas.com; spf=pass smtp.mailfrom=bp.renesas.com; dkim=pass (1024-bit key) header.d=bp.renesas.com header.i=@bp.renesas.com header.b=wmirH38e; arc=fail smtp.client-ip=40.107.74.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=bp.renesas.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bp.renesas.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=bp.renesas.com header.i=@bp.renesas.com header.b="wmirH38e" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pJMKJbUK6AcN1oVY5erMf7sGiUwxHJJJWlmBdV5XlGp4RZ2+QAR3TCM2pbude3z42F3LxWmQhWuLJIFgbLKg8kxoZok+U9dIog+CFUNCvdPnD2qSkUaJs7l4GETCTszyhEw42Z56j5iz40JDwkIrvgnqCEC/cfTPYOg2OZvWY0zYO7SrW3s4Rf/yMj2/CFNXYgiIO+AGw8UvV2SS+2IUp8WAa0b3yigpqxvAg2eqCZcrx3/uWJ5Hmg0CkW1uQbU/iPe2rsSKvpF9D7vz1htvo1EGbaE09/bexq4Sfc9mByMeskTPqJMX7b72GY9pZULYcpCK1rjdkOue+D3R7oVD+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QUaF2zBafE5XhIkxuCF1iSKJA/iEaQcMcv/2oHHRx24=; b=alSsrcPIADoVQhY6r1npjJ9OQcrvwoLoqdNbNyiNl0HOY/THwMHyBfwtQbkJPq4pNBxs+wEil+4dmYI7a857oH6WcLHOsBP6bQwX8bpyplIFsc8zWMwS8Se8w+bhQz7fn1e6Btx/a5Sl7GOW7dIUIMKhiI+LASBxcTj/a92CBfMhSjhI5JBVQPXnN1mSkF7Jc6C2SOqomhCanvWaGyree6ILDl6rvfbiXlrfqaXN3rblNaeqdHrw7MaooUTQW3NsZFI5mxqXNYcpxKQyGlEvQyv0VCCXSXzWcgCtoszVU9mBgnTNo2cRERgdwoOHJ9maljuKAPpZafVqCv5H6jigxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bp.renesas.com; dmarc=pass action=none header.from=bp.renesas.com; dkim=pass header.d=bp.renesas.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bp.renesas.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QUaF2zBafE5XhIkxuCF1iSKJA/iEaQcMcv/2oHHRx24=; b=wmirH38eISH3O1K3J+LPr/3wcyeieVM/WswC2zAbPDxj05DUAQ6fIOjN21935E08ADkWKJo34lAxP/kEhAnjQj1ia3CzYrWLSsT1vWivibX7oOg8+EWNkxfxdYrIBo3/xSYaGOAyoG5FI02Dev+TCn/puatKxjJ/3lDme20oJyg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=bp.renesas.com; Received: from TYCPR01MB11947.jpnprd01.prod.outlook.com (2603:1096:400:3e1::6) by OS3PR01MB7215.jpnprd01.prod.outlook.com (2603:1096:604:148::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.22; Fri, 20 Mar 2026 16:38:25 +0000 Received: from TYCPR01MB11947.jpnprd01.prod.outlook.com ([fe80::33f1:f7cd:46be:e4d8]) by TYCPR01MB11947.jpnprd01.prod.outlook.com ([fe80::33f1:f7cd:46be:e4d8%5]) with mapi id 15.20.9723.018; Fri, 20 Mar 2026 16:38:32 +0000 Date: Fri, 20 Mar 2026 17:38:11 +0100 From: Tommaso Merciai To: Boris Brezillon Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , dri-devel@lists.freedesktop.org, David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, Andrew Morton , David Hildenbrand , Lorenzo Stoakes , Zi Yan , Baolin Wang , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , linux-mm@kvack.org, kernel@collabora.com, Biju Das Subject: Re: [PATCH] drm/shmem_helper: Make sure PMD entries get the writeable upgrade Message-ID: References: <20260320151914.586945-1-boris.brezillon@collabora.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260320151914.586945-1-boris.brezillon@collabora.com> X-ClientProxiedBy: FR4P281CA0305.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f6::14) To TYCPR01MB11947.jpnprd01.prod.outlook.com (2603:1096:400:3e1::6) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYCPR01MB11947:EE_|OS3PR01MB7215:EE_ X-MS-Office365-Filtering-Correlation-Id: bca257ec-3fe5-451c-0d35-08de869f1f56 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|52116014|1800799024|366016|38350700014|7053199007|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: dQlSdCmdMFvQdyxgj9oVfGH+jREZ5RETqKz25VZr0O29U6sYXM4q1Wuc0t7/q5/bJ06kE++G4XXZcHwwZDEBN9+wP2FQ2XkvsBUUwcFE2n9jd5wKfF7Nqv6CJ1VVgt7+y0Vr2S4CNAKIBnNr2NFcixMMaqtdqPqjVWfh0iGgNVJkmjGLLsNZeL6noB6wuEo9EfLeYivT7zNDjW9nc718Pb5363pXJ87Fgd9erfaDzF36Gbo6vLq+pbB/ev1NtysnwuE2czUkE6mRcr5wNZ9FiWtX58Re8976Gg8Qh6KvbYlW7trEeuwmtm56s+bBjm9HNzexYsiYA+1CKhpXDh2a6rNzVWWTY7mF8lredXWr5L3c8FRtXb5nruVViVLJ1Dk4hKUVEFHa1YVX1jDovGg4/dgAl1iMAa+xF9+Fh8uK31VWqU+m1E1Mf/QIVP5YZMuYn0tn4DQ9lpSpBI9SnwaPWQYDddhUMg6Pceln+wa45OxarZRFGnlrV1OEO55LesoKPGJxb9MSDWZG+1Gb59k7V30W2JGmIpxNyMLKJeyv3SZCX7PkUarQv/Q9YukY5J6izLqQYOEamft5ZFdvpi/zf+tL/Tx533m3LjSG5ef0zo56DPdET6qs03BeTk5Hr+wpuE3bRQ3Pyq5uyF5HxaHhfC2mOn9UE4euF2Yl2yztR9jTCooLNh+2cuGv0NdZdxD4IznuD7mLdRx7G54h72N0xb47ldElBJia4zDVnIGTwFIdi+gr7Hsg/+QUPuIcgPLD X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYCPR01MB11947.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(52116014)(1800799024)(366016)(38350700014)(7053199007)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7FfqC2L8NBSrEwVFQetZZV0DAL3lN4BqkTA83c2Ut1O4SJr7+JavApNBdqJ0?= =?us-ascii?Q?uDMeNJzB0+cY7zFAkM7jYxVVzgDZ6AyWaPgq1QjLf2bU6rKd7xmYQ+xwQu5P?= =?us-ascii?Q?9sptKPeDU2UxuhbgwgHG1uMfW386NlVoF+nHgXXrj4w6tEj9lKhvinEXlig0?= =?us-ascii?Q?COysEPyznv0HEAuDbYB2Y0nY71iJPvp5E8r5eep7R3Nu4c/v9R+Jo7KWDOoK?= =?us-ascii?Q?/SFOLx8u9T4+mMegKdrgAjSpp/x7NDzf9l888JBvEeVMZR8NJZl6KkIkjdVl?= =?us-ascii?Q?+IriyJbjtx25G5el0+dT/M2Z+mteYiCa57sLOAixYQ7sSvcxZa+w5F0R+8Np?= =?us-ascii?Q?TYyd0Mw6qKTrrqSxuoRPIZJOX+PZxzFxVc/PSsMi8qqqN7Yw3UF0YdCHjgcq?= =?us-ascii?Q?/2Z7IBQRzTYSq0syAk4HAXDLGspSQ3nk+PvIZaXvBxpW9C+AbVZFngxD0O59?= =?us-ascii?Q?APqYsCCGBhgVvDBnzdQ83YgYE5tyvdU2lRhtgoMqEJjZjE21XZ7Ac/6BzvKv?= =?us-ascii?Q?cNaz5lmSdwIgF7i6+NrOW12W4Kg9ZU4PjPCTmk+bLbCb0ThQdL4ERoaOXW7h?= =?us-ascii?Q?Tgg9+nvtJsp0Vz6Ru7F+ZBl5k2kxuTHPwQJ4LisNIrVHdQTjLuzNtDeagAxN?= =?us-ascii?Q?QuSBQqrUTu6C/0iNcvKhcuUynz1svjrFxoI6Qn1bMGL0eybBeXt6VnOQASFU?= =?us-ascii?Q?Kp4cppBsGw7ld76h0XHe4cezkijn2DJrDGf735UuxgfhJne/jTEmiz3rh6Jj?= =?us-ascii?Q?oc2QvgvlHoQwrACyviXi0Sx3F4ITUqWbOS7m8pZzVRC0rz7EYNzVX+rRy9Ok?= =?us-ascii?Q?V/6ivmYUo6FXPKNDJL6BLQiAzM4OYz0gYAqgPh00Tc+YnRoq1nt4M2+PmmwD?= =?us-ascii?Q?NcVuhNcvLBLK8744tyab52L3qH9LAOT6989voK2eCR3sYqhCjzKvOHdazWDd?= =?us-ascii?Q?mc/jBKGAOrCjIPtVf0c5jDTIekDQxtoo2laTw5Iz0xAwvvUhNbHukbQojT3f?= =?us-ascii?Q?7yVDlZra6gOJshFYL0/qZY+g8A1e+4ffHgRMTP+CdkLSSQElgIqtE5BHEWxO?= =?us-ascii?Q?4cRU7L/txsVRk4wYRvXj33ErSgnWMZAELwCGKZhH1iVbpBID/nxAmfOzDYbG?= =?us-ascii?Q?QEFBHzGW66xpLc7/Cv6Ahf7bp/CxlpFTZI/P89YtRAsoOyrdaEMox1kbEvig?= =?us-ascii?Q?k5PCsXbCQqTUT6YTkNyqHZnlNxLxdQtfMK6WhCnOMPlqRu7ZGq64S329qirc?= =?us-ascii?Q?g8cPPlsPhFsqGwDtj4Cl57cN6q50QhVwyFM3slsVVXSvXjD4bz6hcBgXn73/?= =?us-ascii?Q?Dmr8Yi7HcMLfUiFkbpgtOn1AXZF4hhk16/VZSiaBwXAdFzuMD3jXFqRe6Pym?= =?us-ascii?Q?lBqsXzMPfW3BvbrxysadxznmdOrVKAqtldfmBQ8WepJInx/DtoUvN8/11/GN?= =?us-ascii?Q?v0+gbuBmuwGYJapKUqUZZuwlVZaEPYe1eG41RPcUHQXVypIU5gg2V6fP6pLU?= =?us-ascii?Q?jbpQJMD6Qac3AgJmx6+GRYPJ36YizihIqp6RtBUfcUVLScUuZCcTEmZFSCmH?= =?us-ascii?Q?vpae22UJjh/35kjlIuPAV297Hxwg0JymUq6K3MjqeCKxDGc/m91S93thvrUa?= =?us-ascii?Q?MNjMl57VA5NNHMHn7ymxq3qN8fwmOGSGwPMdqvpj/VGFgO1SbhrUNVORWO/2?= =?us-ascii?Q?8EfaLHNlN/RDMhOrhyBUncnM0ut7fytCTGwmpV+kkDmT+zniD2ARM9gVJ+f4?= =?us-ascii?Q?PRw7f0r4OV8+4xm9UmLTXoeSn0bzDbcMBRmugTWXoG+Qv3yhXe2F?= X-OriginatorOrg: bp.renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: bca257ec-3fe5-451c-0d35-08de869f1f56 X-MS-Exchange-CrossTenant-AuthSource: TYCPR01MB11947.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2026 16:38:32.0284 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RjWH6I+e7gnKRISsyTARogezrwJdBaV4bIU6C23M2HR38vBlEHKfhjnO9GY3Co/PnLAVRnGy6bS9xTD4963fftk/+bA++GylOIrR+6/aDNFDHO77proByVGCTY7yV87H X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB7215 Hi Boris, Thanks for your patch. On Fri, Mar 20, 2026 at 04:19:13PM +0100, Boris Brezillon wrote: > Unlike PTEs which are automatically upgraded to writeable entries if > .pfn_mkwrite() returns 0, the PMD upgrades go through .huge_fault(), > and we currently pretend to have handled the make-writeable request > even though we only ever map things read-only. Make sure we pass the > proper "write" info to vmf_insert_pfn_pmd() in that case. > > This also means we have to record the mkwrite event in the .huge_fault() > path now. Move the dirty tracking logic to a > drm_gem_shmem_record_mkwrite() helper so it can also be called from > drm_gem_shmem_pfn_mkwrite(). > > Note that this wasn't a problem before commit 28e3918179aa > ("drm/gem-shmem: Track folio accessed/dirty status in mmap"), because > the pgprot were not lowered to read-only before this commit (see the > vma_wants_writenotify() in vma_set_page_prot()). > > Fixes: 28e3918179aa ("drm/gem-shmem: Track folio accessed/dirty status in mmap") > Signed-off-by: Boris Brezillon > Cc: Biju Das > Cc: Thomas Zimmermann > Cc: Tommaso Merciai > --- > > This patch is based on drm-tip [2], because that's the only branch > that has both [1] and the dirty tracking changes that live in > drm-misc-next. Tested on RZ/G3E, this fix the issue on my side. Thanks for your work. Tested-by: Tommaso Merciai Kind Regards, Tommaso > > Also added the THP maintainers in Cc, so I can hopefully get some > feedback on the fix. For instance, I'm still unsure > drm_gem_shmem_pfn_mkwrite() is race-free (do we need some locking > there? should we call folio_mark_dirty_lock()? should we call the > fault handler directly from there and have all the dirty tracking > in this .[huge_]fault path?). > > [1]https://yhbt.net/lore/dri-devel/20260319015224.46896-1-pedrodemargomes@gmail.com/ > [2]https://gitlab.freedesktop.org/drm/tip > --- > drivers/gpu/drm/drm_gem_shmem_helper.c | 46 ++++++++++++++++++-------- > 1 file changed, 32 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c > index 2062ca607833..545933c7f712 100644 > --- a/drivers/gpu/drm/drm_gem_shmem_helper.c > +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c > @@ -554,6 +554,21 @@ 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) > { > @@ -566,8 +581,23 @@ 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; > - return vmf_insert_pfn_pmd(vmf, pfn, false); > + > + /* 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; > } > #endif > } > @@ -655,19 +685,7 @@ static void drm_gem_shmem_vm_close(struct vm_area_struct *vma) > > static vm_fault_t drm_gem_shmem_pfn_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 VM_FAULT_SIGBUS; > - > - file_update_time(vma->vm_file); > - > - folio_mark_dirty(page_folio(shmem->pages[page_offset])); > - > + drm_gem_shmem_record_mkwrite(vmf); > return 0; > } > > -- > 2.53.0 >