From nobody Fri Sep 25 02:43:04 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012055.outbound.protection.outlook.com [40.107.209.55]) (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 3280C453A52 for ; Thu, 17 Sep 2026 10:26:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789640764; cv=fail; b=g8wzcl+5RJltNHh4nkod0Pv36qWe0xLCrhVE1shQpWJtHttsUZo/gZ0WWgyCfgOA8GtTSMsjJk2bVe4BXxMuHjW5yicYVWv5aM+1GGzaiHXMrZvTUcCjoAsXInPfZD7CGQdi3Ta81wybWARQKsCQ/N+ybnEiz0YI0410z0m6f8k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789640764; c=relaxed/simple; bh=6OqBCrNlCbKfUHg1aYmgplLZCbA68IamPMGGqzoe4R4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=k1EzZ/L3YZmtLe4JNqQew9tOUB1BcNIcAbnQ0yLRgKqI2pmJDJClmXYrmq+tbriFY0uNXijIAEbRomMwQh99i0iPKFiiqdXeixcBd0JE5s1Ea2PdorLSkBX/SZ4P03xmcyHL+tdlB0jBpM0jz8TLl7WRcXiVdUqGF7LMIvtP5kg= 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=H//BA/rY; arc=fail smtp.client-ip=40.107.209.55 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="H//BA/rY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VkyJCNu/NxGv4pXmO+A+dq9IySPIxEufwfPGsePBcqUCKFfCJIC8iJI150S/ajA+edDTTUiHQBZ6IEBFyYzajMT62bx/g6i8OTgGLwGCcACFGPOpZL5L6BfcfL6XZm4Vi8lUqTdHZvCkmP0LHZGfRACjXnh2NVKhb5hMQ0cJqa5iyzL0zW/Ff/phYF/aUTaRxwyD6EcQkiJy5+rNbMGcZPO7uvsav96Gv/shoKPHDbedjUZHAYy9pRSr6GA737q1RD3iwI9eJS0z/4S+err5Yw6KU02pbRlPMFFNpNP5gx77W72MOf+LlQXGl+zXze1+MKcaMEL1K6QVyCpjoQbkUg== 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=6C13yGlR6QUVJddasY+qp6vrkTamK1OJUKcO7UnvXMI=; b=gyRPxho2bdS3ALhoWNmspqFFnpxYhLgoxbEd7gUsTFCzgLD7yq940grg20TUR8ck/I4DMDfx0GCc6n02du4eIRIQx9buJeyY6QHpk4wJfpJszqv23h8JEdToeRNCTDvphsHZXkLzidEbbg47z2HRzdJ4XSpi9y5DqZUVppoa3l2IsoaFuYwkDimlCkAmYeTq3fgCBQOpvOpSpW9WyUry4rAkO8Krw4NhxtPnWL6pLT65KzdCdcKlYIeEmdeYKOeRhd8SIeHnNCj6g3V4Iq8fF311OQnXGPvvUpbMfDFkzQxxgiClIL1QAKNlreBUpC66LmBnfobEaOtK+cF8qXgTMA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=collabora.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=6C13yGlR6QUVJddasY+qp6vrkTamK1OJUKcO7UnvXMI=; b=H//BA/rY3Ax7DbTQ2adzD7KzbuSszdszuYB97lhyy7oKHPfY0co1jxk5b1mShl26E3DVIP7xlId4AvfaDjNIcfqLvUaNLxfct1HYjRHirCLku+Shh7r9ha5kiu4NVxA4JODTNDKY5/6Sn4/GmjAdNbLVbC2tYhv37tHshssmf/E= Received: from CP5P284CA0238.BRAP284.PROD.OUTLOOK.COM (2603:10d6:103:22e::8) by MN7PR12MB148230.namprd12.prod.outlook.com (2603:10b6:208:630::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.12; Thu, 17 Sep 2026 10:25:59 +0000 Received: from BN7PEPF000000AA.namprd05.prod.outlook.com (2603:10d6:103:22e:cafe::34) by CP5P284CA0238.outlook.office365.com (2603:10d6:103:22e::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.11 via Frontend Transport; Thu, 17 Sep 2026 10:25:58 +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 BN7PEPF000000AA.mail.protection.outlook.com (10.167.245.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Thu, 17 Sep 2026 10:25:57 +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.49; Thu, 17 Sep 2026 05:25:54 -0500 From: Honglei Huang To: Dmitry Osipenko , Akihiko Odaki , David Airlie , "Gerd Hoffmann" CC: Gurchetan Singh , Chia-I Wu , Ray Huang , , , Subject: [PATCH v6 1/4] drm/virtio-gpu: Add VIRTIO_GPU_CAPSET_ROCM capability Date: Thu, 17 Sep 2026 18:25:37 +0800 Message-ID: <20260917102540.1312102-2-honghuan@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260917102540.1312102-1-honghuan@amd.com> References: <20260917102540.1312102-1-honghuan@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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN7PEPF000000AA:EE_|MN7PR12MB148230:EE_ X-MS-Office365-Filtering-Correlation-Id: e7b5f885-3de4-4958-7b0c-08df14a61028 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|82310400026|23010399003|376014|1800799024|10067099003|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 4wV70ls9gmKL1bUH/jo2Q7mqHM+o2XgZn8tF9zeNsDW71+KV83uIc9xYUxdVH6+kpI7piBRSbyc7Q0SK/s51AYABCdXV/kUrrRTp0ZNzp6svMuWCzMpo3RfLeAuP2FDq+lkuoSo30OdRaYi94iUZ6APqUUL56f/n37LTDDgw9wRAg2vHQVMXJDAStSEKs1RvubsRn5SSZFfNpIbaeZnT9eYJYv3jubGOSTxFQ3sDVUsuqgSNgT82Ul9hSj4WljHtDHHuhQp099WPhT+ATCfwqUYGbVFzBlRHlbYQ90JGc38zC7P7m6l26S2e2ZfDvMoAgSaP3JcUgCq3lEj/vv/+0ZHS+hmO05Kghgtf625EBoopds7mGEEvkXT1qpsJ4UXrxphXH8fxvVegnrUxDhRBaEgUC8V4yxyo3poLrW4MNqyuwCqvfUDpFGiAvTwulrVYJKkdknw8e2Z69nsBv+sdxwPaBrzOIlGym4Rh+k3/aoQ8UBOFmay8GBaQlxXQTN6PSrrZDaD40c1cPJ5oyxm1RfHZiisMqhO8VLkGS4M6kjNzPs/8rP/s4wc7QC3ZHpK72uzAOhJX6XjyW7pN5gk66mOYxr6CY6qjH5SGf5GUVXr5xHpzDnJhU2QUadd5X2JnS+iZv0/LFy0vPEPfyfqr5837RghIQ2ljTwj6xuxNsT9O75FI1UW7RznnF+duNYr0FfZ1sqi7uBc/KH7oqN6Opw== 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)(36860700016)(82310400026)(23010399003)(376014)(1800799024)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: d8ar1+u+DziY4t5g0lY7CprkXWAuH4aoKNsWhKqDR0vqtG4xaHULjrC74jZVKTwZixwxlZ/2r9WogWsdOCa03wPFvQXOaMPJvN9KZHHtn1P8sMfdqJw4r9mO7UQUWVc2mtR1Jj7/kTslA6Yr8NgQWl50GyPb77ztDwmfgIyOVBy5+QnkjCywB1z1u/bwqDaN42R3JrLkRuc1ZvTYBpsaRnAcN8tKKEg/8+NTrVCAOvDcfu93orfwDitpCidHiqDzbHlRRqftWUTeNECcUeXu6aS9pKs7vHfktFDrLD+Epysoo/FhCpX6QK9IXrbbbW10EtumjD5oMN8XW1iCjXcMQVh1KF79ghGl+xxTByTsuvfxtVrV54qn6yy3OwCqLbIrUCIb7nUIUr6jttxDdH4d7GzOtdhajq2Gi92UOKnL9lux+RjmHQg6phuli7JgpnNt X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2026 10:25:57.7681 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e7b5f885-3de4-4958-7b0c-08df14a61028 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: BN7PEPF000000AA.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN7PR12MB148230 Content-Type: text/plain; charset="utf-8" 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 4f530d9005..3d4dfadc9d 100644 --- a/include/uapi/linux/virtio_gpu.h +++ b/include/uapi/linux/virtio_gpu.h @@ -321,6 +321,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 Fri Sep 25 02:43:04 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012063.outbound.protection.outlook.com [52.101.53.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 895E24A99D2 for ; Thu, 17 Sep 2026 10:26:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789640768; cv=fail; b=ZZvxlg0zy5HCFAWqexcu52XEdnQOA33xzB2WbqUA7GZPAaQQCpr4QJK/gaPqocFkDmnPpjq7Xwuk8Z2QSAFyPkn3LVyvG77sp7eUMaYcD+Pq0I6B0mmgCCKsjavtLiwu73dLtLiWE/gC87LhwlGRys6RQCb0q3RdLPKlvT+WZE0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789640768; c=relaxed/simple; bh=92fvRtiYjtF+LXCaI4RctzyAbrHzI2ikD/6LPMqtbbo=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FclOfl0HBIo8E7hj4RQ85ndeGgkWv5E8AWZClcjAxs83PKv9q43NFG51ZolKqGfHi3pj7bPBflBp9KsbZXiYyzq0b+4VjHr/HU81/sK1v28G3CJZMugkcTRXGfIHdtywgCavt6bykYsOGdsKMtFeQ8mv1cKpsPqBlX3BUTK1bOc= 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=InrMybxE; arc=fail smtp.client-ip=52.101.53.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="InrMybxE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NkMYca7p52HOo8rrB/oU/QCO/5i1vEQMNObwpzHRUDvYmn5pm+Mdoe7YXLlMgbG0E/FTM0yE6XyDfMJZ3xxXLQXoOzjdHVdSLdoOStFQlGLdICU0yAbZwUXFg8BrUc4B1RQle5a3faJO6H+FcsPWfExbSBnC87dDjEijgJl+jNs++589fAgevfIE8C8320wB0Kuide+NKLK1Dt++3NmTmf32AOdC0Y2CIVMXSqoqr9LzGDPym2HBRm/da+p8cZC6rjWJfFYKBGifiDZS8A8Ut+7kjfSkWyQUSiuVzl6t/9RrhlBZrSQ+qGqW++2mALJZYH40/RpdTO/hXWyYaHH7VQ== 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=5puHwNPs39x6Kv8ohvhndSNHE+f6Fnl4I5ZE9SOHsrg=; b=aRe4BGqyNQHcLqs2jTPxxL4qUWijgsoaVdj59PBzNUyRAe9FnNIurG06V01RC90An7sjE61Dhh4mozLMmNNIncTMQmLCDlK+c9oF+TVOIkJs1l/lcjUndrTYdaT99k62aJ/+aJXzfZoKCFnRD/MZ17OJNfHxh3weYy/aGBFNyk7LzjJc32YBTSXuz6icrUGNCd7xc3oieRDLrx/t+GFSMj3meMxPYAhoNIJasFFfGSZSMV1kkSkplU9xDZlwOHGiTcgU336JAQR6oT8Ye9Aks5l2y4i785B/LjQoEr2ZJbEGh8cz0b7Y2IbGrUcNqAjw7H8cLd5hwTIFSKEAl6nM+w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=collabora.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=5puHwNPs39x6Kv8ohvhndSNHE+f6Fnl4I5ZE9SOHsrg=; b=InrMybxEvD2AFQzqsFSMUy691qICstHAUQ2ZecQLUbji+8/ENQ2OIQy0n5pVIwBLcrnklTZBl4dRNXfYJdxJJlVrBQC7I2jC1cBbqHOC0fWciFzbSiOyX1e2oSFeCmlqlV+kPXX9v3H9Shj302J4gw4YckLiWBWnpQ+52ekUfhI= Received: from CP5P284CA0231.BRAP284.PROD.OUTLOOK.COM (2603:10d6:103:22e::9) by CYYPR12MB8750.namprd12.prod.outlook.com (2603:10b6:930:be::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.11; Thu, 17 Sep 2026 10:26:01 +0000 Received: from BN7PEPF000000AA.namprd05.prod.outlook.com (2603:10d6:103:22e:cafe::8d) by CP5P284CA0231.outlook.office365.com (2603:10d6:103:22e::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.11 via Frontend Transport; Thu, 17 Sep 2026 10:26:00 +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 BN7PEPF000000AA.mail.protection.outlook.com (10.167.245.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Thu, 17 Sep 2026 10:26:00 +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.49; Thu, 17 Sep 2026 05:25:57 -0500 From: Honglei Huang To: Dmitry Osipenko , Akihiko Odaki , David Airlie , "Gerd Hoffmann" CC: Gurchetan Singh , Chia-I Wu , Ray Huang , , , Subject: [PATCH v6 2/4] drm/virtgpu api: add blob userptr resource Date: Thu, 17 Sep 2026 18:25:38 +0800 Message-ID: <20260917102540.1312102-3-honghuan@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260917102540.1312102-1-honghuan@amd.com> References: <20260917102540.1312102-1-honghuan@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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN7PEPF000000AA:EE_|CYYPR12MB8750:EE_ X-MS-Office365-Filtering-Correlation-Id: 0c6472d2-132d-4b11-40b3-08df14a6119d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|23010399003|36860700016|1800799024|82310400026|10067099003|56012099006|11063799006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: jy0L+pJBRmjdpX90B+8HCe5ormhdSRVvkCuhjjSBjrCgdDWyU1GiFyC+ZS0SVcu/9+LN/YUD+RVq9bH7yowjegtGMiQbbvR2nJRRDR5D0piNWUlnapXvE+DUxmR81T8LX7QBJ6xXe16SM9AV+o84q0Cge7PyIBtPjOLr/sDXDtgzpRAvzhdPJE5YUWOYVaXxgFk2JDx2gImnB3+EpXlzkYO+e1MDFFrknfWWe01zsnpAK5pVvrUIwLXmrk0qmV4YK4UeDGnCh8t2zYOY9ZLbHdhGiga1Knj2xjQGjnQdaJszhKxy2+R/jkaHDEUsE7pYZZ5LOWljtLFOICYKsEH289N74x+dlYQ3/untK1HX4VU6YR1RXjD4QQYHVI2toDoxULvh64ggsVB9xOtrUKJ1ni047TtCTDlOtX6gSPUzhpAsufSu6seGfnxxE0YyI5eU5kxHbBPtIXVW3vPSgRO5aI223rkXsFISnC14eHhBYmdjB06wh6ehN6zbz0rT6ISPOvxh84g0eWfeBmOzMBFB39DW1fIL9h0al33NpkWiq2OeHbMRqglNahXF/DO5tjkJyM+hGFNnnz1zsqy2z5pG9iY1E4H1CvUgAl4czBlogjXTN2Z/RNjAF0uOYcTYU09adzntOYPm45DZm1mPc4UQ5cuvPAjBKZoTWgSMtNSU54kFNYtkhBawtN2wWyh5N483cCpWJwopsxG4KILU6pwdTA== 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)(23010399003)(36860700016)(1800799024)(82310400026)(10067099003)(56012099006)(11063799006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Sj/bv76LErY/gGUVI40CBL8dhvcO6J1K4s9eidWCVwXfe7PcD+hSzCJ0jNr4o3We9ebGd+D+snNqGR8wbvgaeVTwPiSV52fGUU922Jh/hba7+njG0D/Xia1jfTFI2HcdOA0MbWycGwyuJDy+/hvHpS7Ft3r2nAqJ+AOY42fJNFYa5F7CNi8zwY3w9U8Qk7Qi/rUw7qmpHNDNjLskCGeRfEIy+1AFuAZQ3agIWdTyNc53fvq6x1zV6EJ4Wi8CZaqxUfV8TVRwpacr1mtDQHvoTyKqUA2A+Luo0dbvxSAPVs4fpVH+Jd0NdAPOaqftSMYAFYRJBj+Da3ZYHB2G/WBFYF7onxLVkF6N/DllxA7nmccsKZXmzMODw9WgP6pO/Z431x6FkHlj+tvrIAwey04NfyZOOlz6AOTCCVIVXDd5YM87FtG+cxzetzz5MUOU4tBS X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2026 10:26:00.2120 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0c6472d2-132d-4b11-40b3-08df14a6119d 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: BN7PEPF000000AA.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8750 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add DRM ioctl flags and a userptr address field so userspace can request a blob backed by an existing process mapping. UAPI changes: - Add guest-only VIRTGPU_BLOB_FLAG_USE_USERPTR and VIRTGPU_BLOB_FLAG_USERPTR_RDONLY flags - Add a userptr field to drm_virtgpu_resource_create_blob These flags select guest pin behavior in the ioctl. They are not part of the virtio CREATE_BLOB wire ABI. Signed-off-by: Honglei Huang --- include/uapi/drm/virtgpu_drm.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/uapi/drm/virtgpu_drm.h b/include/uapi/drm/virtgpu_drm.h index 95587e12ae..6171b4e230 100644 --- a/include/uapi/drm/virtgpu_drm.h +++ b/include/uapi/drm/virtgpu_drm.h @@ -186,6 +186,9 @@ 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 +/* Guest-only flags */ +#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; @@ -205,6 +208,13 @@ struct drm_virtgpu_resource_create_blob { #define DRM_VIRTGPU_BLOB_FLAG_HINT_DEFER_MAPPING 0x0001 __u32 blob_hints; __u32 pad2; + + /* + * 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 Fri Sep 25 02:43:04 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012036.outbound.protection.outlook.com [40.93.195.36]) (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 1C2CB3314C4 for ; Thu, 17 Sep 2026 10:26:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789640771; cv=fail; b=C2c/7vnvFYcvss6nTVDI56t6gEXY0KFklo71ODnNc+fdZD7cr6dCelXll1yKizJEVY0DBYA4EZM0zhgI5ob3uYKJXS9A4W8S4pZNpHHrxUw+YSDi+vyRLIckYTCFfeOpZY1sSuEIE1uKcpZxcpKmajhmIDZa9bSQjzG5YBL6030= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789640771; c=relaxed/simple; bh=cpO977Lsjf52ZbWXy8vU0oPwwGPeD/UHmjs2aqiGE64=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=r3EbD0Sl/v8ZmSdJi3yjPlyAVfwGlt8BCquUZRvRY0YXhmUuwiq06OkctBZ5ymA2BQPXyLB0kX03NMFsrcB9mnKuFlfWt981jbVf3nzD8ZvluJTpfA+RRXpPwXjhx3iftXzD/cM2aHBCIrT0O9ijsIV+y/yJA99fIwaTYPtTBqk= 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=sBofMKNu; arc=fail smtp.client-ip=40.93.195.36 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="sBofMKNu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ev5q39HLbK1o4QfFsNaWBhdzLqGL7zOWalHrH6m/VQ1lWwszlcZ/VMQcbvCWeUk/vR8FqOVobwpYZZtnOYCbQ1C4xqnTn44dHpiyFWwSokVSgxSpXLUCWU4w+xlWWTdVK5h2nlh2VHDVIw7mW6q3aDZJQ2nAaTJCXuTC6A4vUaIln4gG9KLw7GC4RWhRqz5W//ALy3O6xAQKhrogsW5i2GZJaRyqPA0Du6Df1vEaCDH7SJ4GpTw+R/uneGnnaefvtepBDjxklxtS53BRhlP9yqc6F6POZJj8zKk2JnEVa5L6dLe3lNbBXBk/9UJVbYQFTyA8tJmekAmQNNOLP1eCRw== 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=K4N87s/23l2j/QffvfZM+GvGx5ESPKK97hg95UzC4nY=; b=eXDXd8OxKZ2mSA9tWoraBWdIMB1mJeOwh/tjQ85aMN2InqcLjdYmliv3jQGCJmutRYN4q9+X6S1iOTE2ITdhncbog4kOF78AJ6Ab6tpNHkldoQ/k5Eu611SDGa6tMmUncT08/OFgWZrfhdfZAi/LFZTVhuTvRzjFDdpseeRrYmKJygW8ho1PGOLB9SC4C54SmX1qklcs5pkiG43Arbt9q4fT62A4Fu1o0c+mKMG86VFKq3ntZhGyYyO2+fSF0WS9qpzTmbT6N+JEhH26I3KVAQlREQbdNe7nsCM7O7THYnW8hS268KRy7BlWfdcgfhVsWExo1XyikYB9KDxTwKG3eg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=collabora.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=K4N87s/23l2j/QffvfZM+GvGx5ESPKK97hg95UzC4nY=; b=sBofMKNuW8gK8fTwTJ5qxHI4NRW3eHNgDcyAAJ3h4PWM2oO/a9ar0wxfZMm4IwAH8fPpbpnB6qwgRCGfxtflWUgaoR/UiF7M8MdgLCpfg5m3l3qSIo2ne3WJzrkjlmgb6nkAjdDEDzc779M0JVvGIX5Er2WMyoRPBzu78ScrLn0= Received: from CP5P284CA0232.BRAP284.PROD.OUTLOOK.COM (2603:10d6:103:22e::10) by BN7PPF9E4583E15.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6dc) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.12; Thu, 17 Sep 2026 10:26:03 +0000 Received: from BN7PEPF000000AA.namprd05.prod.outlook.com (2603:10d6:103:22e:cafe::32) by CP5P284CA0232.outlook.office365.com (2603:10d6:103:22e::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.12 via Frontend Transport; Thu, 17 Sep 2026 10:26: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 BN7PEPF000000AA.mail.protection.outlook.com (10.167.245.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Thu, 17 Sep 2026 10:26:02 +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.49; Thu, 17 Sep 2026 05:25:59 -0500 From: Honglei Huang To: Dmitry Osipenko , Akihiko Odaki , David Airlie , "Gerd Hoffmann" CC: Gurchetan Singh , Chia-I Wu , Ray Huang , , , Subject: [PATCH v6 3/4] drm/virtio: implement userptr support for zero-copy memory access Date: Thu, 17 Sep 2026 18:25:39 +0800 Message-ID: <20260917102540.1312102-4-honghuan@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260917102540.1312102-1-honghuan@amd.com> References: <20260917102540.1312102-1-honghuan@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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN7PEPF000000AA:EE_|BN7PPF9E4583E15:EE_ X-MS-Office365-Filtering-Correlation-Id: cd7a3f42-b019-49ab-333c-08df14a61338 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700016|23010399003|376014|1800799024|56012099006|10067099003|5023799004|11063799006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: qcVxuKr4vVJsOTZw+b4aIrK7JVZgiFUZde28Fq+ZpfZnjlTjQs4xP9qu/iIflibDbNTKX8NYGmqkgYwFhezoqiG67g14LNuRLYi7YQyc9ME7Y8efUc20MS37BTYEtN6SAnQd/HpIvgOylUr1sRGELUdAOxM3jQKAgbHm3zQOE069ttyCJDaSbpQK4cdDLyNXwDABmR6B7nhtScHkr84DhBUt1FoIebDwZCB4OjIeuO+DNIZc2EQJgYSuxhkZmpgjLHg12X/H7LDT4/s0CHSMcYE/t2aWs6TUglzs7P6MyRllwaFr93ol1qBlet7xOXivXSqNtWZ1j4ZQ9cglQn99raOVqsQfYrcQ3qR8TYblZgrhZ7eZ7T1d0hNeThumIs6jslnkd0cwyHhkla8Kal+UrDWDEKCQlOEW0Wn3Km93PjOKTE0mZu+mZZcIp+ZpfheUGG5Li1gSt1QG9AILRynHRSp4TBgc1Pf8qucLhbn1/FhHk+v3LCRYqOUIswlP72IwbNZ4mE2f+49XdJpJmBWmS/02BwnfnYuJcEAkWyQC8OqXO4FQVuuMkuUsJf3Yq1Pfvr/2TgVYXVp1NKLE014C5oyRKtXCd3nDLn5Q03UYgNXDrgM2RFpSSYqzsgo3Dfwa+ugOFUmaU0BTBNwk3g2KvU+VODACb15b6BDLQ2SdZ+zIUicQv0K7clX/UCUaMejTCTH1dK3omEraE5e995UCKA== 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)(82310400026)(36860700016)(23010399003)(376014)(1800799024)(56012099006)(10067099003)(5023799004)(11063799006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Djmez3Y/Z1U01oECcZaOs8Q1xaCcBa2vfXGy5mjXIp8/C+BI9MYSHmSNTXCIjJef+cW7fyHE7T8dupJKOhv/Fdns5MG1/FZlvZQMPhfPs6qN6y7lIR98z2mU32XmTuYcaPYQt8Iia3r1vWjlAbkBT7PuSyZHtFI1BDBrPVh9BX0aT/7CyhBGG/cz8jJ3oK1Paehc7xM1ffus+JA5Al+OZ4+vQCGqkPxMat4IcgmjPSEqTs2O0QL4+QNXfHpSznE44R/jtjt2z1s3NqdfUKpkHLcl8nhzlVXg0IpJDdr9dwLxB5hkxkEwQ6Dae423GfPoJMOCxGXCl/fkdEQ8Ia9qwkbwOXwRaBnCUclkPitlg/TXSLj6vuaR/mA/GUFz2MGZFAtxETKf7rWB0KylFVW+NGWxb2h2e22yokEN1ufNXu7u3UA/xx0Tb0OljZ2Xibyi X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2026 10:26:02.9085 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cd7a3f42-b019-49ab-333c-08df14a61338 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: BN7PEPF000000AA.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF9E4583E15 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add userptr blob objects so the guest kernel can pin an existing userspace mapping and advertise it as CREATE_BLOB backing entries. - New virtio_gpu_object_userptr type for userptr resources - Pin pages with pin_user_pages_fast() and FOLL_LONGTERM - Charge FOLL_LONGTERM pins against RLIMIT_MEMLOCK - DMA-map the scatterlist and pass DMA addresses when the virtio DMA API is required - Keep pages pinned until RESOURCE_UNREF is queued; drop them from cleanup_object() on the unref response or on create failure - Reject unaligned or overflowing userptr ranges at create time - Return a fresh SG table from PRIME export Signed-off-by: Honglei Huang --- drivers/gpu/drm/virtio/Makefile | 3 +- drivers/gpu/drm/virtio/virtgpu_drv.h | 36 +++ drivers/gpu/drm/virtio/virtgpu_object.c | 10 + drivers/gpu/drm/virtio/virtgpu_userptr.c | 323 +++++++++++++++++++++++ 4 files changed, 371 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 d2e1788a82..fe7332a621 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 9df4c71173..42869b7d57 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.h +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h @@ -105,6 +105,7 @@ struct virtio_gpu_object_params { uint32_t blob_flags; uint64_t blob_id; uint32_t blob_hints; + uint64_t userptr; }; =20 struct virtio_gpu_object { @@ -138,12 +139,41 @@ 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); +}; + +struct virtio_gpu_object_userptr { + struct virtio_gpu_object base; + const struct virtio_gpu_object_userptr_ops *ops; + /* Protects pages and sgt. */ + 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; + bool dma_mapped; + struct mm_struct *mm; +}; + #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; @@ -562,4 +592,10 @@ void virtio_gpu_vram_map_deferred(struct virtio_gpu_ob= ject_vram *vram); 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 49899485be..5c40f5a034 100644 --- a/drivers/gpu/drm/virtio/virtgpu_object.c +++ b/drivers/gpu/drm/virtio/virtgpu_object.c @@ -91,6 +91,16 @@ 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); + + mutex_lock(&userptr->lock); + userptr->ops->put_pages(userptr); + mutex_unlock(&userptr->lock); + mutex_destroy(&userptr->lock); + 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 0000000000..7879735e63 --- /dev/null +++ b/drivers/gpu/drm/virtio/virtgpu_userptr.c @@ -0,0 +1,323 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include +#include +#include +#include +#include + +#include "virtgpu_drv.h" +#include +#include + +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; + + /* + * Keep pages pinned until RESOURCE_UNREF completes. The response + * callback calls virtio_gpu_cleanup_object(), which drops them. + */ + if (bo->created) { + virtio_gpu_remove_from_restore_list(bo); + virtio_gpu_cmd_unref_resource(vgdev, bo, false); + virtio_gpu_notify(vgdev); + return; + } + + virtio_gpu_cleanup_object(bo); +} + +static const struct drm_gem_object_funcs virtio_gpu_userptr_funcs =3D { + .open =3D virtio_gpu_gem_object_open, + .close =3D virtio_gpu_gem_object_close, + .free =3D virtio_gpu_userptr_free, + .export =3D virtgpu_gem_prime_export, + .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_unaccount(struct virtio_gpu_object_userptr *userptr) +{ + if (!userptr->mm) + return; + + atomic64_sub(userptr->npages, &userptr->mm->pinned_vm); + mmdrop(userptr->mm); + userptr->mm =3D NULL; +} + +static void +virtio_gpu_userptr_put_pages(struct virtio_gpu_object_userptr *userptr) +{ + struct drm_device *dev =3D userptr->base.base.base.dev; + + if (userptr->sgt) { + if (userptr->dma_mapped) + dma_unmap_sgtable(drm_dev_dma_dev(dev), userptr->sgt, + DMA_BIDIRECTIONAL, 0); + userptr->dma_mapped =3D false; + sg_free_table(userptr->sgt); + kfree(userptr->sgt); + userptr->sgt =3D NULL; + } + + if (userptr->pages) { + unpin_user_pages(userptr->pages, userptr->npages); + kvfree(userptr->pages); + userptr->pages =3D NULL; + } + + virtio_gpu_userptr_unaccount(userptr); +} + +static int +virtio_gpu_userptr_get_entries(struct virtio_gpu_device *vgdev, + struct virtio_gpu_object_userptr *userptr, + struct virtio_gpu_mem_entry **ents, + unsigned int *nents) +{ + bool use_dma_api =3D virtio_gpu_use_dma_api(vgdev->vdev); + struct scatterlist *sg; + unsigned int count; + int si; + + count =3D use_dma_api ? userptr->sgt->nents : userptr->sgt->orig_nents; + if (!count) + return -EINVAL; + + *ents =3D kvmalloc_array(count, sizeof(**ents), GFP_KERNEL); + if (!*ents) + return -ENOMEM; + + if (use_dma_api) { + for_each_sgtable_dma_sg(userptr->sgt, sg, si) { + (*ents)[si].addr =3D cpu_to_le64(sg_dma_address(sg)); + (*ents)[si].length =3D cpu_to_le32(sg_dma_len(sg)); + (*ents)[si].padding =3D 0; + } + } else { + for_each_sgtable_sg(userptr->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; + } + } + + *nents =3D count; + return 0; +} + +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); + } + } + mutex_unlock(&userptr->lock); + + /* PRIME takes ownership of the returned table. */ + return drm_prime_pages_to_sg(obj->dev, userptr->pages, userptr->npages); +} + +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) +{ + struct drm_gem_object *obj; + int ret; + + userptr->start =3D params->userptr; + userptr->npages =3D params->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; + + /* + * Allocate the resource id before GEM init so a failure here can + * unwind with a plain kfree and does not need a special id=3D0 guard + * in the shared resource_id_put helper. + */ + ret =3D virtio_gpu_resource_id_get(userptr->vgdev, + &userptr->base.hw_res_handle); + if (ret) { + mutex_destroy(&userptr->lock); + return ret; + } + + obj =3D &userptr->base.base.base; + obj->funcs =3D &virtio_gpu_userptr_funcs; + + drm_gem_private_object_init(dev, obj, params->size); + INIT_LIST_HEAD(&userptr->base.restore_node); + + return 0; +} + +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, +}; + +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; + struct virtio_gpu_mem_entry *ents =3D NULL; + struct sg_table *sgt; + struct mm_struct *mm; + unsigned long lock_limit; + unsigned long start; + unsigned long end; + s64 new_pinned; + unsigned int nents; + int ret; + + *bo_ptr =3D NULL; + + if (!params->size || !IS_ALIGNED(params->size, PAGE_SIZE) || + params->userptr !=3D (unsigned long)params->userptr) + return -EINVAL; + + start =3D params->userptr; + if (!IS_ALIGNED(start, PAGE_SIZE) || + check_add_overflow(start, (unsigned long)params->size, &end)) + return -EINVAL; + + if (!can_do_mlock()) + return -EPERM; + + if (params->size >> PAGE_SHIFT > INT_MAX) + return -E2BIG; + + if (!access_ok((void __user *)start, params->size)) + return -EFAULT; + + userptr =3D kzalloc_obj(*userptr); + if (!userptr) + return -ENOMEM; + + ret =3D virtio_gpu_userptr_init(vgdev->ddev, file, userptr, params, + &virtio_gpu_userptr_ops); + if (ret) { + kfree(userptr); + return ret; + } + + mm =3D current->mm; + mmgrab(mm); + lock_limit =3D rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; + new_pinned =3D atomic64_add_return(userptr->npages, &mm->pinned_vm); + if (new_pinned < 0 || + (new_pinned > lock_limit && !capable(CAP_IPC_LOCK))) { + atomic64_sub(userptr->npages, &mm->pinned_vm); + mmdrop(mm); + ret =3D new_pinned < 0 ? -EOVERFLOW : -ENOMEM; + goto err_cleanup; + } + userptr->mm =3D mm; + + mutex_lock(&userptr->lock); + ret =3D userptr->ops->get_pages(userptr); + mutex_unlock(&userptr->lock); + if (ret) + goto err_cleanup; + + sgt =3D drm_prime_pages_to_sg(vgdev->ddev, userptr->pages, + userptr->npages); + if (IS_ERR(sgt)) { + ret =3D PTR_ERR(sgt); + goto err_cleanup; + } + + ret =3D dma_map_sgtable(drm_dev_dma_dev(vgdev->ddev), sgt, + DMA_BIDIRECTIONAL, 0); + if (ret) { + sg_free_table(sgt); + kfree(sgt); + goto err_cleanup; + } + + userptr->sgt =3D sgt; + userptr->dma_mapped =3D true; + + ret =3D virtio_gpu_userptr_get_entries(vgdev, userptr, &ents, &nents); + if (ret) + goto err_cleanup; + + virtio_gpu_cmd_resource_create_blob(vgdev, &userptr->base, params, ents, + nents); + + *bo_ptr =3D &userptr->base; + return 0; + +err_cleanup: + virtio_gpu_cleanup_object(&userptr->base); + return ret; +} --=20 2.34.1 From nobody Fri Sep 25 02:43:04 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012037.outbound.protection.outlook.com [52.101.53.37]) (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 B393D466B00 for ; Thu, 17 Sep 2026 10:26:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789640774; cv=fail; b=n256IvTxIbmndm/q3tmshMQDQ/FM6YuhMEmsv5+nczv36kf7XeTO192pUWFBDG3PLCNevUYDX5R2Ki8tf8Tsyc886ESqjrDzfZWtRD1f4fQS4IYsJ84yFBmnlnlibiZdpylrdkyUhmKhFRSmmP2l6J86XLVdoWnDYJiemI/ROmY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789640774; c=relaxed/simple; bh=dQ8ezoOGcjLBmCEsjb2ROFVSLQq84RqLSYupMWX510I=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sshtq7zYHFXsGZUBI4YV9PWcKkDvVC5M2jgptMjScsmzoYTTXWOoE2+Uv96+284RJgEqg2rp4okLFLi6NMBBb4RaWa2giM6CZ4tulfHxYIe74raDncIQfhPn8m5LvBcxwmYA7F42aNPsfVCDMGtdedWZNbfQv7ke1jdS6GM+yVA= 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=U5X98vPA; arc=fail smtp.client-ip=52.101.53.37 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="U5X98vPA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vTY3pBNPT9jV1tMmkTIZXgOQ6IpIndsK3UnkNCa/rk8gL7h/v7sF4C+YcTzTOusvnONLYhnPNBOmMplD5lraILHH1mmYT6h7XWVOt3Ws3l20Z1Yt5ost5xLmZZNbz6ITK6ucvOuTCszugjD3Qc2ByjGFHbRx8RPjlDgB6XXvP6BLTI+y+wNTFo2dK1cS8GfcbJnrCouTlt+lg8iaYGQ45PFfHaO3lRTQcQSiggazdBaBUuihdiohV+lPkTwZQ6Ouk2SIeqOHvukdxy2eWvwCq3CapF1K0a+g45MPykNVd46oN04Hq2Dsi4gqCQNoGVXUW1Mjxkv6OT/UFYfoXx/Dlw== 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=Wk0vWSr6OIUpvKBVbdsZQRqX/zYPqlbIMQNclFq5GHI=; b=HHQ1kWqKa6dhoDb1BKK72Y8ZCT1OZCz/YXJbbRcGrF6REAc0ztV1bB9xFZGNzOAQfRjejugHJhyIogQw6CHf9d6DegVrQkh2eWvIjJ/Ndz/UgXq9HzvBs1xI4tWGqzWv7f/o08b7GukhC/yGgULAWDbQOSzns+2Pbqb5s68peCmQGfzdsIX1/jG0s2hxz4Y456TABIFi47gP1QvyLrz6+wL5vkPfDYcDuFVEHcUiI7tm9Lc7xGcKQYS+SU5a+c2i6vvH0+rRFDhmfadktO4T6Q7h1tVkrLtHsGGIXlhezP//5WLmfxYgjqqfLIpXL+cB69rq7YyuQXnVAR/SemjxSw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=collabora.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=Wk0vWSr6OIUpvKBVbdsZQRqX/zYPqlbIMQNclFq5GHI=; b=U5X98vPAhyCnMlD5dLBoEyyq/nZlgmlLElnXitwYN29Iq+XH8v2jU2LNUdOjlvMGGlYMCWxUoNC9fT3UGSPMRlnVcj3sOtQizKnint9UKaVDrawIv53OLPIERHy9ftzI89aUJzAspe5tOHS+yxEiQXHg0bFxaU1Ou0JTrLUU8eY= Received: from BN9PR03CA0437.namprd03.prod.outlook.com (2603:10b6:408:113::22) by PH7PR12MB8053.namprd12.prod.outlook.com (2603:10b6:510:279::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.12; Thu, 17 Sep 2026 10:26:05 +0000 Received: from BN7PEPF000000A9.namprd05.prod.outlook.com (2603:10b6:408:113:cafe::92) by BN9PR03CA0437.outlook.office365.com (2603:10b6:408:113::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.11 via Frontend Transport; Thu, 17 Sep 2026 10:26:05 +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 BN7PEPF000000A9.mail.protection.outlook.com (10.167.245.233) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.8 via Frontend Transport; Thu, 17 Sep 2026 10:26:05 +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.49; Thu, 17 Sep 2026 05:26:02 -0500 From: Honglei Huang To: Dmitry Osipenko , Akihiko Odaki , David Airlie , "Gerd Hoffmann" CC: Gurchetan Singh , Chia-I Wu , Ray Huang , , , Subject: [PATCH v6 4/4] drm/virtio: wire blob ioctl creation to userptr objects Date: Thu, 17 Sep 2026 18:25:40 +0800 Message-ID: <20260917102540.1312102-5-honghuan@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260917102540.1312102-1-honghuan@amd.com> References: <20260917102540.1312102-1-honghuan@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: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN7PEPF000000A9:EE_|PH7PR12MB8053:EE_ X-MS-Office365-Filtering-Correlation-Id: 875798e6-eefa-4568-ef28-08df14a614b8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|376014|23010399003|82310400026|1800799024|11063799006|56012099006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Rm1VaoMRMMUm8ganoM43p0d3hBqOdMh7IjZdHcmTNDnQZDQ3lsJgbS88kQGcF9/aHM9Rf9288b9qlKdjOL51bpyUKlBrjXrpzM6cnlnMLNVs/hWuMjJtDYHT4lneoEAxGUtnS8O6jcoHOFYRppKCLZIYykQMDThBij+mLx+458zD+W4vvmbyDISu4gdPt6PfXpHApT/UkPgPWfxNdAeC5cVKjmziYUYD4eI88vKUBa8vifR7+DFiyx7jtSZmE6bxcgIJgJAE4N/nHYqoTaWCB6697Mi8yAIGESHt5OewgwdDvvL5hpIIvJ37WYwT+DUUAGmMuBoJb6TVbRbx8gq1OOiir7+gjdzJreu9OT+CgPuSHZDh8zUm1LwjQviMvcN+hAH92TggJvt64jwvIg+EWZO4qri89aYNK6yLilGZ044SBH8YuQsoN/C0pG6oS8sWEICqhZYA4nFOiTIbD5l0iMdh/mtO38vmLp7QWuLJ1yniAcrrt4dwO3aj/vmmm4khc6T/B75tnzz51YGuICKofsMofQm4K3oHhN4zQqQ9OxkLpAdoqFv/gV1AqpbHmBFoevPdCS/krPSMpThsvtiBKnVqV2FoVKVCNXZTSVYCkZTtOcoSkymuDnIviHkkKURTTP24l1TWKiFj1uDRgGaB7a6Uef/PO6OUqSKmg6VwUHdUyFmJiwVL6t2vN14V3EsT3uJ6K3nVX/kFeX1e92K0Yw== 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)(36860700016)(376014)(23010399003)(82310400026)(1800799024)(11063799006)(56012099006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UJSwhuavdMGfiXc6smNzwnt0ei5SWoWFKOiOg+9xOb7JIRe6Q4gwau7o+dPfcqZM3uBkZZbzcK0QIvPF5izMnMTmBwbI0ExpLeEt/FL4EZwIZI4sEUM8ntQUg6s/BgwaQBoQ0NU0d+g+du2pUeDjbpBzBE0OT7jmTFimJNgtS2dqwecAq7Q5rWXjo1D0XPeoA1eKUNkmVTMbABbiIL+T6E/IYz/w44irZWarMccNSkqYnBYl1KqaTnT88kvyZGc0SYwmN5C3NtyQ1m8tDYMTzR1lUpV+0J29HnBLYOSSAOPq13/CrnWV6SMVzdwnRQlPswV3pfILZ2VYa1oNgN6OLrXMPHlK9FeoirpLhiKXqtRI1vS1JloGyEUEbDa4tDuFLUFuUHTTQz6VtzdOUhQf23eyS0Gbfj/xde5Ew+LogcTQLlgiqyq+MNo7SjONJ8J5 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2026 10:26:05.4311 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 875798e6-eefa-4568-ef28-08df14a614b8 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: BN7PEPF000000A9.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8053 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Integrate userptr into the blob resource creation ioctl. - Include VIRTGPU_BLOB_FLAG_USE_USERPTR and VIRTGPU_BLOB_FLAG_USERPTR_RDONLY in VIRTGPU_BLOB_FLAG_USE_MASK - Require userptr if and only if USE_USERPTR is set - Pass the userspace address into the internal create params - Call virtio_gpu_userptr_create() for userptr blob requests 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 3d8e4ccdb7..616d248b3d 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, @@ -458,6 +460,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; @@ -495,6 +508,7 @@ static int verify_blob(struct virtio_gpu_device *vgdev, params->blob =3D true; params->blob_flags =3D rc_blob->blob_flags; params->blob_hints =3D rc_blob->blob_hints; + params->userptr =3D rc_blob->userptr; =20 if (vgdev->has_blob_alignment && !IS_ALIGNED(params->size, vgdev->blob_alignment)) @@ -538,8 +552,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