From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012062.outbound.protection.outlook.com [52.101.48.62]) (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 E22A946D2C9; Wed, 5 Aug 2026 12:58:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.62 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785934733; cv=fail; b=mZjMp7Sg8AuktxBbsra+ktSF5bgYSWX6/g00+dgf+ghMccJXP1xI2e7BiJYRr7c9nnFNb4pJr0oFIbM3ED4efkCqOIK/cTgVq+Bta+ig88FzG1aqGbiPdHWAV3ZoKH0cvczdcO17DvjQYUjN+gEFrG45QzhXWBIdoqk4xSZa24U= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785934733; c=relaxed/simple; bh=TTmDde9Jd1GYNHL4oN40kxk0dFXnLc63YWXSsTJmyYY=; h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To: Content-Type:MIME-Version; b=Fz3McUWEM70nINxJGSd1J5nZglZXYX0jM23ogWKi/R2hJNGVd/Xk1Q/sQNQJgxK0Y8IWimUT6hMt1DF7ZPX7P0bUci1Q6mZeVP7cCMHbj58BZO+3v+RrHXGCNoL2K94d5DIaXB/cqo9ma7Pqi1biQ/hca9oVOb6qPpjWrlQLB0Y= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=eXPjQmI5; arc=fail smtp.client-ip=52.101.48.62 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="eXPjQmI5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=moXOYgho5naY073GoF7MC2p06iEzGLTlG5mqnflPMKqJqw1y7PPVi4FxzKTAprBN+Nbl3gZ64Bxmar3I73dwwePd5yN5nC1tjBj2Xei0bjvgAawBBE7G/FkU0GQkhIV5GeF6Bhe5WQQzpdlMHEntGwHP0o/1PqHy9Klvrjf8BbMzwOp1OSTGuv2GiUIgVRaZbR1Bxy8+yFIkQZ85eIe0ByzpxDb77Jb7pRs5XLaCVZ4Lit95pJHmKedjNQ9DgBKmTjNxjpb0RY6k4qYitUcvGgS7P8f5Nu1Gc9304Qck4UKInYWjidZ22c0uj5lJEDdfb8lyWJLGtumetIOWJV6IGg== 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=q9msKueQ8HEv0XwtIedb6zmnyTvoYJnx29irE/03m5A=; b=AOs6eCSs6R37wdlx8PsAJSSjWcatbAZ7/Zgk6bB15xHGnrxQx4oIa7O42ESWPQhdO+E8XgGDv+o5YC0oyv5Dg4GbfRUKaiw0gSUFa2byNlilVPqPFsiNFq+sMAEC6fGbxeVjU/Yl24USm0wHdaPGjhU5LVS0Ou1O3IY5irnfRhP78sKtEvon0Cyx2sUhSIvvZH+J/jzCZBBWOsTEsurFRe+eiyKSCJ1JZye9BCrMvJUTiD+UzB9tyZzoFs/9lI6yJ9ZoARIi2WmfGef5uc4gdZeCkjM5RoFcrqXX+YYGpAmfVl8/am5K5fI491VKDKGvwSEEytRRvoUi+vmv1CA3bA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q9msKueQ8HEv0XwtIedb6zmnyTvoYJnx29irE/03m5A=; b=eXPjQmI5smoHGO9QIbLfblMN09zLXkM2HUiMGprSU+RJOw91R4R73l5FN84D8wYca8Z6wpkR+7T3tTWiGTHJKAS+hGU0BiZ0qaOaBM47zyw7OylUdi4H1Bw7mnD2V+hcktzUrYHYz1dRNei4zy+DtfgdEwk/OoEGlJCgEYgUzyw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22) by DS0PR12MB8319.namprd12.prod.outlook.com (2603:10b6:8:f7::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.17; Wed, 5 Aug 2026 12:58:40 +0000 Received: from PH7PR12MB5685.namprd12.prod.outlook.com ([fe80::ce69:cfae:774d:a65c]) by PH7PR12MB5685.namprd12.prod.outlook.com ([fe80::ce69:cfae:774d:a65c%5]) with mapi id 15.21.0270.017; Wed, 5 Aug 2026 12:58:40 +0000 Message-ID: Date: Wed, 5 Aug 2026 14:58:34 +0200 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH RFT 3/3] drm/ttm, drm/vmwgfx: directly create writable PTEs when mkwrite is in use To: Paolo Bonzini , linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Boris Brezillon , Thomas Zimmermann , David Hildenbrand , Michal Hocko , Sergio Lopez , Huang Rui , bcm-kernel-feedback-list@broadcom.com, dri-devel@lists.freedesktop.org, linux-mm@kvack.org References: <20260731164341.1109827-1-pbonzini@redhat.com> <20260731164341.1109827-4-pbonzini@redhat.com> Content-Language: en-US From: =?UTF-8?Q?Christian_K=C3=B6nig?= In-Reply-To: <20260731164341.1109827-4-pbonzini@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR2P281CA0094.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9b::20) To PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22) 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: PH7PR12MB5685:EE_|DS0PR12MB8319:EE_ X-MS-Office365-Filtering-Correlation-Id: b5382a5e-c26a-43d8-ccff-08def2f14571 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|6133799003|10067099003|11063799006|5023799004|56012099006|4143699003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: FM0SfpFUtNjp9GLh5M3FgsReAG8UpRvqcQXXAC+cY1/s3yz73mtJ+pQNbNGyUeS8De6lnm9c8yHN9pJYK5+PQE7sXy8rgpWLSavA3W2ZewjgUhy4bPYMcqiskSN4bYEquvuJD8AyuD28udbtAgs5jEGgFOkSV8WY3E5yYPwKj5FC2dqrRq+eniKEtI0j9AWsDldTMA4hua8OZRr6dR+XH49Recc3zxrTZ0k3550AGTw055lkiZ5uLG6NsnXatp7QTibD8Q0VTXx37oMPHLvF8LdWcbGwRXiieABnYjAm8k3v5bL3urqPU00t6AFNmJ+SB0EtOj8fDAxaZ0zVM2DDK/o11JD8rhPBp1gdGDx/Gk1hPk0Ggm/hAE2oL0o0Ki63SnsYiQVSbd+yTCcPteOXBRTJjThxdgE5qRQwKGMuyJJ5fBCIOPvL/Tq5HyPhckmtI8TTQ0a2dUzi2u307nJMFz9B3vkA6EKEa59K1YXeq+RkJF8nxDE9XppRrtiN6cxlr8ZO4Ckgtxjsp5OQsU3nQ9osZTbXIXYVA/OmF6avDLOVZ/+a5VWyG0JiJH1NZuStJzEWc1uOHqPrDNbgLZPJOnkTto7c61ep+yN12HxRvzzdONCVz4RXZIhCJSLGBPt29dWMOs1Qo8eYNPtVJg9E7zHEGicDQDU1phKxpLhXKd4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB5685.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(6133799003)(10067099003)(11063799006)(5023799004)(56012099006)(4143699003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QjlkL21obXhJczNzMEkrZFUxUUFtQ245WE1VUGxKYUpQcndFYkU1Z2llSi8v?= =?utf-8?B?SnZtZ2R0dmt0cW5oMHBTOHRBL1pNVXhnQVNJMVZEaHRGNkxNQ3lHbzdCTWhN?= =?utf-8?B?UE91K2xDckwvNlVINThFdDV4dTlPeXgrUnB4V1FsbWhsdVVlZXZHaTl4ZHU3?= =?utf-8?B?ektRZ21lVmR6dmdhTGhSVHlRS1NyY2NyTkVwc3RpRnZWa3hoUDVOeDBQV09S?= =?utf-8?B?VnZLRDY3bXBHQU5oMkQ2MkF1NjFlbVFrYzVuU2dDMytncitzbGt0YWxCaEpr?= =?utf-8?B?clNuTWE3WFE3d25QTnpzMUlqRmQ5NUEvV2dILzZMODhORkwrUTd5K2tUc1Y2?= =?utf-8?B?VkpQa1ZWY1BmaC9GdWJNQmdKSjRzbW1rUVc5MXJ5bGMzWFQ2Qk1FRUJNd3du?= =?utf-8?B?Zm40S2UyZitoSldCMHBZRlVncUZhM1NWSEw5V01JdE1oSk1admFVVEtRakVm?= =?utf-8?B?YlN2dHkrblN1T0g2aE1EMnhkZEIwcHd5dm9aQ1RET1NWVWxkb3R0cUJJOW1z?= =?utf-8?B?Y1d6eFhHOTZ6a2N4T05aNjRCdGNiSHdjZ1dQdUJ6dDB1M3hVU1B0QkdMRFVh?= =?utf-8?B?THBQSUZ2VEZ0bml0NVAxdnNPNGNPSXpjenc5R0JBTmhxQkhyNkE4Q3NtTVA3?= =?utf-8?B?NzZrU3dtdnNzbThxVC83OSsyTFhjYnAwdmZReTF6RlNqZlYzdUZGbGZrQUJs?= =?utf-8?B?Rm1PU2pneCsweHFqSDJUZWhxZGp5SStmN1BsQzQxS1EreHFVd0EvV3Q4YjZH?= =?utf-8?B?S0htRm12dWQrWnF2NVJub3FTVXE4MWV5NnM5cUo3TlNhTUhvNDNCZXU3elpo?= =?utf-8?B?YldBUHpGVWlNTWdwSkl2cm9QQmh1S2ZqeFRDSGYwU1Rmc2lsRlZ5RUxDRU5D?= =?utf-8?B?ZEw1YTF4OWQ1TWdoTWN1SUFXejl5WEFnV3J4VGpTL3pVUVNpSUNDemVBQXVM?= =?utf-8?B?QVV6UUd3WEx6TnN0eWtUcmxoUWhDUS9idEFpb0MrbW9mRkZ5dzU1UTZJVUdV?= =?utf-8?B?MC9PUnFEU0dObm5xcHd6ZFQ0UWJxSVdEc2xyRkwvbjdtNGVmVXpWVW44dnNa?= =?utf-8?B?aC9uano1d0N4WGRzRmNzcGlvNE93TG1qdFZEWUlyWUFXeW5RTUhwdDhPSUFa?= =?utf-8?B?WlpNNmJWS01LYnpkTEhSV3JNNDhiWk5rVStZa3p0ZGJLSEFVYVlBd2ttUUpJ?= =?utf-8?B?TkV4UnI5RWtUTU9vSUF4SEE5STZIak1DMGVEMTc3M3RoeHFTWEp3WmtyRFNS?= =?utf-8?B?ZVRIU2hVcXdkcWJjTGNUZjJkQ1RjMlAzNEZVMEl1YldZUVpQblYvRXlVRWkz?= =?utf-8?B?cVFWcTFXckZTeWxIVUl2RkdQemtMOTJkcHJoRmJOTVhTaHI3djl4dHFOSE9Q?= =?utf-8?B?dTJNb01mZnFiL0xFeDFPdE5pZWVNSHBQMiswQ0Y2bUJUdi9nZE5HakhFSHNo?= =?utf-8?B?WUM4bVlkSFdjekY4UmxDOE40bHRsa1FDcFNmK3BiWmY2bzRzT0liWUpkTDht?= =?utf-8?B?bzlYR1NISVl5Zkt1MTZnYjFIY3FXM0xpSGtlYW5CMksvb0JwaXA2aTU4RHBy?= =?utf-8?B?OVFYNGZSdGNVdGl4emp2bS9EMlNubmU3cHVGWXNsRnFRcGVDNUpqRVZpeDNl?= =?utf-8?B?eGRXZitvRSs3S2RWTENTaUdEeTFLTzhWUGpGRVRGeVpUWllRNHFMTTFqajcx?= =?utf-8?B?VTFTVVJaZXJGTTQ0M2JzMkw2Q2p0RjQvQlQrNkc1dmxJZStLanBHUytORHJD?= =?utf-8?B?Tjc3aXZRTmY4U1pvaWNzWE42MXpuaHNmREhyN0cyREFIK3poYjloMUFiYnJI?= =?utf-8?B?bGtUeTRXY0xJc0xTYlN4WGZxRzVTK0xhbGZaV0N0VWJiazdibW9Id2h4K3Ar?= =?utf-8?B?QlZYVERoSWxnZk05YzFZYmJ1MlpkVmZFZzZrdU9sam51dFl4UWliOEtsUnRU?= =?utf-8?B?MGNkSng1MzA3eGVUcUZPVDhIQTBobU0vaHc5ejhncFFxRnhSTFN0VTY0RTkv?= =?utf-8?B?RHlyQnBESVU0Z00yL2NmWFUxbUpaRjdpRmp6K1pBWDgzZm9wb0JwdndLQlNG?= =?utf-8?B?Tkt3VWl3dkhGb01HMTVBaTloQ0hXTUpEK3FLNUIrampmTVRtajdQU1I4Tjhp?= =?utf-8?B?bFB5MFlTcy9RWkFXc3hoelZwd1JtMTZkUmxxSnhINDlUQkZhekVJN3JXMHBU?= =?utf-8?B?RFFsZmZ6WTFKV2U5VFRraFI1aTRKcm4zSlhjMHY4bW5pa1ZoaDJZdHNCeFhz?= =?utf-8?B?azVyMGFTM3VVUDMrRnc3bDB0ZHRNNkx2Z2hlam1Oa3FUWVhZT1BoUm1WOVBa?= =?utf-8?Q?puQxVgdnaLagDTtxY+?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5382a5e-c26a-43d8-ccff-08def2f14571 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB5685.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 12:58:40.4099 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: r5vaASJE957nyichUXpmq2sdCVmJ7x98c98O1VwXymV1IGtueSltiwDxOy81moQ2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8319 On 7/31/26 18:43, Paolo Bonzini wrote: > This ensures that fixup_user_fault() users see a writable PTE when > they request one. The flip side is that vmw_bo_vm_fault() now has > to record by hand the write fault, because .pfn_mkwrite() is > not invoked. > > Prefaulting works as before because only the first entry comes > out writable, while the following ones still end up executing > the .pfn_mkwrite() callback. Please split that patch for TTM/VMWGFX. The TTM part looks reasonable, but VMGFX is a completely different beast. Regards, Christian. > > Signed-off-by: Paolo Bonzini > --- > drivers/gpu/drm/ttm/ttm_bo_vm.c | 3 +- > drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c | 42 ++++++++++++---------- > 2 files changed, 26 insertions(+), 19 deletions(-) > > diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c > index a80510489c45..ef27a2d7afc0 100644 > --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c > +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c > @@ -263,7 +263,8 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf, > * at arbitrary times while the data is mmap'ed. > * See vmf_insert_pfn_prot() for a discussion. > */ > - ret = vmf_insert_pfn_prot(vma, address, pfn, prot); > + ret = __vmf_insert_pfn_prot(vma, address, pfn, prot, > + i == 0 && !!(vmf->flags & FAULT_FLAG_WRITE)); > > /* Never error on prefaulted PTEs */ > if (unlikely((ret & VM_FAULT_ERROR))) { > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c b/drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c > index 45561bc1c9ef..2cc490e7d758 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c > @@ -398,15 +398,33 @@ void vmw_bo_dirty_clear_res(struct vmw_resource *res) > dirty->end = res_start; > } > > +static vm_fault_t vmw_bo_dirty_mkwrite(struct vm_fault *vmf, struct ttm_buffer_object *bo) > +{ > + unsigned long page_offset; > + struct vmw_bo *vbo = to_vmw_bo(&bo->base); > + > + page_offset = vmf->pgoff - drm_vma_node_start(&bo->base.vma_node); > + if (unlikely(page_offset >= PFN_UP(bo->resource->size))) > + return VM_FAULT_SIGBUS; > + > + if (vbo->dirty && vbo->dirty->method == VMW_BO_DIRTY_MKWRITE && > + !test_bit(page_offset, &vbo->dirty->bitmap[0])) { > + struct vmw_bo_dirty *dirty = vbo->dirty; > + > + __set_bit(page_offset, &dirty->bitmap[0]); > + dirty->start = min(dirty->start, page_offset); > + dirty->end = max(dirty->end, page_offset + 1); > + } > + return 0; > +} > + > vm_fault_t vmw_bo_vm_mkwrite(struct vm_fault *vmf) > { > struct vm_area_struct *vma = vmf->vma; > struct ttm_buffer_object *bo = (struct ttm_buffer_object *) > vma->vm_private_data; > vm_fault_t ret; > - unsigned long page_offset; > unsigned int save_flags; > - struct vmw_bo *vbo = to_vmw_bo(&bo->base); > > /* > * mkwrite() doesn't handle the VM_FAULT_RETRY return value correctly. > @@ -419,22 +437,7 @@ vm_fault_t vmw_bo_vm_mkwrite(struct vm_fault *vmf) > if (ret) > return ret; > > - page_offset = vmf->pgoff - drm_vma_node_start(&bo->base.vma_node); > - if (unlikely(page_offset >= PFN_UP(bo->resource->size))) { > - ret = VM_FAULT_SIGBUS; > - goto out_unlock; > - } > - > - if (vbo->dirty && vbo->dirty->method == VMW_BO_DIRTY_MKWRITE && > - !test_bit(page_offset, &vbo->dirty->bitmap[0])) { > - struct vmw_bo_dirty *dirty = vbo->dirty; > - > - __set_bit(page_offset, &dirty->bitmap[0]); > - dirty->start = min(dirty->start, page_offset); > - dirty->end = max(dirty->end, page_offset + 1); > - } > - > -out_unlock: > + ret = vmw_bo_dirty_mkwrite(vmf, bo); > dma_resv_unlock(bo->base.resv); > return ret; > } > @@ -484,6 +487,9 @@ vm_fault_t vmw_bo_vm_fault(struct vm_fault *vmf) > prot = vm_get_page_prot(vma->vm_flags); > > ret = ttm_bo_vm_fault_reserved(vmf, prot, num_prefault); > + if (ret == VM_FAULT_NOPAGE && (vmf->flags & FAULT_FLAG_WRITE)) > + WARN_ON_ONCE(vmw_bo_dirty_mkwrite(vmf, bo)); > + > if (ret == VM_FAULT_RETRY && !(vmf->flags & FAULT_FLAG_RETRY_NOWAIT)) > return ret; >