From nobody Sun Feb 8 23:32:59 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011027.outbound.protection.outlook.com [40.93.194.27]) (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 8C31B3090C1 for ; Fri, 16 Jan 2026 08:39:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.27 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552750; cv=fail; b=HMhoZ+GZCxGvazKPcH6i9ypH+nHlTSRbb08vyax8XXcacMje/iqFgmWXo8sBt1563Mqon5MbNFcAIs2wZA0s1lnbCyIKZhqf5e8/91Ih8DJ6xZi4/E/CxEDfrG6eCXPDNnjH4kpIgIhwArFmGjdSX5XufjRSr2yPTfvDTfccLwo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552750; c=relaxed/simple; bh=wLp83sv159Hg+9oxvdlfvrAMiV2eUvTeOCwNwZ299yY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eLzoULAMR21g4ExzxBVQWlFtBVwPH9ZbUlrOjPBdcesbBzIYVPXngYrRDnLWLKnVWFmHI28JnI56zyB15xXREUybrZ6vfdve7/BnW0AE4kG3bKhIkYDEXfPh2PTqJ8JP6azZ6U/ESWqgOTwW3ALBTLRUJWls5JIjM7S8NK+y3ao= 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=RSUlWuHH; arc=fail smtp.client-ip=40.93.194.27 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="RSUlWuHH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qiVc5bnae3iyLbJg0PZZrNsrjfQbQwghssTbEicMRLhKlmslH5ZjL+Z2BN0re957y4q3TWW41XkWe1CixYReMxbFuoqd2e9xm8rliLae83llMsr4Kudq5E0qzAZbJmeWfBHWE31b8D873VKzwUBjOh8DP/5wqUajX+Pyf+N/rejRtF49QSKnLJJnCmO8PU3jPK7LyeHv4XbSP5X6KOMLGehBsmObHtPQjmxXaqHmysAoZ98rYIaOhDk+sOphO7C1Uhf6O1/t3uaxEuVI0TPi0y0xs1aNAeJcRIAFvrh4vbcfWXGZ2AmGhs3nuXHDPCOM8moZsBnwUbga1DnZp/Gj/w== 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=vIoHtz/iYAtbodNNogBL9NxXmDhehLIpLmN/K874AaE=; b=MNX+F/sM626JdstaUxt6eBIopjKMgdx4ihCdwtMWU1GMRy6i9yNaCVSdVYr5JcV3I6a+KPniFkCiEl3lU/RNd5lKNk+aaA+8r+COWt2W60mZKRGax0N0tMDJGGBTkszvmL9vL0LvDVMNG3VGrzgKvprej3EXb3MzjHgvVw+2um9IW6ThNqVuyuVIXYQLEDyB51pSUMrSIobOCbMXQ1/Jk3GPicux41qD3U6IMjjcX/wSJO24xhMzhkEnhnIANj3z7dCOLhIdzqZ0n6uO7xftbCGVHz2fGt7ZY+zdcCems5kT4/27E3jty/tfuYsxI8HEKi8tkkuyeaLuXJxMDFWZdg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=redhat.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) 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=vIoHtz/iYAtbodNNogBL9NxXmDhehLIpLmN/K874AaE=; b=RSUlWuHH04XczHG3UF3Fxl22UkokOlG7zy27hsHuIdWCrvvEboMyO13mrPK/Aago331gjdC4wfnUREYl5Z6lAWGTHYCLq6oSsdm1TwaXUb/UdPSYY16PbkHsF6LPfDprRt3EsM+nSeq8ZCYC+Bgo6dUTJRDaAPPLYtzm4HKjAMg= Received: from BN9P222CA0003.NAMP222.PROD.OUTLOOK.COM (2603:10b6:408:10c::8) by MN0PR12MB5860.namprd12.prod.outlook.com (2603:10b6:208:37b::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 16 Jan 2026 08:39:05 +0000 Received: from BN2PEPF0000449D.namprd02.prod.outlook.com (2603:10b6:408:10c:cafe::fd) by BN9P222CA0003.outlook.office365.com (2603:10b6:408:10c::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9520.6 via Frontend Transport; Fri, 16 Jan 2026 08:38:52 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BN2PEPF0000449D.mail.protection.outlook.com (10.167.243.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.4 via Frontend Transport; Fri, 16 Jan 2026 08:39:04 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 16 Jan 2026 02:39:00 -0600 From: Honglei Huang To: David Airlie , Gerd Hoffmann , Dmitry Osipenko , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Simona Vetter , CC: Gurchetan Singh , , Chia-I Wu , , , , Honglei Huang Subject: [PATCH v5 1/5] drm/virtio-gpu: Add VIRTIO_GPU_CAPSET_ROCM capability Date: Fri, 16 Jan 2026 16:38:04 +0800 Message-ID: <20260116083808.325180-2-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260116083808.325180-1-honglei1.huang@amd.com> References: <20260116083808.325180-1-honglei1.huang@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF0000449D:EE_|MN0PR12MB5860:EE_ X-MS-Office365-Filtering-Correlation-Id: 88080667-ccbb-4911-9ebc-08de54dab4b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?zDTGjnGoryn5H1+fpTnVin28EOTE34yfj4lalQ9qmtzLRuE/l2D9czML2N8X?= =?us-ascii?Q?u3kDKLUJo8gZygDkDqcEfyiUnSjBy1ZAy0U/y3MyV2tHB5nTmw4EmlJLL9ue?= =?us-ascii?Q?m4RomUKy58D70WcDRNlcavgooNTq6hobguuCuSiD5/freCNheK3Vl6xOQ5qn?= =?us-ascii?Q?vVAxq+r3OUx04IXlI8JlhhQH+2a/aazh+/baHybE6gplcFsS++YHxsVObh0N?= =?us-ascii?Q?yXDX6V6VpgiFofxfyJ2THVlE+b/JYVVnyRJr7p5jCNq5zCOnTBMDsWrNYm+r?= =?us-ascii?Q?/QjSJ5x3igSgERLq6Sr/fCnks6yd8GrEmzevXUuANlEEJiQRjNilbv7p5OTe?= =?us-ascii?Q?ns6c3F37spePXsAUDyPkufyckjZuUWXxPU4OfyQ5oIzoubY2d0wG3AAXbren?= =?us-ascii?Q?jp1SZCvCijTZ/hBZXViOE4ZjUMYYmoIoPT8MKp1RjJQUgCG+kl/1uuTD3AJV?= =?us-ascii?Q?q4gx8tw9TpHRGYD2FV4dwMZ2ylxEizHcupKTPmHzPuK6k9fCNznvHD5S3Cns?= =?us-ascii?Q?d/I2Ao0gGpZ1QwH2BMHy163yakpiXCNZZ62UcWaBNCDmaSNaZgejMDppb6Jb?= =?us-ascii?Q?mBdvAJZG3eWQCPWIQCCZengeWZTcdtWxIzwMmDe3bRhdzmZzkK4o1OtaZeWb?= =?us-ascii?Q?iXmh8KsKPVmZnBbuCTkH5RX8MB5Dp/B7eLggNZOIZKt1fqI8CeTnx813gyb/?= =?us-ascii?Q?dkpXax0Re67x3siSz1JOonfQwVgbd57j1trUClja0baP4wcAPPD4+izGQLQQ?= =?us-ascii?Q?xt65FNBN0jw+lprhkmYotI7vw9wdCyYjrEhqBo0Bwz6xnfW2dE8yCcsH+qrv?= =?us-ascii?Q?adQICgFVNEIeDB8ZHwxmFm29EFiqOgVqk8YhAqJaSYUWTFDGUp5RSWQnT4iq?= =?us-ascii?Q?ukGXpicKVr8UrFUiYuJOnquGRiEK2kPWwt6C4LzNf2pQ8I0rk5RDO6NvGOjQ?= =?us-ascii?Q?0/QQarB73Bh+LIdyEoGZ1RMkzOnxp8F6ftKtUiYGxfcDhl8W4s9TViHaMPL9?= =?us-ascii?Q?gA6iNSemMeRc4tgJplLmoZabsNNYYrFChxI9R48pXuKG4sbTTZAnqhylhYEU?= =?us-ascii?Q?rqspzNCdXSJkMpCvunLJVvmRN88RqGuYPz54ZTKrkwLvqelR2gddmVdCxrZ1?= =?us-ascii?Q?nppvuz0RhniDqIpuQNtmptlA14Hqh57ry06iXvTwWdUe2r2dU8y3hVdxEOuh?= =?us-ascii?Q?pG207OXkWWMXv5WaOMDvYZbMdZBMJDIiOYHZ1LlI3XV1UHzdSL7oW2taD3rk?= =?us-ascii?Q?OMRz2PzFYyPkxa5b/TQ4y1i5ucIXFR+W5cqbSvmHipfwdth5Zwr+uKMf9+Yq?= =?us-ascii?Q?1O/TmgfxzgKbDS6+duP6dxOIJHpt5BQy+F8HxSS6Fb98MMYVmnFlQp+qt+Ws?= =?us-ascii?Q?eCRQ89HC6DuC9k6kX4eIZWtDUuZLiRCQn1kJHHYYijabYEKf25UwDFyItyUr?= =?us-ascii?Q?0UTrnJjuX04LH02wMlZg9uD6bB+ZDQWdrTSjrgMUM206KZv84ISWCjVbNBh4?= =?us-ascii?Q?/cuGewB76sO4fN1c2Wj/bnwEkS87vFYXXQfuEUjwzGhkROe/82q4druStax6?= =?us-ascii?Q?YJC93GH+Mb/77pzFG/GI9VVFDaDN6Du+guli3TDfQ8VdPWCUkBNvmKDWCSh4?= =?us-ascii?Q?M8rZ6ojHEJG+kdHRnAZmp52DsOqaaw5YzKX9haKlOb84SlOWnD0b4LBpc42a?= =?us-ascii?Q?jWjcjA=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(376014)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2026 08:39:04.4416 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 88080667-ccbb-4911-9ebc-08de54dab4b9 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN2PEPF0000449D.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5860 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add a new GPU capability set VIRTIO_GPU_CAPSET_ROCM to support ROCm compute workloads in virtualized environments. ROCm (Radeon Open Compute) is AMD's open-source software platform for GPU compute and HPC workloads. Signed-off-by: Honglei Huang --- include/uapi/linux/virtio_gpu.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/uapi/linux/virtio_gpu.h b/include/uapi/linux/virtio_gp= u.h index be109777d..fbd1838d6 100644 --- a/include/uapi/linux/virtio_gpu.h +++ b/include/uapi/linux/virtio_gpu.h @@ -313,6 +313,7 @@ struct virtio_gpu_cmd_submit { #define VIRTIO_GPU_CAPSET_VENUS 4 #define VIRTIO_GPU_CAPSET_CROSS_DOMAIN 5 #define VIRTIO_GPU_CAPSET_DRM 6 +#define VIRTIO_GPU_CAPSET_ROCM 8 =20 /* VIRTIO_GPU_CMD_GET_CAPSET_INFO */ struct virtio_gpu_get_capset_info { --=20 2.34.1 From nobody Sun Feb 8 23:32:59 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013056.outbound.protection.outlook.com [40.93.196.56]) (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 EB2AE3081BD for ; Fri, 16 Jan 2026 08:39:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552755; cv=fail; b=PkUNcV4saCG4P5LAXevQtPxlooTWRUPHg9gSgV1Q0WcKm0gAGhSZ08zZKeU38fewxX6vvkiKD7x/dBLFemy6qNUpRZax98D7/RQrOqlonoqmFMwbBK3eLkkYf76k3+vHFjDJasnI2Y7GEAcorDKHi+8+BAO+buZNfKzSajplrRw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552755; c=relaxed/simple; bh=+ugEPFSVhEgUsHuWSo1nj/5U7rw6Lazp3XRzD8uqtow=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=EyRNQWMCRoIR6RSUiIPZX+v3I5u3d7f5jIFKqtAkcVMmqTi6aJgRo/KyQ6wxiTGf+KbzPN7IdoMr0flZpzyYeNRrOpKhZDVNFvV6ONXoRyyBFUQ/AzMSY4tGMFREIQ5p5uNWO3p0YrPgi+a05pEIBeEfOlwnbTQi+4MWIuUbfew= 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=euEdhhRS; arc=fail smtp.client-ip=40.93.196.56 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="euEdhhRS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FWEXGCl9dhyfE/TSxJAXXjOTwZA+rVrAhE85JjelkewUa7K8tzVVMUsreiLBh9CRK19dV4rXSRh2flRPolzA0kzUSX+vGaAzv0ug0+b6HVdDoGU5XVvR7Bg7GVX8yhNj1lK2QNVfM/JsymM8pAbHrzbs37iaA6eZ7avLQNkKo1YfhTjrDrZXRizBIlinad/qkmCJpmnL4k0nHDHC1UQE491c/UWrSE5Ard9xDEJaM4+p7UUYVgFxO1MHG1Blro9SD5cFBCzLngBdqaqHocD4mYwpNdnthaRcPPr6loU7cyAjRsf3FYULyRJg3UjlZ2d4cN3cY8AOn/Ny8xkGqlwYuQ== 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=frirTa/ES7xf6ayzcn1JhI7J3x75TTJygVkGyGfvZ4E=; b=Y9xU9IxftekWZ0TLhPoJLE4o7dLfmqp/gsrEpvSpxM+ncJPRbKHfuS7KDS8UVRGs4Zdy6vW8+MQUAJUdJUi4WjsEUQmzCe3n3g44RhWe5hl+ubNzIdIyfdRb9oi+l5sJyHRMDN2WoZiGdVhiUoKnjRyobzdXLkekenvQs/W3jpOl3Aq+ib7KVworlub1kfRniXI0C6VnHRPd6hphdfH1+Ftkmy2lvwdvTkhKBbxQWioEcHfaVEzASESpYEMFFQzvCGzaXlBNfbju4wJMKPfWaQsVdf1M9UiagA0rozSoX54L77jowBvkeIZRHaV+yccYXiAfrhqTRl27H+rBs2mVwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=redhat.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) 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=frirTa/ES7xf6ayzcn1JhI7J3x75TTJygVkGyGfvZ4E=; b=euEdhhRSkJEvyMlUlgdbbgzy13vVUHxF6f6TzIZzN4pimZIiK0vxy0FIIkuYrJ1+C1XLWM6vcpjd7WNosCTiZSDQzTy9Ne6Ksz0VzHHODAZpNVGQBPFgGEFYKiXAQeMxMw3AnZAZiHv/5M6HhFhusDZpjgxDEfMAH9YNJjB64P0= Received: from BN9P222CA0021.NAMP222.PROD.OUTLOOK.COM (2603:10b6:408:10c::26) by BY5PR12MB4228.namprd12.prod.outlook.com (2603:10b6:a03:20b::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Fri, 16 Jan 2026 08:39:08 +0000 Received: from BN2PEPF0000449D.namprd02.prod.outlook.com (2603:10b6:408:10c:cafe::3e) by BN9P222CA0021.outlook.office365.com (2603:10b6:408:10c::26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9520.6 via Frontend Transport; Fri, 16 Jan 2026 08:39:03 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BN2PEPF0000449D.mail.protection.outlook.com (10.167.243.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.4 via Frontend Transport; Fri, 16 Jan 2026 08:39:08 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 16 Jan 2026 02:39:03 -0600 From: Honglei Huang To: David Airlie , Gerd Hoffmann , Dmitry Osipenko , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Simona Vetter , CC: Gurchetan Singh , , Chia-I Wu , , , , Honglei Huang Subject: [PATCH v5 2/5] virtio-gpu api: add blob userptr resource Date: Fri, 16 Jan 2026 16:38:05 +0800 Message-ID: <20260116083808.325180-3-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260116083808.325180-1-honglei1.huang@amd.com> References: <20260116083808.325180-1-honglei1.huang@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF0000449D:EE_|BY5PR12MB4228:EE_ X-MS-Office365-Filtering-Correlation-Id: b95aed3f-a266-4b91-bf45-08de54dab6e7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?JyZ9DdT6jizpxpPx/zbjRWi80Y/tZIV25Hc4CArrIEV+hx3BXy/jiutSOKSl?= =?us-ascii?Q?NnWmkAsOTN4N4vQ36NEF/+Lj5ribcumMEgHlccoymvN1jmrTrWWgNuDqkaLR?= =?us-ascii?Q?qxhGiSMnDiWAG3avOqkT0QHj5Gha2gX09+BiftwiWhYS9mpOu1B7NACV6lIJ?= =?us-ascii?Q?z++D8+NRB4SiyHkxTpRHwUjg6h+w/SNTkxNYxKqKJXnvvwcaeBBds0bESKko?= =?us-ascii?Q?1AnXSQ7GAaxEtsQLRm5xgPPuDqGA9sMAU+Gu5K1m0JCxKe9OecxP1wq0yPTy?= =?us-ascii?Q?s2qnBceTjMM8a2KOzQSfJlJliPJD/xbEYzROl15B1BdhNU8vkPLdEMvLvWKG?= =?us-ascii?Q?UJV6vePA/jMNjAjIZJMpFhrRvuD3RhMGp/J+wxSKMDE5Z1Y+4JJ1HOfkXkMc?= =?us-ascii?Q?FdUYwhf3qtcY+PUxwzev4nMRjwVV1yRJzx0BCJwzglSIDqcxkYNWCZGwPLM/?= =?us-ascii?Q?4yaijoAA+mJMDUZiq4MvlrhiLjLa5eWs2lVvFBV3xvvJg5Jgbxdkn9nYvt++?= =?us-ascii?Q?KhOxdUcqqHf8f0qHd1erWW2hQIMNUPyZvJZeogVvi/iXC7ImHRBGwZwZBFns?= =?us-ascii?Q?wxyit+PE24W3cnqV+Z7JF8IPnOcUMxHYt418JiQUJCVUI4JHAFgGGfFXnivI?= =?us-ascii?Q?QqUpjsc5qMLfSQEGS4Ryym0CkSAp/5MDg8/cPXCevTMMvT3WCrOnajT5lByS?= =?us-ascii?Q?Uoao/z2hZTMudC41F0v1+NZaeFXfuj7PmgLheXr4jxjoBa0Xh6igDFW1J9i4?= =?us-ascii?Q?+HXkmcR8hIwEapdzODJGFubcWjeLA5gOful5ahyJtRxpGeXCeTGC2wcT/JN4?= =?us-ascii?Q?BqAxapGjgps6eIwEsllccRafKt4S4oKm5LakIh8he2e7pxdYeKU49mjl+izN?= =?us-ascii?Q?s+vpQlbGo4o2dI29gqtgjHaW/Hb390+/iK4rRCHjTMq7oxIwJ0bw3L7lNx5J?= =?us-ascii?Q?bQrknvgitvdGC7BX/yT4R/DfzGgIy7i4J+hYn+HJpuOQp/Rdyz3Kk3+T37pl?= =?us-ascii?Q?t+a0x7MfxOf1KlAvQV6M+tuLQ/YSnx3sdDwaHKVwxToNcoLMZCm6/pazc8tw?= =?us-ascii?Q?TiBZdbEgohGW6dm5plePjLrc9NRcDHwbvXRXCvWLR7jT8lCZFwn6XLh4uQd6?= =?us-ascii?Q?54knrQVzq/iXHeSEuh6Z+3ze9VZmhG5+lczujz+sp6MJr8I2RJ6+sTTKLLYw?= =?us-ascii?Q?pNuICO/VVVT7Y1RyWFi+BK+LFt3cdwPe1j5L3Hqk9AiY6/0m4QMUxWD8s5if?= =?us-ascii?Q?g5KsHDtU43x4jKFTiRh+kKqzVkwF0JDwCnL/lxXxfODFelasFYPcZeAJ4kwT?= =?us-ascii?Q?Rtnc57zNJJrSTaDmNhMJ8JMn9cWHC/PYMyXOzVKmIve0jSeVHWbPZHJM4CVw?= =?us-ascii?Q?zg89YNkuyocC1MqhAZqrVfpJ/cobBOKxIwUKzvcEB4GcJInWrgjudZ3uhYK6?= =?us-ascii?Q?COKLB2t2d0pajDmI9fM2NfvM4j7NDWIz3PbyyZJy9KxehJwtnDhAbFso2irw?= =?us-ascii?Q?FoBSxzRmY2l7733b4o9ecyLEjsBjm2Ez+GqmtJ56LGdraIkQ17Ty7ctmzNEx?= =?us-ascii?Q?aPnL9vIs46yBvbvbASfQvwGDz5XMnIcWddV/ysgT7GTYqK42CFNjODy3Di6f?= =?us-ascii?Q?qx6Owa/hOVSRftWFram7xTcUVRm9sq7uLMTxoC0u+54sZnxTwrrfgD3kpcPY?= =?us-ascii?Q?G7hdJw=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014)(7416014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2026 08:39:08.0998 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b95aed3f-a266-4b91-bf45-08de54dab6e7 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN2PEPF0000449D.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4228 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add a new resource for blob resource, called userptr, used for let host access guest user space memory, to acquire buffer based userptr feature in virtio GPU. - New flag VIRTIO_GPU_BLOB_FLAG_USE_USERPTR used in blob create to indicate the blob create ioctl is used for create a userptr blob resource. - VIRTIO_GPU_BLOB_FLAG_USERPTR_RDONLY: Indicates that the user pointer resource is read-only. Signed-off-by: Honglei Huang --- include/uapi/linux/virtio_gpu.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/uapi/linux/virtio_gpu.h b/include/uapi/linux/virtio_gp= u.h index fbd1838d6..436c8aa25 100644 --- a/include/uapi/linux/virtio_gpu.h +++ b/include/uapi/linux/virtio_gpu.h @@ -406,6 +406,8 @@ struct virtio_gpu_resource_create_blob { #define VIRTIO_GPU_BLOB_FLAG_USE_MAPPABLE 0x0001 #define VIRTIO_GPU_BLOB_FLAG_USE_SHAREABLE 0x0002 #define VIRTIO_GPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004 +#define VIRTIO_GPU_BLOB_FLAG_USE_USERPTR 0x0008 +#define VIRTIO_GPU_BLOB_FLAG_USERPTR_RDONLY 0x0010 /* zero is invalid blob mem */ __le32 blob_mem; __le32 blob_flags; --=20 2.34.1 From nobody Sun Feb 8 23:32:59 2026 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11013065.outbound.protection.outlook.com [40.107.201.65]) (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 B41FC3081BE for ; Fri, 16 Jan 2026 08:39:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552758; cv=fail; b=f/EWh/WLDVcR/p6YufnsicQ86LPTG5vXtcXYKmK5qDwJFjEHmyifbvmCR+Q1TM1NErHHQAlcjZ6R3A1KHdjwW4ixxNteb547FYhYKxMMiQ0v8ChmNA/cq204o13XcfUk5hnk9PSHZCNAhoy8HKhbK2tCRayDGIBAfRB9XJVQc9o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552758; c=relaxed/simple; bh=E5aWJSLQDioOYHxZPzTzvzLeJ/BbXOxNilKQ6XEBrmU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MeNSUI5sVivnLIJmBzek7Syc6LNFub2+ewP2xoqrlkd++m19ACEdqVojP8TdAcIg+oez2X/RabYR/2ILT1cDATTBiBGKvjCfuFh4SD7RVRQf9zim8S044IT9RxLo4um81UGlM6KvfSTgyI8AQW4d7OlO0lsZdfHcaPb3Qs7hif8= 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=BzXIuAjh; arc=fail smtp.client-ip=40.107.201.65 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="BzXIuAjh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Rm8GuaTlMqcQAVnONKCoICXlcwAueBlSpVmP/QfSrEa6bv5t2L6tpeU0yqzkOE+WNBYRmEStYX8Yy94aFFeMFacYyLVEXX6lgHOpyPYj/Eul91qzzCQg6nQrqnISHcNEJ4ww2nNphCDmiC3fXhHExJliXTnlg4yHJu+stTJZlqjcIyGEUgSVtZa+qC3J8e2CtVehCFWBMKd0PaNWOTjrpzuRz6WGE1yrh9lg4pNwkWo2FXP4hREF7e4Z2AKS9Y+E+C68WKMTUAxYejTs3vr/yU69I2zYZ/Ixxd8ySJ8SHmCJRY4aggFwDO/kIiV26kDzOQa6D4BFJmB9hTl6Sl03eQ== 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=wqnVLMNuY1jYUU8e4cyzf+geGe1unRRVP9RYvnLkKW8=; b=EUckSp6zX+IpiotlARgB0KQbVR9vtVhUvHO+9DFW/LCdkJxNnju7Z5fbr5e1p/4i6bZRkUk1bqpNhAu/h6spbvgDswnX9Xd901+SPtnfilKG14GYES4kK/e732ny1J8ZzjvW/Y0FB1bq3YfndfXQi7PEaqoDTqP7Bs6mKRfMYn+UnJvmEaFkWrdr8qwykCMVNCi7ohPRzB84YDCj9O16B8VqkV2QQIxDr72Awk/JG48VBvqOqRZyKksjUeX3lzdoL+VbFFHQhqSKD80PiVLzDEINQvNKi84NceMqrotW9a1w39rlxEF5XvbpFjeehJHu3Ap41VBdv/8l++wUHpDa/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=redhat.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) 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=wqnVLMNuY1jYUU8e4cyzf+geGe1unRRVP9RYvnLkKW8=; b=BzXIuAjhDDXMzVDiRjAbFJptN9Ec2YC2qvCO8QvMJ3bNLsSP1QQqQmAunMOzC/yD5J/rluGJiONp7MrfnVFyn/oK+QRnDErHri8pgc+7vTC9vHNodlUSrJyXKCM+ANZ4zqA5Xg80/UINJtLq97MFodQE/av85gCMO56i1vegRkQ= Received: from BN9PR03CA0157.namprd03.prod.outlook.com (2603:10b6:408:f4::12) by SJ5PPFA5F0E981D.namprd12.prod.outlook.com (2603:10b6:a0f:fc02::99d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Fri, 16 Jan 2026 08:39:12 +0000 Received: from BN2PEPF000044A0.namprd02.prod.outlook.com (2603:10b6:408:f4:cafe::31) by BN9PR03CA0157.outlook.office365.com (2603:10b6:408:f4::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9520.6 via Frontend Transport; Fri, 16 Jan 2026 08:38:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BN2PEPF000044A0.mail.protection.outlook.com (10.167.243.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.4 via Frontend Transport; Fri, 16 Jan 2026 08:39:11 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 16 Jan 2026 02:39:07 -0600 From: Honglei Huang To: David Airlie , Gerd Hoffmann , Dmitry Osipenko , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Simona Vetter , CC: Gurchetan Singh , , Chia-I Wu , , , , Honglei Huang Subject: [PATCH v5 3/5] drm/virtgpu api: add blob userptr resource Date: Fri, 16 Jan 2026 16:38:06 +0800 Message-ID: <20260116083808.325180-4-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260116083808.325180-1-honglei1.huang@amd.com> References: <20260116083808.325180-1-honglei1.huang@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF000044A0:EE_|SJ5PPFA5F0E981D:EE_ X-MS-Office365-Filtering-Correlation-Id: 9b447e76-d6b5-467a-d05f-08de54dab8cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|7416014|82310400026|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?zWRSoqIV24FK+yrR5fIrllyQcbyP2nEqjkaiiD+yHdQnNx6tUciafTINdS5/?= =?us-ascii?Q?3OUAl/Z7pcygh21Kz7PofyphAZnMSZwsIZ6eyCZiPNa1i1q2fjDGDzVJIFhG?= =?us-ascii?Q?dGLb/Ma6gBmkQQZr8ZqRbXkxuTzXseGbys13SH/XnVdTKEbFSaNTlR2Rt6jq?= =?us-ascii?Q?5eo3o82HdqEKer/3lelMESUoMk/G+xP9rkE4mbDXeXYQ8+vKESbXyNzYscn+?= =?us-ascii?Q?bdPTdEhROKVI/4unvvjJsY0YD48AIbhE56CsARKKLzEoPkjerrJhv+3XQtBZ?= =?us-ascii?Q?JgeveMebdEjlfRmCsHPhHncScbXAjWKJajx9j8+5Wrlaj9ltbQ09RQ5dWjq4?= =?us-ascii?Q?h+LaYGCAdkKzh9IaISWpL6fNoP377kZmsRHWDQh4r1s6FXKnGcv6IysXs/0K?= =?us-ascii?Q?yTyGSvYPaJ/q2rEO/8DNVckZsR1RJbIfIH04ZR5y+fonig7dt9ErTpmzzAe1?= =?us-ascii?Q?LODZU2wiO90dVDQmvf6gmlq0nzEVL/MBsipSbsw73cVFmkd/R90bhFzOIgMw?= =?us-ascii?Q?bNfLt2kYkM+vWZadtzIu7AvMrG7KBLEA0OcyUCWGzlM8IAJUWmwO4SbqhX4s?= =?us-ascii?Q?TUhJqr1AI2CqBSg8XObOii6caVl3FouHOrEW3fHC0W9isr8mBJAgwKzSaSt0?= =?us-ascii?Q?FQH2hIwDz9J+YEoBsADuNgECafN9LX8JimPv2pfn0fMeMAzaPqb5WyV/IP57?= =?us-ascii?Q?w5nYnBqRdbNBBwuU55BwlhVY9GjlJqdfFgoOl9vPIqVeTbDO6og/npgr/Yc5?= =?us-ascii?Q?rx3oFvFIMHoTTbVXJ944RVjcZ/iovm/7S5xpVI1/KoG60X3R7oJuPo3/g16v?= =?us-ascii?Q?c5r0F1k79Uf/SwKQYYw4pofv55y9NQUER5HYXkpNklP+hxVQYlH24iqU5Y1R?= =?us-ascii?Q?54WyJR3rE6BygXBqU8u4IB5+L1ZWfoGN/i+kNi5rWt4xENKuMbY+DrwV1DvF?= =?us-ascii?Q?oOgAkFaYT0eMLozLTUFJgX7yaqzSUNxDgxAAYun5tbSeytp/9XOOOl9i/8Nf?= =?us-ascii?Q?lBm0FVhzTZhFE76RxnQV2h5MwXjqM4Yqhb+tQSQJ2Ij386bIieCIW3MwuO0j?= =?us-ascii?Q?FlhBaL7yXUft9UWqB+I4xrxlINt06iTrJf5q3ttC/4OVXjh4JjZQPslmbH7c?= =?us-ascii?Q?RXAxay9rkTGrVPs9A8aRNIFW7QfZB/e8yyzyvNpWx7x2f9aCspCS2ifDk8k7?= =?us-ascii?Q?5pk8l9a/xGdobrJNoAQQ4/fgAKnkRmUwIt6pezb8y0DUCYZrIOQiNne58xgt?= =?us-ascii?Q?gMpdTZJPgypFMovVOzy19F2N65WAWGVQs88BEzWM4Jlo7nhm6Vn++mce6Czk?= =?us-ascii?Q?Dv5pjIlDWepRMpTymNC69u66DUPnPWLSr5wKdSrr/LAIYQ2Xb3w4lV03qcbW?= =?us-ascii?Q?IEwTIw/QPD7aeqDAamM6vLQC5nXgBf0t+TcPNwNbRksmXwDqyAZJOHp2dAuZ?= =?us-ascii?Q?aflG8QolAH8uiqEGlv8em8ekk/vN/LWzdgC46++t9fx9EhiXZic2SRgTziz1?= =?us-ascii?Q?eTb/khlW2F1MzdYFVrNtk2C6sH1Vj1jBL+NwouVV0guVFkQeF+nhxlBT/O+T?= =?us-ascii?Q?RMwZLG0LpLcSI6nqyrfewF1Kcrd4FXg1FtcpsZ/+kOeZIJQeMVums9iGozdk?= =?us-ascii?Q?zJ4yvDTcidyT+YTAZ6/y4+4pZwcnP8orLkDv5KOvkulwrgCaRj7VZzkCIcYI?= =?us-ascii?Q?RtZcWA=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(7416014)(82310400026)(376014)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2026 08:39:11.2836 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9b447e76-d6b5-467a-d05f-08de54dab8cf X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN2PEPF000044A0.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPFA5F0E981D Content-Type: text/plain; charset="utf-8" From: Honglei Huang Extend the virtgpu UAPI to support userptr blob resources, enabling the host to directly access guest userspace memory without data copying. This is essential for compute workloads where memcpy overhead between host and guest is unacceptable. UAPI Changes: - Add VIRTGPU_BLOB_FLAG_USE_USERPTR flag to enable userptr mode - Add VIRTGPU_BLOB_FLAG_USERPTR_RDONLY flag for read-only access - Add 'userptr' field to drm_virtgpu_resource_create_blob structure to pass guest userspace virtual address The userptr field contains the guest userspace virtual address that will be pinned by the driver during resource creation and unpinned on destruction. The driver validates the address, pins the pages, and provides the physical addresses to the host via scatter-gather table. Signed-off-by: Honglei Huang --- include/uapi/drm/virtgpu_drm.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/uapi/drm/virtgpu_drm.h b/include/uapi/drm/virtgpu_drm.h index 9debb320c..fdae50e39 100644 --- a/include/uapi/drm/virtgpu_drm.h +++ b/include/uapi/drm/virtgpu_drm.h @@ -185,6 +185,8 @@ struct drm_virtgpu_resource_create_blob { #define VIRTGPU_BLOB_FLAG_USE_MAPPABLE 0x0001 #define VIRTGPU_BLOB_FLAG_USE_SHAREABLE 0x0002 #define VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004 +#define VIRTGPU_BLOB_FLAG_USE_USERPTR 0x0008 +#define VIRTGPU_BLOB_FLAG_USERPTR_RDONLY 0x0010 /* zero is invalid blob_mem */ __u32 blob_mem; __u32 blob_flags; @@ -200,6 +202,13 @@ struct drm_virtgpu_resource_create_blob { __u32 cmd_size; __u64 cmd; __u64 blob_id; + + /* + * userptr: guest userspace memory address for VIRTGPU_BLOB_FLAG_USE_USER= PTR. + * Must be 0 if VIRTGPU_BLOB_FLAG_USE_USERPTR is not set. + * The driver will pin the user pages and allow the host to access them. + */ + __u64 userptr; }; =20 #define VIRTGPU_CONTEXT_PARAM_CAPSET_ID 0x0001 --=20 2.34.1 From nobody Sun Feb 8 23:32:59 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010063.outbound.protection.outlook.com [52.101.46.63]) (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 60CB3308F2A for ; Fri, 16 Jan 2026 08:39:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552763; cv=fail; b=sW3YVNnkVNGgVRggf55ND/qjX9XZYlRnvOXSrS6v1t6RG6SLYuuzLIn/iY2JSR8KpezDU1Z6ZXtiAriIvBGQBXlakqJ4XXbiyKy7KqHilow0k8rCoGGQsmh/WzzDDCiwVrTC+vRiK662VMBlqX3aWjHC0suh748VuvAwl0PWOSo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552763; c=relaxed/simple; bh=JVr7MEBMImr7rtDAmmHLNHjW4yQYhFFCtbm2xkP+134=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=LB7ADD/esmKNhO96xUTToV07jj/WyA6MgNWs1B5gfSkOywdIXR0QMjLiq+DVO3odlqFPxdC+gwrqSA/6MddAO9NF7hlSgoEuzlj4kEKH9i8S+11mp9YDbwVLel59KN6OlOJlRsSbPcYdoZLURuB8hytc91x8VhYWLw5RSehTBjc= 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=Opqzd08K; arc=fail smtp.client-ip=52.101.46.63 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="Opqzd08K" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tKJ2RvQfxkV8jLW9K9VGodJdSZvlYak7TsvMQfHfCCAnOM7xpf8JXfts5hhUbuIn+bTOnrDCtw8mkMzzfBE2j19jbpv1h6bY1muEc/WMdTCvv87WC5WTd4/VfkmYeT1sfib329mhmuhD3xy9fO8U33GpOF6AUPndAe54IQ9yyAVeRvZWmBmjdQq7HI/5moJwhAwDi2o9Ct54Aofjw2uKYeyURQgDPjaXY2dW//06AL89LfvTQ08yyTV+V4Ynm+reJLjf1AcY/zMTuD7ttLgabO6jwhzL0XLzo7a1Z7iYQMNpepEnRdWSnsVIdtmSArF2hazS6y7Gob8gcwzXetF4cQ== 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=1CrwIZeu2Ihd1KK2ix6wj5vBjQbiuLtY3VbPtWQ+r2E=; b=qk61XWzbz9CPl9Dmt+A6O/IJjlUi89yjxpA/+xYut+AW2vynxZlEtISFsU1+cj4BPx4TmlWRkfsLhK2/HDKtlmdYGS9s62/TxFM0/i1MGWVdZka9qvK46OOIscUd9rMAIX9Xmxcy+KucJsRczan7Wm6elpc2qss3pliWU80VKYBWaE09UwLxRjsVja8287XBZZGZTZNinra3b6yJkxP0l/+VfexDf3cPbesElkgqINGkSRqhyFV/jaOPQLRnKRhTEje/M9ETL4CiWMDUm2LL5F157Nr3VkA9AY+gpTeVtyT116V2byhh0JG1bqvNd7eTxdaaLSK8ThaRz9fCeS4VgA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=redhat.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) 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=1CrwIZeu2Ihd1KK2ix6wj5vBjQbiuLtY3VbPtWQ+r2E=; b=Opqzd08Kwi84fuaSE6byj/S6qV/8Lg40JBb8EBXdaFB5aOSYu4n5m5cvSukY5RxuH1Jpq4zfTzxt2x/0ADy0xj5/6TI9pkjizZqgu9DWcRryY4Tp+O+8iCt/zoKodPlEhA9haYx1Hb9PFSVjhCHmwD3sCvrFaiHsB8Qj+1C0rkY= Received: from BN9PR03CA0713.namprd03.prod.outlook.com (2603:10b6:408:ef::28) by MN2PR12MB4288.namprd12.prod.outlook.com (2603:10b6:208:1d2::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Fri, 16 Jan 2026 08:39:15 +0000 Received: from BN2PEPF0000449F.namprd02.prod.outlook.com (2603:10b6:408:ef:cafe::54) by BN9PR03CA0713.outlook.office365.com (2603:10b6:408:ef::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9520.6 via Frontend Transport; Fri, 16 Jan 2026 08:39:15 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BN2PEPF0000449F.mail.protection.outlook.com (10.167.243.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.4 via Frontend Transport; Fri, 16 Jan 2026 08:39:15 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 16 Jan 2026 02:39:11 -0600 From: Honglei Huang To: David Airlie , Gerd Hoffmann , Dmitry Osipenko , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Simona Vetter , CC: Gurchetan Singh , , Chia-I Wu , , , , Honglei Huang Subject: [PATCH v5 4/5] drm/virtio: implement userptr support for zero-copy memory access Date: Fri, 16 Jan 2026 16:38:07 +0800 Message-ID: <20260116083808.325180-5-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260116083808.325180-1-honglei1.huang@amd.com> References: <20260116083808.325180-1-honglei1.huang@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF0000449F:EE_|MN2PR12MB4288:EE_ X-MS-Office365-Filtering-Correlation-Id: 93b262f2-4257-4b7e-7d69-08de54dabb18 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700013|7416014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hhFWDPrs9C85OAswBJ1qW+R9f8174K1WKxbcqkG1TQaqhK/MGsl+XBy1Xn73?= =?us-ascii?Q?PcotFPkAlHyRu+JGciVv359EFWxBQb9nkaPTg+hAedz2YsTC/tPILKu+u4yk?= =?us-ascii?Q?DwytdP0Hl7dZ23e+61tTa+T5Bg/CmcebwE7WNKkPpsNLNnpzBh/LQRbsrZOD?= =?us-ascii?Q?4CsMxU55fbofUCqbiHjpeXVxo9CFkLXPZoz6LAcSWybBmIAapzWzTVyYs01Y?= =?us-ascii?Q?HtN1PP2EJvBnsw21lZCGkn1SO0vB2sj/VRGeIL84+Qs0hxg+V/AFCQkNW1pj?= =?us-ascii?Q?fhyMKMSnayPnDW02LoIfeKZaSrROOJ7hCYTf37ul/Pj/CqXx6XuVWoo5WK12?= =?us-ascii?Q?TLShx0Xr7YTqomaw03597Hzdyfo6WWZqFW5OlrWfa+X6M7zeS2wTuNBfxfdu?= =?us-ascii?Q?Yzpk8HPtoPo/PwjyRaMHhwSm6hA6MePYTOBJxofZt1vXYF7Lg4Wy+2gphPm7?= =?us-ascii?Q?ORzZhzC4rJEpxs1FjGdYof2TO0MRjh1PKHl8pSqkNmI8dkdOTX4W8LznQR8D?= =?us-ascii?Q?jgcyps0AagvEuOPZWPTczBudpY0Y94vHv6VrPLVVf+zwLuyq5CKzvGT9T2s+?= =?us-ascii?Q?lj9O3/WHSGY7LwoO0d/UtawzEDTNJ6hi6U/0dxt+Mz5whxlLicpgoGIwyRjl?= =?us-ascii?Q?KHWjh+vLzB6mxOMKSm0uW7lb0mcM6Zl+PDUbItVXV9HVi1ZZelqIiMfwGWxa?= =?us-ascii?Q?o78owI0NGhthllXYOUaPO1wx63TAkcQpq7YFRF8kd+aJ9NO270rQz7ROjz2/?= =?us-ascii?Q?aocq3NNPzoF9wGpLuYkRjTmAX9ALxO6i4lB0KVViI6fNTGvMdUK2X3HeT5TY?= =?us-ascii?Q?LPNlmuh0Tg/j4URlunNz9vnOvGoLx3rAB+8/AwoVZtIGlJodLQRYZ6rUIDvC?= =?us-ascii?Q?aKKWGWh517pcdl1bGnPLTT9PWnFJXH/XdMVZnYY4ZJpMGmUiM6IuQx5paM2Y?= =?us-ascii?Q?eVHkPo3ifAHKnXugOZmatuzp2B5S/hJZejIMg4m5xtXH/C5o2252JOtDD40O?= =?us-ascii?Q?nFS75qbssEHX0KvqyhBLGTf5fUPjZ8epqrdwhW14jAoiQGVoHWSWYgk8MAO0?= =?us-ascii?Q?jilEWJShlUxm6GwBYfWVAu1+w7yzOd6Mek+y4pDFmnXkEQ3gyba6H/TGeVhX?= =?us-ascii?Q?mZRuJNRc4d8N0lXQNcnpyVvIu7qcSyMw9Ts3Io+xQq6I8+TDpFeCPuroJK/i?= =?us-ascii?Q?r0RNDTczuV4kBDwW9cDAzwswkNayMLpc4XpsOIngmDkC7P1j2zI6EOeIwS/Y?= =?us-ascii?Q?vYkIVKS35o+QisW6U88KfhvvNsIGA+XyOKeRgmLdMqFrqk3ivroBGoNv1yCJ?= =?us-ascii?Q?FJJHbqZzdkSs4ONmmc6pgEe9qUM/gaeB7o411eTYRKJ6MOdcYOX9d+Xs/9NK?= =?us-ascii?Q?76XZBcZhqB+9pez1b91EZGoepq8VzIsQr0nNc2p/Jjd7DX3b2ckvsxE/OHsk?= =?us-ascii?Q?waUucOH/eP1lMjTZlysgLypPJVh/0VduGQ2kukFrQF34m+En6n5CziXAuyNQ?= =?us-ascii?Q?cs8eZja/XUtiY2HUjkoCqE1hJVfATnZ/JcMN5QtV4YeFuxr4cHfGSWwyLVIQ?= =?us-ascii?Q?IMiIr5FaHIiljtFSvqEyIIyRzWJB/V7BIR2UtMl80diBIXiHEIqK6fDraGWJ?= =?us-ascii?Q?1apn8rzKBdf81ZktgB9jLC22g9dWJDdZMjbSqMlps7TUF6S/jEXB8z+lI7BS?= =?us-ascii?Q?HhWeRQ=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(36860700013)(7416014)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2026 08:39:15.1299 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 93b262f2-4257-4b7e-7d69-08de54dabb18 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN2PEPF0000449F.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4288 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add userptr support to enable host direct access to guest userspace memory, eliminating copy overhead for compute workloads. Implementation: - New virtio_gpu_object_userptr type for userptr resources - Pin pages with pin_user_pages_fast() and FOLL_LONGTERM - Build scatter-gather table for host access via blob resource - Support read-only mode (VIRTGPU_BLOB_FLAG_USERPTR_RDONLY) The pages are pinned at resource creation and unpinned at destruction. Follow-up patches will add ioctl integration and feature detection. Signed-off-by: Honglei Huang --- drivers/gpu/drm/virtio/Makefile | 3 +- drivers/gpu/drm/virtio/virtgpu_drv.h | 33 ++++ drivers/gpu/drm/virtio/virtgpu_object.c | 6 + drivers/gpu/drm/virtio/virtgpu_userptr.c | 231 +++++++++++++++++++++++ 4 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/virtio/virtgpu_userptr.c diff --git a/drivers/gpu/drm/virtio/Makefile b/drivers/gpu/drm/virtio/Makef= ile index d2e1788a8..fe7332a62 100644 --- a/drivers/gpu/drm/virtio/Makefile +++ b/drivers/gpu/drm/virtio/Makefile @@ -6,6 +6,7 @@ virtio-gpu-y :=3D virtgpu_drv.o virtgpu_kms.o virtgpu_gem.o virtgpu_vram.o= \ virtgpu_display.o virtgpu_vq.o \ virtgpu_fence.o virtgpu_object.o virtgpu_debugfs.o virtgpu_plane.o \ - virtgpu_ioctl.o virtgpu_prime.o virtgpu_trace_points.o virtgpu_submit.o + virtgpu_ioctl.o virtgpu_prime.o virtgpu_trace_points.o virtgpu_submit.o \ + virtgpu_userptr.o =20 obj-$(CONFIG_DRM_VIRTIO_GPU) +=3D virtio-gpu.o diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/= virtgpu_drv.h index f17660a71..808a6e65b 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.h +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h @@ -84,6 +84,7 @@ struct virtio_gpu_object_params { uint32_t blob_mem; uint32_t blob_flags; uint64_t blob_id; + uint64_t userptr; }; =20 struct virtio_gpu_object { @@ -113,12 +114,38 @@ struct virtio_gpu_object_vram { struct drm_mm_node vram_node; }; =20 +struct virtio_gpu_object_userptr; + +struct virtio_gpu_object_userptr_ops { + int (*get_pages)(struct virtio_gpu_object_userptr *userptr); + void (*put_pages)(struct virtio_gpu_object_userptr *userptr); + void (*release)(struct virtio_gpu_object_userptr *userptr); +}; +struct virtio_gpu_object_userptr { + struct virtio_gpu_object base; + const struct virtio_gpu_object_userptr_ops *ops; + struct mutex lock; + + uint64_t start; + uint32_t npages; + uint32_t bo_handle; + uint32_t flags; + + struct virtio_gpu_device *vgdev; + struct drm_file *file; + struct page **pages; + struct sg_table *sgt; +}; + #define to_virtio_gpu_shmem(virtio_gpu_object) \ container_of((virtio_gpu_object), struct virtio_gpu_object_shmem, base) =20 #define to_virtio_gpu_vram(virtio_gpu_object) \ container_of((virtio_gpu_object), struct virtio_gpu_object_vram, base) =20 +#define to_virtio_gpu_userptr(virtio_gpu_object) \ + container_of((virtio_gpu_object), struct virtio_gpu_object_userptr, base) + struct virtio_gpu_object_array { struct ww_acquire_ctx ticket; struct list_head next; @@ -512,4 +539,10 @@ void virtio_gpu_vram_unmap_dma_buf(struct device *dev, int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, struct drm_file *file); =20 +/* virtgpu_userptr.c */ +int virtio_gpu_userptr_create(struct virtio_gpu_device *vgdev, + struct drm_file *file, + struct virtio_gpu_object_params *params, + struct virtio_gpu_object **bo_ptr); +bool virtio_gpu_is_userptr(struct virtio_gpu_object *bo); #endif diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virt= io/virtgpu_object.c index e6363c887..da702301b 100644 --- a/drivers/gpu/drm/virtio/virtgpu_object.c +++ b/drivers/gpu/drm/virtio/virtgpu_object.c @@ -80,6 +80,12 @@ void virtio_gpu_cleanup_object(struct virtio_gpu_object = *bo) drm_gem_free_mmap_offset(&vram->base.base.base); drm_gem_object_release(&vram->base.base.base); kfree(vram); + } else if (virtio_gpu_is_userptr(bo)) { + struct virtio_gpu_object_userptr *userptr =3D + to_virtio_gpu_userptr(bo); + + drm_gem_object_release(&userptr->base.base.base); + kfree(userptr); } else { drm_gem_object_release(&bo->base.base); kfree(bo); diff --git a/drivers/gpu/drm/virtio/virtgpu_userptr.c b/drivers/gpu/drm/vir= tio/virtgpu_userptr.c new file mode 100644 index 000000000..f6c211e9d --- /dev/null +++ b/drivers/gpu/drm/virtio/virtgpu_userptr.c @@ -0,0 +1,231 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include + +#include "virtgpu_drv.h" +#include "drm/drm_gem.h" + +static struct sg_table * +virtio_gpu_userptr_get_sg_table(struct drm_gem_object *obj); + +static void virtio_gpu_userptr_free(struct drm_gem_object *obj) +{ + struct virtio_gpu_object *bo =3D gem_to_virtio_gpu_obj(obj); + struct virtio_gpu_device *vgdev =3D obj->dev->dev_private; + struct virtio_gpu_object_userptr *userptr =3D to_virtio_gpu_userptr(bo); + + if (bo->created) { + userptr->ops->release(userptr); + + virtio_gpu_cmd_unref_resource(vgdev, bo); + virtio_gpu_notify(vgdev); + } + + mutex_destroy(&userptr->lock); +} + +static void virtio_gpu_userptr_object_close(struct drm_gem_object *obj, + struct drm_file *file) +{ + virtio_gpu_gem_object_close(obj, file); +} + +static const struct drm_gem_object_funcs virtio_gpu_userptr_funcs =3D { + .open =3D virtio_gpu_gem_object_open, + .close =3D virtio_gpu_userptr_object_close, + .free =3D virtio_gpu_userptr_free, + .get_sg_table =3D virtio_gpu_userptr_get_sg_table, +}; + +bool virtio_gpu_is_userptr(struct virtio_gpu_object *bo) +{ + return bo->base.base.funcs =3D=3D &virtio_gpu_userptr_funcs; +} + +static int +virtio_gpu_userptr_get_pages(struct virtio_gpu_object_userptr *userptr) +{ + unsigned int flag =3D FOLL_LONGTERM; + unsigned int num_pages, pinned =3D 0; + int ret =3D 0; + + if (userptr->pages) + return 0; + + userptr->pages =3D kvmalloc_array(userptr->npages, sizeof(struct page *), + GFP_KERNEL); + if (!userptr->pages) + return -ENOMEM; + + if (!(userptr->flags & VIRTGPU_BLOB_FLAG_USERPTR_RDONLY)) + flag |=3D FOLL_WRITE; + + do { + num_pages =3D userptr->npages - pinned; + + ret =3D pin_user_pages_fast(userptr->start + pinned * PAGE_SIZE, + num_pages, flag, + userptr->pages + pinned); + + if (ret < 0) { + if (pinned) + unpin_user_pages(userptr->pages, pinned); + kvfree(userptr->pages); + return ret; + } + + pinned +=3D ret; + + } while (pinned < userptr->npages); + + return 0; +} + +static void +virtio_gpu_userptr_put_pages(struct virtio_gpu_object_userptr *userptr) +{ + if (userptr->pages) { + unpin_user_pages(userptr->pages, userptr->npages); + kvfree(userptr->pages); + userptr->pages =3D NULL; + } + + if (userptr->sgt) { + sg_free_table(userptr->sgt); + kfree(userptr->sgt); + userptr->sgt =3D NULL; + } +} + +static void +virtio_gpu_userptr_release(struct virtio_gpu_object_userptr *userptr) +{ + mutex_lock(&userptr->lock); + userptr->ops->put_pages(userptr); + mutex_unlock(&userptr->lock); +} + +static struct sg_table * +virtio_gpu_userptr_get_sg_table(struct drm_gem_object *obj) +{ + struct virtio_gpu_object *bo =3D gem_to_virtio_gpu_obj(obj); + struct virtio_gpu_object_userptr *userptr =3D to_virtio_gpu_userptr(bo); + int ret; + + mutex_lock(&userptr->lock); + if (!userptr->pages) { + ret =3D userptr->ops->get_pages(userptr); + if (ret) { + mutex_unlock(&userptr->lock); + return ERR_PTR(ret); + } + } + + if (!userptr->sgt) + userptr->sgt =3D drm_prime_pages_to_sg(NULL, userptr->pages, + userptr->npages); + mutex_unlock(&userptr->lock); + + return userptr->sgt; +} + +static int +virtio_gpu_userptr_init(struct drm_device *dev, struct drm_file *file, + struct virtio_gpu_object_userptr *userptr, + struct virtio_gpu_object_params *params, + const struct virtio_gpu_object_userptr_ops *ops) +{ + uint32_t page_offset; + uint64_t aligned_size; + uint64_t aligned_addr; + int ret; + struct drm_gem_object *obj; + + page_offset =3D params->userptr & (PAGE_SIZE - 1UL); + aligned_addr =3D params->userptr - page_offset; + aligned_size =3D roundup(page_offset + params->size, PAGE_SIZE); + + userptr->start =3D aligned_addr; + userptr->npages =3D aligned_size >> PAGE_SHIFT; + userptr->flags =3D params->blob_flags; + + mutex_init(&userptr->lock); + userptr->vgdev =3D dev->dev_private; + userptr->file =3D file; + userptr->ops =3D ops; + + obj =3D &userptr->base.base.base; + obj->funcs =3D &virtio_gpu_userptr_funcs; + + drm_gem_private_object_init(dev, obj, aligned_size); + + ret =3D virtio_gpu_resource_id_get(userptr->vgdev, + &userptr->base.hw_res_handle); + + return ret; +} + +static const struct virtio_gpu_object_userptr_ops virtio_gpu_userptr_ops = =3D { + .get_pages =3D virtio_gpu_userptr_get_pages, + .put_pages =3D virtio_gpu_userptr_put_pages, + .release =3D virtio_gpu_userptr_release, +}; + +int virtio_gpu_userptr_create(struct virtio_gpu_device *vgdev, + struct drm_file *file, + struct virtio_gpu_object_params *params, + struct virtio_gpu_object **bo_ptr) +{ + struct virtio_gpu_object_userptr *userptr; + int ret, si; + struct sg_table *sgt; + struct scatterlist *sg; + struct virtio_gpu_mem_entry *ents; + + if (!params->size) + return -EINVAL; + + if (!access_ok((char __user *)(unsigned long)params->userptr, + params->size)) + return -EFAULT; + + userptr =3D kzalloc(sizeof(*userptr), GFP_KERNEL); + if (!userptr) + return -ENOMEM; + + ret =3D virtio_gpu_userptr_init(vgdev->ddev, file, userptr, params, + &virtio_gpu_userptr_ops); + if (ret) + goto failed_free; + + sgt =3D virtio_gpu_userptr_get_sg_table(&userptr->base.base.base); + if (IS_ERR(sgt)) { + ret =3D PTR_ERR(sgt); + goto failed_free; + } + + ents =3D kvmalloc_array(sgt->nents, sizeof(struct virtio_gpu_mem_entry), + GFP_KERNEL); + if (!ents) { + ret =3D -ENOMEM; + goto failed_free; + } + + for_each_sgtable_sg(sgt, sg, si) { + (ents)[si].addr =3D cpu_to_le64(sg_phys(sg)); + (ents)[si].length =3D cpu_to_le32(sg->length); + (ents)[si].padding =3D 0; + } + + virtio_gpu_cmd_resource_create_blob(vgdev, &userptr->base, params, ents, + sgt->nents); + + *bo_ptr =3D &userptr->base; + return 0; + +failed_free: + kfree(userptr); + return ret; +} --=20 2.34.1 From nobody Sun Feb 8 23:32:59 2026 Received: from CH5PR02CU005.outbound.protection.outlook.com (mail-northcentralusazon11012041.outbound.protection.outlook.com [40.107.200.41]) (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 716663081BD for ; Fri, 16 Jan 2026 08:39:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.200.41 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552763; cv=fail; b=ntTcniZLrFPGyUq2YqvkLcway6WQ0snlotnzR2AjVpHmgs8FA38etOiyS4Pi2aEKYcGnz1X/lg+mUwq7DW+P7rPfChtZs9lYfE1pUEif+c92r0oKnP99hWmVfvy/5A4TQuAPrEaCD5MRpE8Xb+zjR78XPSwZe7RNcudUC9/0BUo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768552763; c=relaxed/simple; bh=04FN42mUElM61ecBoaIbwoGENz+HjL1cLwf/t9AyM/M=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=mJ0b5UoMdTAHlzAThvXSM3z+kVd3Lm7+HIBjjRUQs2vFOs/7aK+3Eu9Laps4RmGia1C2v6dGEYxLj77LFVwaLOpjs7xuxMnD2qtUrNGsL8/7JUf1Ha9E4yzdYhXvJwpqpyAz29GPcyNfdnCrxKm0jaCcBqsrtk5Gka4HkcLjn5U= 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=hCXR19Gx; arc=fail smtp.client-ip=40.107.200.41 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="hCXR19Gx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZmCh+yjH/TRxPWl/WtWfKRZ+IaVijGqt9qv55ZdPhJNF5hxPzJmin0aQVQFcYbk+a2tfC61e5xqRUGonvWvxIOILtrpCJal8ZGC+PIrW3o/ZKwuAVB2R0sUyEQVEUzFtLe4bCZraoD/jT3EXUiiJGFCGJIJ0BfCVwVcy8TASbWPxwKWWoUTzdGvQXhA3rHGjoh0L/X454mxK8J7NSkos5bCLmn0hTZN9fKJwMASAKYoKPCjuYpDprhtwuZJuZidwlJ7oAIhngO2GrL3SaS67w7vc5GmDodJYW1mmyAOeyFkVfhaKCpe5E5ru/uWDX4w/C/7Zag0p2EBsclre1aVh1A== 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=m7Avm8Vfyp+ZrTO3ASaUwcvhrk+9VGOxgDdyqZzFJ4Y=; b=hWzcMWs6XNR2FiPlHfcC/XSLip6Q2pKk0jbskmpGniSwVA0d1asEdmTQ5tqLPSKBVSUGf4Y6O6K3RtKVOG8t6zV91ZLfhHLzFotV8Dp8pFmBIAndswJOp3DcjxEk6rUF8vioBcADtKPX1gqby54GC7jbXN9aAVAS8Sla3PXK+faVmev4BTfXqvI2iNl3r6sYh/nWkYgcGXdYJP/IU8+akk7x6uf1xDsD7Qidf7LokIsup8sUI9W0Fx1AXQQiA8fDIk4qvX1wC+n88TLRVtFUnOiewRBM6WrQxmMgaN/R0nJZzh6BUgt+Eie0Dos7RhLOWbs+mpktJJZeXgnffvF5xg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=redhat.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) 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=m7Avm8Vfyp+ZrTO3ASaUwcvhrk+9VGOxgDdyqZzFJ4Y=; b=hCXR19Gxsall/9E+4ZqrM05glCP+aVv1inbzFF760HShCaEvpmaYj/yImdXksE8lieGvf/fjUtD1HT+WIaJy9LOx9fZLFHLur+etPI6I+9XbnaGpoKcAujKf0M7Wz0AtTYPBaYK7ioKGRCzAa2JtmxRpQ4O7hzOJ7nphvnQHii4= Received: from BN0PR04CA0122.namprd04.prod.outlook.com (2603:10b6:408:ed::7) by MN2PR12MB4453.namprd12.prod.outlook.com (2603:10b6:208:260::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Fri, 16 Jan 2026 08:39:19 +0000 Received: from BN2PEPF0000449E.namprd02.prod.outlook.com (2603:10b6:408:ed:cafe::f8) by BN0PR04CA0122.outlook.office365.com (2603:10b6:408:ed::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9520.8 via Frontend Transport; Fri, 16 Jan 2026 08:39:08 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BN2PEPF0000449E.mail.protection.outlook.com (10.167.243.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.4 via Frontend Transport; Fri, 16 Jan 2026 08:39:18 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 16 Jan 2026 02:39:15 -0600 From: Honglei Huang To: David Airlie , Gerd Hoffmann , Dmitry Osipenko , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Simona Vetter , CC: Gurchetan Singh , , Chia-I Wu , , , , Honglei Huang Subject: [PATCH v5 5/5] drm/virtio: advertise base userptr feature to userspace Date: Fri, 16 Jan 2026 16:38:08 +0800 Message-ID: <20260116083808.325180-6-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260116083808.325180-1-honglei1.huang@amd.com> References: <20260116083808.325180-1-honglei1.huang@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF0000449E:EE_|MN2PR12MB4453:EE_ X-MS-Office365-Filtering-Correlation-Id: acbaa2c1-ce2b-425a-a367-08de54dabd57 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700013|1800799024|7416014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?cKktRCZs1if+8cpOQFUXovZ+WHg2psCXj7TbDzScUMQzAwDez48GT9uZdxIc?= =?us-ascii?Q?n+EK1NjMIcbsKQ/PiM7AfzYaAg7gzN3x4iQZkSxOHWWDJPjnY6CNf4rlGYq9?= =?us-ascii?Q?nilvz1Mc3jdSLRZj+1qmD3n4JZfqOlFd7m280387lNpKtoV1/K8MNFFU0S1W?= =?us-ascii?Q?otuPIMKrfOuwCqzK+iPaV1AMsgB0XSRrBDrV7VfHypsq1nhpB/1O+GoQBn5d?= =?us-ascii?Q?nnPnY+VjErsQsE74IXUEMjwOkw6mHqiqiLfVoc+BccSoZLv3BbJDfUKXUjW1?= =?us-ascii?Q?6Oau+dk3y27HJGSOw58A03Z0GS0LmSSRqPwZDFOZlSXDTxezAjjJwO6ppDvC?= =?us-ascii?Q?g23yi+LX2NNEAYFeintI5axI+w7FbLjbIdKWCBjm/2NFy9yK2wVIJXhBtEsT?= =?us-ascii?Q?ToPocQqWEy8QuAbzKfhlw0b+b3N42goQ82EtK1nB+9gMYO6QGlaaX7cL5KSI?= =?us-ascii?Q?utgwhR47rhoKV07KsATz+KrDXguVfMxSNrn3EM8VXUAlpXnOa9ytmO4xms+5?= =?us-ascii?Q?pSEJN7zaXWQn8YftUqTVS/fsY58rvHPQ+gn/V2GRVV0dcyx3HFJ9UImSMb92?= =?us-ascii?Q?zaJnqW+LEy/Ej2Vp5erR0S8PWmAuB3s8KUDTjKSzjtcfL/KaSPGAs3wE7sKh?= =?us-ascii?Q?sS6d4qyuLwlenBBzhR0ewdWUbZIoQ8QeUcNJiS77+btGkbyZJ1ybqMapZ7yx?= =?us-ascii?Q?BH7h562r7hNy38RDiveZv3C6EIPVVj5YQ49OixNsvoFfQXTb6vk2xCcfCTQp?= =?us-ascii?Q?D0dvoRd3DTL4SpEv5697h0weMm1XGIuRrwS+pY/Ve/wtFpHYEd2PtLGvvb61?= =?us-ascii?Q?o6ca+Oz2Hx1Xcyo8YUICIpQItbtPtXIpOMB+J7bHDF0A7dmbZuT2aORZQSfQ?= =?us-ascii?Q?HxCwiPChbJ7FKeG8vWRD6nnbs19yiUdB9lY8ePhvwM4SUubxniE/L3p6h8dw?= =?us-ascii?Q?uRwKiMe04XKrX44OJZ9RzWTwOx4IE0ZdyYwvU+lCN3P94s0G1Vjkh8hTgSyM?= =?us-ascii?Q?1lGnsJDrVGvjhCV2kp8lYu1+E/v8KtAa5HwcUIyET7SfD+VLBQ7KT2xlrQd2?= =?us-ascii?Q?YdKMlwiCrUSWB45pcfMDOkl1vCnMd+rMadbiZ28TLqlA1Ew1/6WdV/kWbFwj?= =?us-ascii?Q?mJIZawp3RT6nlLqI5rmBLPEIiHR0ND8b+61ryIwtd7PRPJTnNr7/BEAfLz61?= =?us-ascii?Q?VZtJRmqeHK4eYiDQSnEX5fZ+A8lcu4h1RN/noB80fhmDm3iiDZTCybQaa9Qv?= =?us-ascii?Q?Q4hhx1bgrdlLqSjzLcNQzjLGmyL5rimqbea34BG0zcywYdSwLplrLH0neGPZ?= =?us-ascii?Q?sf5lrRU93SezZXNbfmMkCWQAiFly+mDC+ru2dMmOKrRGFMWEn4Q6bHp4mF/Z?= =?us-ascii?Q?metaP6RIBAGgGp1LyV7xrIro/mcPaA3r5d7LtPlhKdC6Jv995DI0vP7tjpRL?= =?us-ascii?Q?/CMY7M/zCUKLyUAwxuSe9AV2ri7kGrHyTCI40s2lH2YH4Df3x1RLVMM6kDOh?= =?us-ascii?Q?KTyL5VDJVr+Kwuwi8Qzy000SuVAdXJIQKoTGLmKXh8SrzDGnyZ/Q2x6/S123?= =?us-ascii?Q?S5F7etbWiI1QX1avPfHEcvNawgFPyGFgso5DSp/6MiSBjls+e+uTh+4Fy8w0?= =?us-ascii?Q?GZrSVSBekFo9bYGyl6QE58EJn2FbSq36nMcAnI0+Q3YnROZ/lY/tbowPmIFe?= =?us-ascii?Q?GVMx1g=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(36860700013)(1800799024)(7416014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2026 08:39:18.9018 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: acbaa2c1-ce2b-425a-a367-08de54dabd57 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN2PEPF0000449E.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4453 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Integrate userptr functionality into the blob resource creation path. This patch adds validation for the userptr blob creation: - Include VIRTGPU_BLOB_FLAG_USE_USERPTR and VIRTGPU_BLOB_FLAG_USERPTR_RDONLY in VIRTGPU_BLOB_FLAG_USE_MASK. - Verify that a userptr is provided if and only if the VIRTGPU_BLOB_FLAG_USE_USERPTR flag is set. - Pass the userptr address from the ioctl params to the internal structure. - Invoke virtio_gpu_userptr_create() when a userptr blob is requested. With this change, userspace can create userptr blob resources by setting the VIRTGPU_BLOB_FLAG_USE_USERPTR flag and providing a valid userptr addres= s. Signed-off-by: Honglei Huang --- drivers/gpu/drm/virtio/virtgpu_ioctl.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virti= o/virtgpu_ioctl.c index c33c05736..adaaf80b2 100644 --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c @@ -36,7 +36,9 @@ =20 #define VIRTGPU_BLOB_FLAG_USE_MASK (VIRTGPU_BLOB_FLAG_USE_MAPPABLE | \ VIRTGPU_BLOB_FLAG_USE_SHAREABLE | \ - VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE) + VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE | \ + VIRTGPU_BLOB_FLAG_USE_USERPTR | \ + VIRTGPU_BLOB_FLAG_USERPTR_RDONLY) =20 /* Must be called with &virtio_gpu_fpriv.struct_mutex held. */ static void virtio_gpu_create_context_locked(struct virtio_gpu_device *vgd= ev, @@ -453,6 +455,17 @@ static int verify_blob(struct virtio_gpu_device *vgdev, return -EINVAL; } =20 + if (rc_blob->blob_flags & VIRTGPU_BLOB_FLAG_USE_USERPTR) { + if (!rc_blob->userptr) + return -EINVAL; + } else { + if (rc_blob->userptr) + return -EINVAL; + + if (rc_blob->blob_flags & VIRTGPU_BLOB_FLAG_USERPTR_RDONLY) + return -EINVAL; + } + switch (rc_blob->blob_mem) { case VIRTGPU_BLOB_MEM_GUEST: *guest_blob =3D true; @@ -489,6 +502,7 @@ static int verify_blob(struct virtio_gpu_device *vgdev, params->size =3D rc_blob->size; params->blob =3D true; params->blob_flags =3D rc_blob->blob_flags; + params->userptr =3D rc_blob->userptr; return 0; } =20 @@ -527,8 +541,10 @@ static int virtio_gpu_resource_create_blob_ioctl(struc= t drm_device *dev, vfpriv->ctx_id, NULL, NULL); } =20 - if (guest_blob) + if (guest_blob && !params.userptr) ret =3D virtio_gpu_object_create(vgdev, ¶ms, &bo, NULL); + else if (guest_blob && params.userptr) + ret =3D virtio_gpu_userptr_create(vgdev, file, ¶ms, &bo); else if (!guest_blob && host3d_blob) ret =3D virtio_gpu_vram_create(vgdev, ¶ms, &bo); else --=20 2.34.1