From nobody Sun Feb 8 22:00:43 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010009.outbound.protection.outlook.com [52.101.85.9]) (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 2A8332D248C for ; Wed, 12 Nov 2025 07:29:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932601; cv=fail; b=C2fxXKCMdstyIHRzwGDme7A7rpOdxmu2R5RRKaugcCjfsQ2mzSHQhSsrIKchW637soSUvg/th2s/kCK/8tUwIQ8cNNTIIkn9rNpzj0v96jCeJvSOaFKNzze97yM/LRB/yjLDZLIqF820KlZ3pzoekmtFjMr0G5m9xf9DmCvY8KM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932601; c=relaxed/simple; bh=TBXl6EmSEl9n9g82QIQZCfXJN/9ueCREyXn43/+ORWU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TspQV++Mwl9M25kCHNrMXJ8nnIgq7qYowLFaRYEtK6OOqkhGSKygo8JFTilbkwpYQAwDfT+Lm6Su4pLgmRjsX2mZwRID5iNQnE1Ndd46GnXwOrNfLprRw0RwG25S21F4R/qB/dpmCVKpURb0Qp9V5Z5aC1hm/3KNRVihDZmlb6w= 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=k7He2YPY; arc=fail smtp.client-ip=52.101.85.9 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="k7He2YPY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wfQCQP9o4jVqd4ImjJM2/G42EATRZbBXlzQQzXKFex0CzsW888DvXX3JJ9ljNl77sXQDRAxPiS/D12FgNO0zf2yWw77oklZihnUfFGZZ8XB/rntglhe+Js7y+ZEQDDcWJWzpY37gTZ2xmQ9N7JIl48BIDIJTHtEtV2SCC7N7f5G2CXOtXHkx7l1lAEdElTeQRJDNNz4orohYWsfaqJsH0axuIgdoWjlYFiPr90ETdhvT3zvLWzWy6FA0AxC8m+6hP2nVavgotKyAcgrw6sPDO076drz2f4ba3IMa9nYeCgClxbEaUf000bBCPbxIe0/3NAXkvSMYXHbTVOjtj4ZFlA== 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=pLTKlYfsyFItZP/YxHj3rdg8VlpV3fo8cndrFZz2Lig=; b=mEL0s7KEVPSUoYU0bqe2SWaDfQwfiApIjyswR51ZTRcoa1j27PH4g8uWJ4ABF617KSoQidzr1POPFyBCky7loqLWVCUu4Nlyhw14XTJgufIYAV0et06dWTUm5hg1i5m4GIB1ZWLBP1gk7wt/XGs+wq6o3QZGUskjy00gpTfd1hRZB/pTaVjY7VkoCGbz8lVYaTSyw0Y3Nb0mzNIqxCwiRrRShGpCej2R80JlbCyQJdQu1gxP5paFok3r7kePEclyhmrPORNGpvXI0JVgbNyJAB/f5y9tjXM2G/XDf+gYWDJ1orjvD5554+y9AzyGmhPR46l12H7lSGu8Wzgj1ztI1g== 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=pLTKlYfsyFItZP/YxHj3rdg8VlpV3fo8cndrFZz2Lig=; b=k7He2YPYGCYPWdAjuG8r6C3RI6r+/v/5OLWYzgUGGb6x4D6dTxtm2QutNNRVEkl5wEJKezWssmel432Ah9UkR91CyZ4cLjuXvWFhF9mPXkLswbOnzAZZe42dEp8AoZ8q3teg88dWzw8cEaWVeL4xS1B1BPSX4NUJ9LwrnB9exN0= Received: from SJ0PR03CA0109.namprd03.prod.outlook.com (2603:10b6:a03:333::24) by PH8PR12MB6889.namprd12.prod.outlook.com (2603:10b6:510:1c9::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.16; Wed, 12 Nov 2025 07:29:55 +0000 Received: from MWH0EPF000989E8.namprd02.prod.outlook.com (2603:10b6:a03:333:cafe::14) by SJ0PR03CA0109.outlook.office365.com (2603:10b6:a03:333::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.16 via Frontend Transport; Wed, 12 Nov 2025 07:29:54 +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 MWH0EPF000989E8.mail.protection.outlook.com (10.167.241.135) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Wed, 12 Nov 2025 07:29:54 +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; Tue, 11 Nov 2025 23:29:50 -0800 From: Honglei Huang To: , , , CC: , , , , , , , , , , Honglei Huang Subject: [PATCH 1/5] drm/amdkfd: Add KFD_IOCTL_SVM_ATTR_MAPPED attribute Date: Wed, 12 Nov 2025 15:29:06 +0800 Message-ID: <20251112072910.3716944-2-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251112072910.3716944-1-honglei1.huang@amd.com> References: <20251112072910.3716944-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: 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: MWH0EPF000989E8:EE_|PH8PR12MB6889:EE_ X-MS-Office365-Filtering-Correlation-Id: 7796e9ec-7b45-4689-355a-08de21bd4672 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?lIM0yT2x7l509NUPb3wIeAFKfF/vEKQU9oZyqcOnbtj1d6Imawr+ThFKEkAS?= =?us-ascii?Q?YQYRlgXv3QmC0ZmbZNDhueyhdBHk5sTcSfGDZpvzofsL7VeTuuGc8y4/5mae?= =?us-ascii?Q?TqcVWwbnhp4Pp61QQDABZwETZ06NJu5TgYoWgYHkmhhRXdXyqZhZ4kjz/uLL?= =?us-ascii?Q?3T5W6LhWWPZ33wtTgFQEI5OTO4KFGHI2Y1gDbT7zeusTOiMaUj+9K3PBRbRH?= =?us-ascii?Q?2mbiaG7stOBdCQkwnHYPDqLtdfsaPPxRXalwSxQaUISBGBsMGuVkF2YJfz1U?= =?us-ascii?Q?TUzuokxyimoiMD+bDMnynMFFzq5nsJhMXISq1n68+XMC3rAb8VUjZ5BtQrB4?= =?us-ascii?Q?8MGMVbiOfdWH6112qCTAPXjr2Ky1CUVAHJiDXmMrjhqqzGOktMF/x2kLtUGH?= =?us-ascii?Q?qR3KLceX9Nealt5PD0CnkQEypd0jCXNe/AFx4hVnszWmE8KuV4BCamxF55/S?= =?us-ascii?Q?lgEW8MwgyJHvUWutWsTXVeg2MJzdZ8iYoLjgl8BuWuAufbG2//tmZ25eXn4Y?= =?us-ascii?Q?Cm/EumrCJTIQd+rFGNUFUzaJJ8vuChRmf+ns7a2PQcHXSGQM2n5Qn9gmYw1G?= =?us-ascii?Q?c3+OVtq0oNJ3N5ND6pCpMT1al95vcR4e4gozczQhjLDM6t/TDKStiYsi6npd?= =?us-ascii?Q?duBGiFGiQgTeSGPLZZp06ifZpF+AsJM3A/pzR+xfnlU+sXFvV+wND3HC1Fsr?= =?us-ascii?Q?JvofDthbmXTE8IBIDoXcn/MTxDgtHVVdp8xT1TYzNxDXLKmHMCJyu/JInbZu?= =?us-ascii?Q?vsN8RCkzOJEseN9RvaYQQqnH+j8vg2Hs0Jh0QZAU/Os4m//PL27JOgGZlmET?= =?us-ascii?Q?qJkk5F9+ndbEYJzOWKfwvTYyuKqhPNj7rnrVZkC5JGgn/qfcUe1tl0R+tKTO?= =?us-ascii?Q?fOxzluc/lYcGDoLmFk2IkwsxmkeJop7E7lwL6FBPfKKhR5GrO8tY4Lj2rj7r?= =?us-ascii?Q?U7UnLM8RvQy3uAwBkcCx92omOf12NNfOsWW8iaQUcOu1mVRlLa1A9E8zpejP?= =?us-ascii?Q?i3TZj4tB/Uz6p1sAf1ECRbPeLXO4bMS+4XBT2JzxQa0fGSQWR1Aiwg/MkXUM?= =?us-ascii?Q?LTlGZANb4m8ULDtVqU8Ntju4HS1Wmtdg90EgxN3Wmth557QLl18Qkbkoko61?= =?us-ascii?Q?ef0I3XqjWYp9eF7AhDhCNzjerL2m5HfS+UPVdvjjQ7Sttspf++rVnp8j2s2q?= =?us-ascii?Q?yKM7vZ3hDh7I1tJtZg0kDn8To2Z27EXMsSA59fWLt3wQGFKSrwGDiyX48LDn?= =?us-ascii?Q?MwuXJNr0SxePXVy5WhyCF2UG23HKe+BomgJJLLPDMkIo+SBdbHDXx/v09Usm?= =?us-ascii?Q?gFnc/TtwYkbB1CsrZHWZkUwlRNJA8Gl8znCa6IEpUsHg7TJ6yPRsOv7Ka7cs?= =?us-ascii?Q?dzqAA5viC6TXD9h5NcQ2teoF/Y7DovEdNpHgRcVmtU9oB2nVDqLr2B6J6lvv?= =?us-ascii?Q?2JYg8qvFdKlD42dcJZAgwreg+WWHrHFISGVZJk7qWsErjkGCNQ8SbLZAcaue?= =?us-ascii?Q?f9V77rzutl6OFt3XwEtPOhadR7VwIAIw6rdTK9E4Sth0N1Cgu8X9vMeTiSLw?= =?us-ascii?Q?FCB182HLBG22eJoU/EE=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2025 07:29:54.6289 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7796e9ec-7b45-4689-355a-08de21bd4672 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: MWH0EPF000989E8.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB6889 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add a new SVM attribute type to indicate whether a memory range is a special mapped VMA (VM_PFNMAP or VM_MIXEDMAP). This attribute will be used to support non-contiguous memory mappings in SVM ranges. The MAPPED attribute allows the driver to distinguish between regular anonymous memory and pre-mapped device or reserved memory regions, enabling different handling paths for page pinning and GPU mapping. Signed-off-by: Honglei Huang --- include/uapi/linux/kfd_ioctl.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h index 2040a470ddb4..320a4a0e10bc 100644 --- a/include/uapi/linux/kfd_ioctl.h +++ b/include/uapi/linux/kfd_ioctl.h @@ -703,6 +703,7 @@ enum kfd_ioctl_svm_location { * @KFD_IOCTL_SVM_ATTR_CLR_FLAGS: bitmask of flags to clear * @KFD_IOCTL_SVM_ATTR_GRANULARITY: migration granularity * (log2 num pages) + * @KFD_IOCTL_SVM_ATTR_MAPPED: indicates whether the range is VM_PFNMAP or= VM_MIXEDMAP */ enum kfd_ioctl_svm_attr_type { KFD_IOCTL_SVM_ATTR_PREFERRED_LOC, @@ -712,7 +713,8 @@ enum kfd_ioctl_svm_attr_type { KFD_IOCTL_SVM_ATTR_NO_ACCESS, KFD_IOCTL_SVM_ATTR_SET_FLAGS, KFD_IOCTL_SVM_ATTR_CLR_FLAGS, - KFD_IOCTL_SVM_ATTR_GRANULARITY + KFD_IOCTL_SVM_ATTR_GRANULARITY, + KFD_IOCTL_SVM_ATTR_MAPPED }; =20 /** --=20 2.34.1 From nobody Sun Feb 8 22:00:43 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012042.outbound.protection.outlook.com [52.101.53.42]) (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 6F0E52C21F3 for ; Wed, 12 Nov 2025 07:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932609; cv=fail; b=csGDXf6NkfxhIWUqOQLsypEh9WB7KSucPTq5kEi54huuKWgHPk/1jh8EJ6DwmtMyLpRhAlQ+fK8H4wVjKCgaYd9d0maeQAwlPey8K0eg1Rb873piiVCKFn4SCjIfgbz2vp01GCLjz0Mo/IUe8nf+gCHlgnEZuiUoImijM9+Lm4Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932609; c=relaxed/simple; bh=bn1GvCUhn/c5ElBWmqd/Yb0AEtaGr0zjEHarDykGvIk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JSW4B39vNQjBcSlyb7qnCSQrezLdqzG/2UBqp6UV+XTUM4voKWbuj790srQZk1OW80/NzmxHehwEEClXc9q7Tk72Fo/qCQp7iFlg4YGdzDBcJ8unaCZTvrgijkb7WYXnGsTp6hIEfVVEcaCJupctShQ/SpDuw7l4LZZdAGvqLng= 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=zr6SoiQN; arc=fail smtp.client-ip=52.101.53.42 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="zr6SoiQN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=f7RhXUSACg7AouJqNhfvBgHekNRSIadraF1PzKG6gMe4relQLXPo9usBLlrc8VMBJ/u2l+gWwmuNsyz3a7ds3qau9ShtHwlgVJYnLI7ESSGKpmwfcr2kVJhYHjTJsnMzRPGQ46CJwFRII1E1fxLJW2EWFvEa4sXH+DiUIPfbhpU2o5xps7ZISve84XcSgRmKhvHEKw7a2lsNlKuXwWGsOGkXotPTIlU//VWck8FOKA1QkvP3Mlt4ZcPzpUvU14wVFxc+XSQn0FQZt6CDyphVeeIvC5Bx1a1l4Tnuw6I/i5uIA/fku1xbI5w99UnaUt0PuVKSTwKvjSZFFbeYnetrdg== 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=NO9nHqpa4n1BllvLemZcCmcwFCUr6R8l5qDSl5DARTQ=; b=A6/8Qj9ySEZgTZ55GGvDHGS5k6pid7YnhfKu6l/Qr/iZhmDQyqd/HvAw6+tRstD2qmnfc6UWrBjpsXp/NRZQzkxn73pHQT/s7pJG1KjxLmhyCiHE/GNzAjuUH3rpcehwoNtuLl8+jHz+npJGeNY9T00kfqgOeroDe/UxvNBEfwMBi5WRjeJmGlVqz5J+xyprb0ikmBZ05OOhtqFHedyQuZRNPGYU2LLpuQ9mFEvPdvQdWk8pJA8BWT5RS9EWGnfHOfpw4/69mybauv/q1wdLct3rmSkk3ML/3U675kQOHWvnAWn3nQAia1/YIWl+KBd8IRxH01cEmx9pK3oqGWoH2Q== 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=NO9nHqpa4n1BllvLemZcCmcwFCUr6R8l5qDSl5DARTQ=; b=zr6SoiQNydfD1o3qyt2DzHcGaebshDIPdZmqRJYTDjc12dwHaepc+LOZvBJhxiKj93XA5X1gMPJIyI5/XigXD3oMaqQ/wvP8ya8SXFTClZfH8YrwMJ+RhPK7IMQZpXR4mw0Be0s6TzBPh8jRJlb3OLHEtNrxpp5ktBqT4UmmRYQ= Received: from CH2PR07CA0060.namprd07.prod.outlook.com (2603:10b6:610:5b::34) by IA1PR12MB6577.namprd12.prod.outlook.com (2603:10b6:208:3a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.15; Wed, 12 Nov 2025 07:30:01 +0000 Received: from CH2PEPF0000013E.namprd02.prod.outlook.com (2603:10b6:610:5b:cafe::2b) by CH2PR07CA0060.outlook.office365.com (2603:10b6:610:5b::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.16 via Frontend Transport; Wed, 12 Nov 2025 07:30:01 +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 CH2PEPF0000013E.mail.protection.outlook.com (10.167.244.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Wed, 12 Nov 2025 07:30:01 +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; Tue, 11 Nov 2025 23:29:57 -0800 From: Honglei Huang To: , , , CC: , , , , , , , , , , Honglei Huang Subject: [PATCH 2/5] drm/amdkfd: Add SVM ranges data structures Date: Wed, 12 Nov 2025 15:29:07 +0800 Message-ID: <20251112072910.3716944-3-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251112072910.3716944-1-honglei1.huang@amd.com> References: <20251112072910.3716944-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: 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: CH2PEPF0000013E:EE_|IA1PR12MB6577:EE_ X-MS-Office365-Filtering-Correlation-Id: 2b0a4c85-f299-4e3b-6c97-08de21bd4a73 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?UifOFBa21tCLSvRaOtIa8XMqIl+PBS42stJKUlTTHHrg87RB1rY1e/iYhCQd?= =?us-ascii?Q?KE+q8Zo3y/+ApWySoS7eUoYQkquXm4Yg4tNL4l+8dQ/D9KdA399UFSs4CH0b?= =?us-ascii?Q?ANFy/ndTYK+nkPzLqvXSz4BMkJbaZeTM3EDLDcyn40E9hQmyXgaaAxOm6K0m?= =?us-ascii?Q?dO57dj3MW2QnuvHRm/XFyVADk0LJo6ebOJU7zvU70jBPS5vSBRWCo2KaEjcy?= =?us-ascii?Q?O/4MHIOtjby8/YnqlxQahRWfNPslmwB0Mg5Uvr+L71fvytKvtEGIVfu/nsWG?= =?us-ascii?Q?jz/PAFsPL+aw7Pi9WAPjpbsVmDU6WlXJCAZs/DGU8kV9NQ+SODFMEGgmw3+J?= =?us-ascii?Q?CiaZgK1WZ/MSv2P0kGUbRA38FeH44a0VxBunpcs56Ix3l4PPwOlwN3rXZveC?= =?us-ascii?Q?9R/vbHUtb/bHCbcr/0IKKzB/CecRahZtM1eeZSmqrA2f6YA1pl6D6au7emwo?= =?us-ascii?Q?f3Tl1GmT1R+97aJYRnmUegzZyin+xD+esSXtRs4p6NPnfk2mfCCSsDK3FjdT?= =?us-ascii?Q?SzY12loozJtfd4jDpdfFkVCtilUmjJl3dXVjYgXFjyuKtNB2nOTpCmPfvc+Y?= =?us-ascii?Q?v8smXVnmSEOioURLqMcgrww8RvCH0W9LDo1yz0PXWljV0DbQ3V20OMMxhVX2?= =?us-ascii?Q?RyRoN6M0ySMwQoIYZ508EnJa9czReYJ9xMTJsAeBPQN5utuAnHvFLB4Jo2rm?= =?us-ascii?Q?2RnnIFp5kUaX2jUTb1fnMm50qawYeheInKArPec3KIuvGYSIxA93IhrSMpvm?= =?us-ascii?Q?Pvysa9OJTaFmwG3qVGBMHh3Wu2T8QFijSjVKW67btxaPbqu8I1M2Q8Ia8rpF?= =?us-ascii?Q?/uLyUoHY/iOYX8r74OJ71l8dEOxBW0bNv1V+zA+B9MYD/tFVYJeK5F+gWUeO?= =?us-ascii?Q?yrct4TrPckOk45vK6VXar0ynAxhQKjjEkjTc15l4oPUetESl2yr28Mebiwkq?= =?us-ascii?Q?fiueXBE78JZ++vIZnJlR6YqLOI0MjhpHnxpShX/0MZDFrkH1Z6m9GuvGBnIW?= =?us-ascii?Q?AtRi4wdOuhAj5ycBAqF1V9aiAvofiLa2ZH7N7Oz60dOOYqEV09jtUt7AWAn/?= =?us-ascii?Q?kBAUZa8wJKoowQYynOIXjuqIL7vxROCt+cWPsqqyt7oVkksZPRX8bD/u/efJ?= =?us-ascii?Q?ZehCiweWhARk9Jp6rtVLPRLCUbBtvFcktLnDl3qHdXh7ktoFEu74eRMQxy0z?= =?us-ascii?Q?xEe7vZD5bak8gaMkH+pUm6EkLHa55Bn3oFA++rw7fR7z0mF9rxOWJcK6DCCD?= =?us-ascii?Q?Pmh4JMTI29LLrz98l+6ler93HGm3UHCXnxzzPV51XVxVz8c4QStRr7lM0T93?= =?us-ascii?Q?PkExCAUlzIlGcS1LIGDjg0yilZcvAN3IuJK4wcPejHJBbFOh6Y0B2WTVBHR5?= =?us-ascii?Q?wKiTLN4wtYooGrALZATwIJLM+WA0jQyu0C4qfxJVnDprKovr4585NrickhYh?= =?us-ascii?Q?QAk+fBMmFQJKn2y7NAOCb0+bu6UDbDLpBSh1MAxWXsXuBXcv4QU6mk2YwMSw?= =?us-ascii?Q?R/RRotL+1xSzd7bKvHO2iNVokT/iRlyIWfUUzDllKMEjR8f7+bsy0crkyqGS?= =?us-ascii?Q?3J9XF4n0S5hnOxJt47M=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2025 07:30:01.4266 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2b0a4c85-f299-4e3b-6c97-08de21bd4a73 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: CH2PEPF0000013E.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6577 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add new UAPI data structures to support batch SVM range registration: - struct kfd_ioctl_svm_range: Describes a single SVM range with its virtual address and size. - struct kfd_ioctl_svm_ranges_args: Arguments for batch registration of multiple non-contiguous SVM ranges. This structure allows registering multiple ranges with the same set of attributes in a single ioctl call, improving efficiency over multiple individual ioctl calls. The new structures enable userspace to efficiently register scattered memory buffers (e.g., multiple malloc allocations) to GPU address space without requiring them to be physically or virtually contiguous. Signed-off-by: Honglei Huang --- include/uapi/linux/kfd_ioctl.h | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h index 320a4a0e10bc..d782bda1d2ca 100644 --- a/include/uapi/linux/kfd_ioctl.h +++ b/include/uapi/linux/kfd_ioctl.h @@ -777,6 +777,48 @@ struct kfd_ioctl_svm_args { struct kfd_ioctl_svm_attribute attrs[]; }; =20 +/** + * kfd_ioctl_svm_range - SVM range descriptor + * + * @addr: starting virtual address of the SVM range + * @size: size of the SVM range in bytes + * @pad: padding for alignment + * + */ +struct kfd_ioctl_svm_range { + __u64 addr; + __u64 size; +}; + +/** + * kfd_ioctl_svm_ranges_args - Arguments for SVM register ranges ioctl + * + * @nranges: number of ranges in the @ranges array + * @op: operation to perform (see enum @kfd_ioctl_svm_op) + * @nattr: number of attributes in the @attrs array + * @ranges: variable length array of ranges + * @attrs: variable length array of attributes + * + * This ioctl allows registering multiple SVM ranges with the same + * set of attributes. This is more efficient than calling the SVM + * ioctl multiple times for each range. + * + * The semantics of the operations and attributes are the same as + * for kfd_ioctl_svm_args. + */ +struct kfd_ioctl_svm_ranges_args { + __u64 start_addr; + __u64 size; + __u32 op; + __u32 nattr; + /* Variable length array of attributes */ + __u64 attrs_ptr; + __u32 nranges; + __u32 pad; + /* Variable length array of ranges */ + __u64 ranges_ptr; +}; + /** * kfd_ioctl_set_xnack_mode_args - Arguments for set_xnack_mode * --=20 2.34.1 From nobody Sun Feb 8 22:00:43 2026 Received: from CH5PR02CU005.outbound.protection.outlook.com (mail-northcentralusazon11012067.outbound.protection.outlook.com [40.107.200.67]) (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 92CD3221265 for ; Wed, 12 Nov 2025 07:30:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.200.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932623; cv=fail; b=YjG5SrLh6LAkRRwPAq4yEHNBGKG4b0WL0ECI+lDfpn6CrysPfa7Oy7w22mF1iEMU6rhNhl/aIuGB5KqDMaabdonXJbM3kCC6cjkU6cTNZx4LSX/0KHUdr0F9uUKHgDYlbSJWYddetjC+RTcnH3eaFk1t/8N8vpLlCQ3NK7CD/bg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932623; c=relaxed/simple; bh=FhBsHUYX+kVrk8DWgrh5vOUvtkS7vM/x5Wb3aj8cy74=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lFUJ7k56pu4+wxT4iiDROudzDpYxQZQYCGROCBYJSMtyij/o4Wroq2oydn15awaqyevogJKbIE65wI8npVnxOApLDjscPgxqCMOYuNNTJWEs4TyIJefT92FXF+T3U2DxYXW80XsY6xIY6ackWDHhq7wazeqhVytifRWhw22cpn8= 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=l4fy3y7V; arc=fail smtp.client-ip=40.107.200.67 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="l4fy3y7V" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Qxn3DEsMRmFUJ8di12yiD1UHdwfF1mSDcgt2D1dGruM0JpO8pWf3GcSlQrBxAAhZD/wRsmdlHfVhltyiVOUbTihZfWFcZig1h8GmpTf+hbpzsshYOy26mCtNLi5/TBnyIKJytxk/AmG6S1aCWzmxCt8Cy/IOkUUE9OLsPqoo5wdqtlXaOv6ofUWRmVwvcBqrzBEeJEWuIC+tpg2PPZzM2F22NYxAfFn1tQx7NRVgyNnrNrZR4QhnKYzxM9oKE6y3CNUoZxlNoxR5DhMW4QBzedRhu5u5CaAXBUUHdNyEdldaBsSf/Ku0hmi9nrKmdtXAGYoQ6itsSPh8+Fyjh5sylQ== 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=pf2ELnFyESlPrHFJ8OdaJqsUv1coTV9WKEJXHjvGbmc=; b=T7YTyrq9Prv+8wuVbqymc7WYIr4IpzwieTXVNKEk+qtyd0xsl3eiEzYIl9UzYVRH8IUgN2GekrAUj7eOscnRpLjIUj1U7H1A2vYjMehEYi4mwsjchFYacu/2nOR+6rAOnx9iD8Ym9cPPA0Ua/4DH3BYsgvlA3+2lmgpVqLWIWUCNJdaDJih5x1Dfk3Ni/hgzbojfpAoSbg8zrMMJPRruO/3Fk2tbtOdkyI1i3agfl42dt/eu55ZoG4YDNzqlnUUtooxKURIs7+dCa9J9u9tVIFjQvvcZuFGArAYXNJ9fcDllNce8EpysR4ZuOPeBrHE60f921KN7I1pQDNJcLvEgng== 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=pf2ELnFyESlPrHFJ8OdaJqsUv1coTV9WKEJXHjvGbmc=; b=l4fy3y7V0ujS4c/w1LsxzBr4zVPdnzz+GfO75hprocLtsk2KC+DX+r0+cbCpG4FE4m/jauXVBVwVbjOutpN6bq2W6NTT2Ts3BQ/3GvqkJ723eBPHxa42t7JvPCuTD95gMu7b4W+rLEMYW/GWfd4Sv2gfZn1mxgkFSTkn1n/0hXA= Received: from CH2PR07CA0049.namprd07.prod.outlook.com (2603:10b6:610:5b::23) by CH3PR12MB7667.namprd12.prod.outlook.com (2603:10b6:610:14f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.15; Wed, 12 Nov 2025 07:30:16 +0000 Received: from CH2PEPF0000013E.namprd02.prod.outlook.com (2603:10b6:610:5b:cafe::95) by CH2PR07CA0049.outlook.office365.com (2603:10b6:610:5b::23) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9320.15 via Frontend Transport; Wed, 12 Nov 2025 07:30:16 +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 CH2PEPF0000013E.mail.protection.outlook.com (10.167.244.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Wed, 12 Nov 2025 07:30:16 +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; Tue, 11 Nov 2025 23:30:01 -0800 From: Honglei Huang To: , , , CC: , , , , , , , , , , Honglei Huang Subject: [PATCH 3/5] drm/amdkfd: Add AMDKFD_IOC_SVM_RANGES ioctl command Date: Wed, 12 Nov 2025 15:29:08 +0800 Message-ID: <20251112072910.3716944-4-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251112072910.3716944-1-honglei1.huang@amd.com> References: <20251112072910.3716944-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: 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: CH2PEPF0000013E:EE_|CH3PR12MB7667:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e18423d-4356-47b6-6e5e-08de21bd536e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?G6PplAgkXJeRyMne9prz6gQflNPZawFGvLoTIRpQOWyOLKKpGit7cEoMMPDW?= =?us-ascii?Q?5N9/3TtVMkhdhvAjatCWdQzuVF6AksaaibaQZXwPKB7Ds0EtUKamBlExl3Jy?= =?us-ascii?Q?zUZmunB4jkZSMRa4zDB2fgIMdfnsWv4eHMyr88kc6seyoEO2xH5pQYaPGXhR?= =?us-ascii?Q?ldNxXF8b+wty58M9ndUMRCDlJxJeFF/WWhEM9GmshAilg4vW/qTFwRt0hfCL?= =?us-ascii?Q?ccAw1yJEN0MNRzg0pkvn3wU0DrQDWzprA4qC1s2weKLG1xQvQfsW3YQq/iiw?= =?us-ascii?Q?EN0uMuCh2598EMxOTcZyyE/pJ8NOpTRv8R/tcGsISMLdMFvTXAu0mSFQ7DQa?= =?us-ascii?Q?/d4bSjGH4Xw36ezw7ChLdTCWZMSoEEuvj9EC5oeZACFYiBTXDNn89cAwLgKr?= =?us-ascii?Q?yXtpfeTd9mySp8gbZuIuC1/z/m/lI4dmlr3VnLugbfwwXOF8/rTyY9ZwNdg4?= =?us-ascii?Q?2Q1S2XAlMYzbptybuFblFfOwoa8VEukrZLx/b5o5T00iYEFZyK1esJNBMN3U?= =?us-ascii?Q?eh5Zij08+VbqJV7yegG+phJCr7LRkIZA+OHJu+tMkfkobFpw9jlS9Ngdc3qT?= =?us-ascii?Q?GzS8VfJMcAi1Wz5PYe8uZzaXg8qPXwfg/aQPeQMi45lhBbuLMBShjLGV6hbq?= =?us-ascii?Q?K2fQlm+zAUrJj13oivsDvBLoyl+MqQYZwKm83uYNQvcQthQr6xHs50ceOJ9M?= =?us-ascii?Q?u7N8JkaI6VrGnZyWnw1m9UcB35Ye1iG9/QjNf4SaFE1+9+GfG1zkxfOq1NPQ?= =?us-ascii?Q?RzE+MaK4aUD49x6kU/Tizpgy2NZcp1TG8dfAlJ3bx+Gs8j+1fbU9bRaGZV6T?= =?us-ascii?Q?+RJSS+t0d90FWKpREX+AWJWiitjBHEETfe7SHKeT8+Hjz9TtVIsT9A5JyAtM?= =?us-ascii?Q?eAgJW6SUkP2ifuLj0ZPIO4g/YWVfXpOBHZjsWrQlbLSYTmBQjdt1XET+TNUa?= =?us-ascii?Q?Y5kVOcSX/3Bc5dFnuz1rbItbG5Viwn1HyUb6fj3XRnjr6KOVwZDx+XnckTW5?= =?us-ascii?Q?TMtMqvWCQtVenl9WyINQHFGOWlDU+LFfcWp9y5aRslY4+XECBFhUXmPBQSaQ?= =?us-ascii?Q?xwWrNS7gZe7XcKy2tjpl/cYfH2NzokAUG2PYCL9yXeVLa8FvJV1/2LYYY0Wr?= =?us-ascii?Q?3fs+q7X+dQiXrSbxoAWg+aTVyHYboXutc2oLzA14G1rs9QLr+vqIgAPjq13R?= =?us-ascii?Q?gQtYZHYSlqhIj3dNOqHns3GO9HbXyLhkOBtifeD6/4Rq/6BWcvezSzE0IAHI?= =?us-ascii?Q?HoD0J3d1L1ds3ypzmIGJE1lmCVVMRzQKh5PNx93X2ebzDLeWvsF3hvNKB9QG?= =?us-ascii?Q?ZHAxVqpV1zF9Us//wdEGjtcdyqVusnS7gglLyvkXK9GGY2QlqkTg4E3zqpul?= =?us-ascii?Q?nS1fg2vRd+cTT3d4BRYVGGDOlBYKFYX4mQQxteDX+50AiYCjMOR8BtzPlE0i?= =?us-ascii?Q?L/LphLRBeNEwKqXg63KFhLFv+YvsC/u4AXilKJz/oz/S4bbnapro5AvGlnJ+?= =?us-ascii?Q?VmV3yDFhwH1wdFo99gC+EWWC/HpoGUFSfltuz2K95+tINE5zoHofEKmMQf+y?= =?us-ascii?Q?1qB45VpwyS6Jd/2ango=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(376014)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2025 07:30:16.4936 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8e18423d-4356-47b6-6e5e-08de21bd536e 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: CH2PEPF0000013E.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB7667 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Define a new ioctl command AMDKFD_IOC_SVM_RANGES (0x27) to support batch registration of multiple SVM ranges. Update AMDKFD_COMMAND_END from 0x27 to 0x28 accordingly. This ioctl provides a more efficient interface for userspace to register multiple non-contiguous memory ranges with the same set of SVM attributes in a single system call, reducing context switching overhead compared to multiple AMDKFD_IOC_SVM calls. Signed-off-by: Honglei Huang --- include/uapi/linux/kfd_ioctl.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h index d782bda1d2ca..c5f9595ef30d 100644 --- a/include/uapi/linux/kfd_ioctl.h +++ b/include/uapi/linux/kfd_ioctl.h @@ -663,7 +663,6 @@ enum kfd_mmio_remap { #define KFD_IOCTL_SVM_FLAG_GPU_ALWAYS_MAPPED 0x00000040 /* Fine grained coherency between all devices using device-scope atomics */ #define KFD_IOCTL_SVM_FLAG_EXT_COHERENT 0x00000080 - /** * kfd_ioctl_svm_op - SVM ioctl operations * @@ -1622,7 +1621,10 @@ struct kfd_ioctl_dbg_trap_args { #define AMDKFD_IOC_DBG_TRAP \ AMDKFD_IOWR(0x26, struct kfd_ioctl_dbg_trap_args) =20 +#define AMDKFD_IOC_SVM_RANGES \ + AMDKFD_IOWR(0x27, struct kfd_ioctl_svm_ranges_args) + #define AMDKFD_COMMAND_START 0x01 -#define AMDKFD_COMMAND_END 0x27 +#define AMDKFD_COMMAND_END 0x28 =20 #endif --=20 2.34.1 From nobody Sun Feb 8 22:00:43 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011010.outbound.protection.outlook.com [52.101.62.10]) (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 2678228467C for ; Wed, 12 Nov 2025 07:30:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.10 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932635; cv=fail; b=g/RTjJwdrOxrIIW8QR2NTKQCPut6HpemivbgSm29hotwELH/eXWSUo6Kinkutlkc/pzULpYzxEM7FVskFmtWhZXImQRBVSIIzgGyP5B/XulGJ/ZMEENlerNM3XWt528pE2L7mG0uBACekvOR2ZDewfwD4Kr81ZosRfhijKh7uCQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932635; c=relaxed/simple; bh=mzLK8IPFbFFe+wczITu+6y36MhiAqJEMQwHbRSGT7fM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Go3C9ITfSie5qZ9EF8zADvjtDcsH1tVW0ZkxVpusA+Xev95V1WcxYWmopClsVsH4YAv1o2243TtKmU8j572AxYyum691zTssFueeCz2R7twumcrOwjllsGdS2FfgqHy2VrsP4FRtCDoE6Yxu69ELRA/JvCqRiWX8sJlDG8HtEbw= 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=4bW3trL0; arc=fail smtp.client-ip=52.101.62.10 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="4bW3trL0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IEQItz8uGEaatgJ1Aeydr6+kt8/hXTuqzEIvD2YLBSS7pr7qXWMoPcX7RtgMfpbjd3NNFR/aSVd09HSKOBD9O54O0AScB/MscOLB4Y7cf6lllUsF0yXrr+FVzJJBmkJwvTQocUpYE7S2dfYsUIU69s1KEnXUgWLnXisu7TIhCLZGgNkTCWessKTAYyrEVebYs0B9NztXmTy2uiNNV/LjRLWkmOTSstKzcyo5AENeKvzg083v/e0zqh34zLaeqW1drT2D1a6/tfVLboaQfwYagXdqWq7kTBRMy9ARsT20i3Pmisl1QGqT7iREvlqQs9xBl2J6PfUIDKLhb5OvFzTL/Q== 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=PdSu7wEPy9mChgu+QLxKAfgk5d6VeqhFPrj7riMlPyM=; b=it57y7+NMW2ViNGbgx5DGbVfNnfYk/venFdmWSfr0vWJUwHZKizLj60BXXA9pzyhCUDNx42o8tJHgcS1XaN5XFJ3Tp1HhG5t+ZqlCX8RjwvbkmtRObkjQsktlZDscNN3z/kI226zc0j8hUiuraNMENBlMFb5JSNyWnaBy3HlmwT02P47C7g6Sz6lKG7UURM9rwQNCGBAOsnoGQP2mV3sGFYTSC6nno/US+9OYGYUYD3r/LL+3T3Rrf5AzLLkxcvEH+wjSWWHmJ6S6qfcOk3S1eVwaHC7+HmwM/zleubVVON5Zfsetlh5uQf6hQzzWFBSbm47ZUe1nhx5I+IT7Kj3vA== 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=PdSu7wEPy9mChgu+QLxKAfgk5d6VeqhFPrj7riMlPyM=; b=4bW3trL0POrBvhOcvIngwMThHt+0GNPpPRSkry6J3/4rOlIVmBK8Fm/4S3P8K7EZrNkuj5DmD5I4hxNZzi+BOsaC1QAkvLad4cDs0cMst7wJgw4qa1KfIZyGeg993Ic8FrMV1wHlqW4jSya5QnqZA+5J8zL6Q2AppoT+BAW7Rvs= Received: from CH0PR03CA0365.namprd03.prod.outlook.com (2603:10b6:610:119::13) by BY5PR12MB4305.namprd12.prod.outlook.com (2603:10b6:a03:213::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Wed, 12 Nov 2025 07:30:26 +0000 Received: from CH2PEPF0000013B.namprd02.prod.outlook.com (2603:10b6:610:119:cafe::a) by CH0PR03CA0365.outlook.office365.com (2603:10b6:610:119::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9298.16 via Frontend Transport; Wed, 12 Nov 2025 07:30:26 +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 CH2PEPF0000013B.mail.protection.outlook.com (10.167.244.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Wed, 12 Nov 2025 07:30:26 +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; Tue, 11 Nov 2025 23:30:04 -0800 From: Honglei Huang To: , , , CC: , , , , , , , , , , Honglei Huang Subject: [PATCH 4/5] drm/amdkfd: Add support for pinned user pages in SVM ranges Date: Wed, 12 Nov 2025 15:29:09 +0800 Message-ID: <20251112072910.3716944-5-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251112072910.3716944-1-honglei1.huang@amd.com> References: <20251112072910.3716944-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: 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: CH2PEPF0000013B:EE_|BY5PR12MB4305:EE_ X-MS-Office365-Filtering-Correlation-Id: d4939ed4-4fdf-41ee-4d2a-08de21bd593d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Wdb3eAH55k/bbFgW45bkhptHYfUmJgkQUTP/4rDOueVi8U8Pc3yU9fchgXVQ?= =?us-ascii?Q?+ijp5CJGrkoVxOT8kNaF15WVSv9AvVbzmbkswptjWD+M/WHPvOjHRhc21GgA?= =?us-ascii?Q?ex/rsmIfxSb2Hsbn685OADhcTnCzb2eogbQ0Uop9uRv0GqSt2qhG/joXYdDf?= =?us-ascii?Q?eq56lHoQNLxGKUJoLor9nHOaCG0Wb/XCFGMI/h05JcmvUegfws58eE85hIKc?= =?us-ascii?Q?zbZf28Xk9H8mswNBk1PDVIamoPvN4W3O8GPjBTb+mYUdOIitcdZpBrHwr9pr?= =?us-ascii?Q?cD/oRLGeVB1ctYYIkDDWu5ziyiarRy1Z0oO4tG9yjODsDBBpneM1kixOCfTu?= =?us-ascii?Q?v0w7Xzo+hi1jKC92LvW5yHuQUlK/Cv7mopoAQwm5G/1/4jrbky0GzTW/SfCY?= =?us-ascii?Q?mrWMqOE2g3e7FF3WVitcAavPFUhN+/jBlFDZaIjSCpcJye7llV/A9jBfx1Ec?= =?us-ascii?Q?ZsgWZqKd8NxsjdvIl3b88DACEMHKyPc7VowExeZyLJaY/7C4Vci64ntFB3Yu?= =?us-ascii?Q?00tDy76jY/5swNeDxLVQatKFKTEMwhIzgK25g83/gUNGnsXogsc6idRFCBYE?= =?us-ascii?Q?WRHWgOFi4kuIuVHseq9z5i//zR7FCO31LXK9yz60wye1E8azCHlQCo1QPNPI?= =?us-ascii?Q?NeON+/ZE2IXNL/SFrIAHUwqxSr0UT9hsuIuqfcgEDBR+ccMTTGUl3BkB5qyF?= =?us-ascii?Q?Z570Qt8oshwqXknhXaVpv7jTXoHl/6Z59YLJBQyjQCSVaAw773nUWnpC0v+l?= =?us-ascii?Q?lhX4KqeoUoWyt4gwTGqSYhbulfL9euINBrYlWmetRFJS4pwbir7DEONggrH1?= =?us-ascii?Q?CRM8ZB9Kj9HfSw/0P/tKdXoaExRkI5wWP7k91xm5lBMeZ9nCrIByuXlJrRU/?= =?us-ascii?Q?UCTmSgmqSbXx5EBJASMxIU3dJLq7CID4YogM2aMwTMwV09jKHq1Hdgs+ESgo?= =?us-ascii?Q?bXJfhvoHY6vmSYAZgCT4NbSJRAEw4ClfBuCkU8Sbv7Uv9wdtlsks0c/Sodja?= =?us-ascii?Q?hMlBXg+8i8ScVE1ru0OfGhlVa8U48jIu7SpaX7+0Ts65fbpKYWQXKUEkRv5p?= =?us-ascii?Q?2n9L2r9/d3LBjKi3e1oWXABfMfsx+Yi7uyeFL5PMqSsTx+HcLYReRlRmdfKn?= =?us-ascii?Q?Gw/cbJTxSH7z49HENgluooYgAb91/JbB0bC2av3n7wZgGJog5Fzalr3pS1hQ?= =?us-ascii?Q?QZOEU3Lg3CZSIR0f0Ghp2F4husf+9CkngZ08eh8UIH30sxOB7H//Gjic5tl4?= =?us-ascii?Q?euW6tE1vMGEQDUp96IQlb0X5Jz6V5/q5fycERy9Yla6pnpZrfsi+lXudSPIh?= =?us-ascii?Q?NnYoto7+7+6B26HMuE/sdrfoDS2iQla2tpbIulLwb3Gzh57FJTeOtk3Jo8w1?= =?us-ascii?Q?+j/FQ+J+FzDn2aDYck4FQzILF37/Ay7OHplqaKONr3OypzpSsQDes5uwTvWT?= =?us-ascii?Q?BQLuN3ZUIUM+MDCc6f7OqIY+ZEk/7CnGBIT65uKHe5hVcNXwf4CPppFUEGzY?= =?us-ascii?Q?66l97ejM2DxWnn1oDu+FOPspDI7xmOf1FjDZLj5b9orHHPBStP6WVyFQSNuy?= =?us-ascii?Q?LhhZeG6l6RYFV8Mu1nc=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2025 07:30:26.2382 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d4939ed4-4fdf-41ee-4d2a-08de21bd593d 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: CH2PEPF0000013B.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4305 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Implement core functionality to pin and manage user pages for non-contiguous SVM ranges: 1. Add svm_pin_user_ranges() function: - Pin multiple non-contiguous user memory ranges - Use pin_user_pages_fast() to lock pages in memory - Store pinned pages in VMA's vm_private_data - Set up custom VMA operations for fault handling 2. Add svm_range_get_mapped_pages() function: - Optimized path for pre-mapped VMAs - Retrieve pages directly from vm_private_data - Bypass HMM for already-pinned pages 3. Implement svm_iovec_ops VMA operations: - svm_iovec_fault(): Handle page faults by returning pre-pinned pages - svm_iovec_close(): Cleanup and unpin pages on VMA close 4. Add is_map flag to struct svm_range: - Track whether a range uses the pinned pages mechanism - Enable conditional logic in DMA mapping and validation paths 5. Update DMA mapping logic: - Skip special device page handling for pinned user pages - Treat pinned pages as regular system memory for DMA 6. Modify validation logic: - svm_range_is_valid() accepts mapped VMAs when is_map flag is set - svm_range_validate_and_map() uses appropriate page retrieval path This infrastructure enables efficient handling of scattered user buffers without requiring memory to be virtually contiguous, supporting use cases like multiple malloc() allocations being registered to GPU address space. Signed-off-by: Honglei Huang --- drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 232 ++++++++++++++++++++++++++- drivers/gpu/drm/amd/amdkfd/kfd_svm.h | 3 + 2 files changed, 229 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amd= kfd/kfd_svm.c index 31e500859ab0..fef0d147d938 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c @@ -179,7 +179,7 @@ svm_range_dma_map_dev(struct amdgpu_device *adev, struc= t svm_range *prange, dma_unmap_page(dev, addr[i], PAGE_SIZE, dir); =20 page =3D hmm_pfn_to_page(hmm_pfns[i]); - if (is_zone_device_page(page)) { + if (is_zone_device_page(page) && prange->svm_bo && !prange->is_map) { struct amdgpu_device *bo_adev =3D prange->svm_bo->node->adev; =20 addr[i] =3D (hmm_pfns[i] << PAGE_SHIFT) + @@ -682,6 +682,18 @@ static int svm_range_bo_validate(void *param, struct a= mdgpu_bo *bo) return ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); } =20 +static bool +svm_range_has_mapped_attr(uint32_t nattr, struct kfd_ioctl_svm_attribute *= attrs) +{ + uint32_t i; + + for (i =3D 0; i < nattr; i++) { + if (attrs[i].type =3D=3D KFD_IOCTL_SVM_ATTR_MAPPED) + return true; + } + return false; +} + static int svm_range_check_attr(struct kfd_process *p, uint32_t nattr, struct kfd_ioctl_svm_attribute *attrs) @@ -713,6 +725,8 @@ svm_range_check_attr(struct kfd_process *p, break; case KFD_IOCTL_SVM_ATTR_GRANULARITY: break; + case KFD_IOCTL_SVM_ATTR_MAPPED: + break; default: pr_debug("unknown attr type 0x%x\n", attrs[i].type); return -EINVAL; @@ -777,6 +791,9 @@ svm_range_apply_attrs(struct kfd_process *p, struct svm= _range *prange, case KFD_IOCTL_SVM_ATTR_GRANULARITY: prange->granularity =3D min_t(uint32_t, attrs[i].value, 0x3F); break; + case KFD_IOCTL_SVM_ATTR_MAPPED: + prange->is_map =3D true; + break; default: WARN_ONCE(1, "svm_range_check_attrs wasn't called?"); } @@ -830,6 +847,8 @@ svm_range_is_same_attrs(struct kfd_process *p, struct s= vm_range *prange, if (prange->granularity !=3D attrs[i].value) return false; break; + case KFD_IOCTL_SVM_ATTR_MAPPED: + return false; default: WARN_ONCE(1, "svm_range_check_attrs wasn't called?"); } @@ -1547,6 +1566,81 @@ static void *kfd_svm_page_owner(struct kfd_process *= p, int32_t gpuidx) return SVM_ADEV_PGMAP_OWNER(pdd->dev->adev); } =20 +static int svm_range_is_mapped_vma(struct vm_area_struct *vma) +{ + return vma && (vma->vm_flags & (VM_IO | VM_PFNMAP)); +} + +static int svm_range_get_mapped_pages(struct mmu_interval_notifier *notifi= er, + struct mm_struct *mm, struct page **pages, + uint64_t start, uint64_t npages, + struct hmm_range **phmm_range, + bool readonly, bool mmap_locked, + void *owner, struct vm_area_struct *vma) +{ + struct hmm_range *hmm_range; + unsigned long *pfns; + + unsigned long vma_size; + struct page **vma_pages; + unsigned long vma_start_offset; + unsigned long i; + int r =3D 0; + + hmm_range =3D kzalloc(sizeof(*hmm_range), GFP_KERNEL); + if (unlikely(!hmm_range)) + return -ENOMEM; + + pfns =3D kvmalloc_array(npages, sizeof(*pfns), GFP_KERNEL); + if (unlikely(!pfns)) { + r =3D -ENOMEM; + goto out_free_range; + } + + hmm_range->notifier =3D notifier; + hmm_range->default_flags =3D HMM_PFN_REQ_FAULT; + if (!readonly) + hmm_range->default_flags |=3D HMM_PFN_REQ_WRITE; + hmm_range->hmm_pfns =3D pfns; + hmm_range->start =3D start; + hmm_range->end =3D start + npages * PAGE_SIZE; + hmm_range->dev_private_owner =3D owner; + + hmm_range->notifier_seq =3D mmu_interval_read_begin(notifier); + + if (likely(!mmap_locked)) + mmap_read_lock(mm); + + vma_pages =3D vma->vm_private_data; + vma_size =3D vma->vm_end - vma->vm_start; + vma_start_offset =3D (unsigned long)start - vma->vm_start; + + if ((vma_size >> PAGE_SHIFT) < npages) { + pr_err("ERROR: mapped vma npages: %lx < userptr map npages: %llx\n", + vma_size, npages); + return -EINVAL; + } + + for (i =3D 0; i < npages; i++) + pfns[i] =3D page_to_pfn( + vma_pages[(vma_start_offset >> PAGE_SHIFT) + i]); + + if (likely(!mmap_locked)) + mmap_read_unlock(mm); + + for (i =3D 0; pages && i < npages; i++) + pages[i] =3D hmm_pfn_to_page(pfns[i]); + + *phmm_range =3D hmm_range; + + return 0; + +out_free_range: + kfree(hmm_range); + + return r; +} + /* * Validation+GPU mapping with concurrent invalidation (MMU notifiers) * @@ -1674,7 +1768,15 @@ static int svm_range_validate_and_map(struct mm_stru= ct *mm, next =3D min(vma->vm_end, end); npages =3D (next - addr) >> PAGE_SHIFT; WRITE_ONCE(p->svms.faulting_task, current); - r =3D amdgpu_hmm_range_get_pages(&prange->notifier, addr, npages, + if (svm_range_is_mapped_vma(vma)) + { + r =3D svm_range_get_mapped_pages(&prange->notifier, mm, NULL, + addr, npages, &hmm_range, + readonly, true, owner, vma); + prange->is_map =3D true; + } + else + r =3D amdgpu_hmm_range_get_pages(&prange->notifier, addr, npages, readonly, owner, NULL, &hmm_range); WRITE_ONCE(p->svms.faulting_task, NULL); @@ -3269,9 +3371,9 @@ svm_range_check_vm(struct kfd_process *p, uint64_t st= art, uint64_t last, * 0 - OK, otherwise error code */ static int -svm_range_is_valid(struct kfd_process *p, uint64_t start, uint64_t size) +svm_range_is_valid(struct kfd_process *p, uint64_t start, uint64_t size, b= ool mapped) { - const unsigned long device_vma =3D VM_IO | VM_PFNMAP | VM_MIXEDMAP; + const unsigned long device_vma =3D mapped ? 0 : VM_IO | VM_PFNMAP | VM_MI= XEDMAP; struct vm_area_struct *vma; unsigned long end; unsigned long start_unchg =3D start; @@ -3510,6 +3612,8 @@ static void svm_range_evict_svm_bo_worker(struct work= _struct *work) svm_range_bo_unref(svm_bo); } =20 + + static int svm_range_set_attr(struct kfd_process *p, struct mm_struct *mm, uint64_t start, uint64_t size, uint32_t nattr, @@ -3525,6 +3629,7 @@ svm_range_set_attr(struct kfd_process *p, struct mm_s= truct *mm, struct svm_range *next; bool update_mapping =3D false; bool flush_tlb; + bool if_mapped; int r, ret =3D 0; =20 pr_debug("pasid 0x%x svms 0x%p [0x%llx 0x%llx] pages 0x%llx\n", @@ -3540,7 +3645,9 @@ svm_range_set_attr(struct kfd_process *p, struct mm_s= truct *mm, =20 svm_range_list_lock_and_flush_work(svms, mm); =20 - r =3D svm_range_is_valid(p, start, size); + if_mapped =3D svm_range_has_mapped_attr(nattr, attrs); + + r =3D svm_range_is_valid(p, start, size, if_mapped); if (r) { pr_debug("invalid range r=3D%d\n", r); mmap_write_unlock(mm); @@ -3679,7 +3786,7 @@ svm_range_get_attr(struct kfd_process *p, struct mm_s= truct *mm, flush_work(&p->svms.deferred_list_work); =20 mmap_read_lock(mm); - r =3D svm_range_is_valid(p, start, size); + r =3D svm_range_is_valid(p, start, size, false); mmap_read_unlock(mm); if (r) { pr_debug("invalid range r=3D%d\n", r); @@ -4153,3 +4260,116 @@ svm_ioctl(struct kfd_process *p, enum kfd_ioctl_svm= _op op, uint64_t start, =20 return r; } + +static void svm_iovec_close(struct vm_area_struct *vma) +{ + struct page **pages =3D vma->vm_private_data; + uint32_t npages; + + if (!pages) + return; + + npages =3D (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; + + unpin_user_pages_dirty_lock(pages, npages, false); + pr_debug("svm_iovec_close, unpin pages, start: 0x%lx, npages: 0x%x\n", + vma->vm_start, npages); + + kvfree(pages); + vma->vm_private_data =3D NULL; +} + +static vm_fault_t svm_iovec_fault(struct vm_fault *vmf) +{ + struct vm_area_struct *vma =3D vmf->vma; + struct page **pages; + + if ((vmf->pgoff << PAGE_SHIFT) >=3D (vma->vm_end - vma->vm_start)) { + return VM_FAULT_SIGBUS; + } + + pages =3D (struct page **)vma->vm_private_data; + if (!pages) { + return VM_FAULT_SIGBUS; + } + + vmf->page =3D pages[vmf->pgoff]; + + return VM_FAULT_NOPAGE; +} + +static const struct vm_operations_struct svm_iovec_ops =3D { + .close =3D svm_iovec_close, + .fault =3D svm_iovec_fault, +}; + +int svm_pin_user_ranges(struct kfd_process *p, uint64_t start, uint64_t si= ze, + struct kfd_ioctl_svm_range *ranges, uint64_t nranges) +{ + struct mm_struct *mm =3D current->mm; + struct vm_area_struct *vma; + struct page **pages =3D NULL, **cur_page; + uint32_t vma_size, npages =3D 0, pinned_pages =3D 0; + int i, ret; + + mmap_read_lock(mm); + vma =3D find_vma(mm, start); + if (!vma) { + pr_err("failed to find vma, start: 0x%llx\n", start); + mmap_read_unlock(mm); + return -EINVAL; + } + mmap_read_unlock(mm); + + if (vma->vm_ops =3D=3D &svm_iovec_ops) + return 0; + + vma_size =3D vma->vm_end - vma->vm_start; + if (size > vma_size) { + pr_err("vma size: %x < target size: %llx\n", vma_size, size); + goto failed_free; + } + + for (i =3D 0; i < nranges; i++) { + npages +=3D ranges[i].size >> PAGE_SHIFT; + } + + pages =3D kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL); + if (!pages) { + pr_err("failed to allocate pages\n"); + ret =3D -ENOMEM; + goto failed_free; + } + + cur_page =3D pages; + + for (i =3D 0; i < nranges; i++) { + ret =3D pin_user_pages_fast(ranges[i].addr, + (ranges[i].size >> PAGE_SHIFT), + FOLL_WRITE | FOLL_FORCE, cur_page); + if (ret < 0) { + pr_err("failed to pin user pages, addr: 0x%llx, size: 0x%llx\n", + ranges[i].addr, ranges[i].size); + if (pinned_pages) + unpin_user_pages(pages, pinned_pages); + goto failed_free; + } + + cur_page +=3D (ranges[i].size >> PAGE_SHIFT); + pinned_pages +=3D (ranges[i].size >> PAGE_SHIFT); + } + + mmap_write_lock(mm); + vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP); + vma->vm_private_data =3D pages; + vma->vm_ops =3D &svm_iovec_ops; + mmap_write_unlock(mm); + return 0; + +failed_free: + if (pages) { + unpin_user_pages_dirty_lock(pages, pinned_pages, false); + kvfree(pages); + } + return ret; +} diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h b/drivers/gpu/drm/amd/amd= kfd/kfd_svm.h index 70c1776611c4..ebaa10fce8c1 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h @@ -137,6 +137,7 @@ struct svm_range { DECLARE_BITMAP(bitmap_access, MAX_GPU_INSTANCE); DECLARE_BITMAP(bitmap_aip, MAX_GPU_INSTANCE); bool mapped_to_gpu; + bool is_map; }; =20 static inline void svm_range_lock(struct svm_range *prange) @@ -207,6 +208,8 @@ void svm_range_bo_unref_async(struct svm_range_bo *svm_= bo); =20 void svm_range_set_max_pages(struct amdgpu_device *adev); int svm_range_switch_xnack_reserve_mem(struct kfd_process *p, bool xnack_e= nabled); +int svm_pin_user_ranges(struct kfd_process *p, uint64_t start, uint64_t si= ze, + struct kfd_ioctl_svm_range *ranges, uint64_t nranges); =20 #else =20 --=20 2.34.1 From nobody Sun Feb 8 22:00:43 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011055.outbound.protection.outlook.com [52.101.52.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 4321426E717 for ; Wed, 12 Nov 2025 07:30:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932632; cv=fail; b=A4lF0KSQB+VxH1CHISbHKvaX1hvMeIzf24KVBvd6w8SVgFz3DJkMKfVHQcC/ebHXhCb555QErPfnxKvhu1osj2Kb/BAE7aaEoCYz8UJRZVKEmG6KkWUn2CWZUuvjyY19ClPjLJloZLnQxQWIq9Q3hrP/+aYgBl3MWzTmZhuU4P8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762932632; c=relaxed/simple; bh=44xv6nrYK1VS1tUCQdQl3zXzSMVEe1B/xowZOtKCg6s=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jtGJ6mJrqtUWQyd2t3Qh0FUTZ3HYrBdnfVqcnji+EPtL4xajlvALylgGWsJPtyNc3cj1evyhcTdYWFoCIXTUo4TA4ZykfNJycZRDcCK0I6S68AA6/I7Tq6Hs9yDJJpaQJmMkkf50dwkWLY8WXT6SoybCn64dYNtAQmLof2ROftM= 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=avoEzBdC; arc=fail smtp.client-ip=52.101.52.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="avoEzBdC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=q5QPHN6LXZHw9oVg08IkKNGj/Q+xpNDa5M2KXk6tg4RDy7Pq28Cb6Wh2+KOsGqWTyLASAN2M2ZC57adDMd1NCZahBwtbOn0Ifu+M2TVDsrvDNkhYk1H+KzgotOzeLHkjMJ08mD4kF6jw2Q8xYE6lLkq9L/XryDXyXUZHc3grfgh7+xkgE8LsIOVijjAa/PTzSuvtEwhXNLA13VEjhBwBFztDhUiWyR0+9qQddrlKnllQfDFakbybOcGyAR3Syni83zEiwUTXDmEN6XA3Tuzi3TpOjVGAOx06YW/swV00Rts2DGqSAud6rO1tDUMTrkj69SOvCP/bq4Qn5FZ3jTRm2w== 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=WQQMX/nlAJhaBEBziG2NLFNNdRLNtD2k+Os9agqVAPc=; b=o2Iqb+0ykmhrsuMZ24MJDYMBOXnSJPxej4ULGM8HNgNDPGPmuZ0eOcPi/IBXCvn56qRebZCkW9x6e2KrKsw5CvDLZxmxpBDS//frpH5m4tS6JCu2nN8n2hTbdZE8pkpIIjrkjya9qxXZS0Xq6DMsd5IErmc4JA9B3V5qrBVwTmxNW7f1cgftdRfPeoTWwODmsvDLwOt/p8xpT4of+6o8wGNdZjbk2U/7sCT+dmQ/Ok2Em4nwNkmkhf7RB337wojzStt0lKOkYEXqiTRHuKFWKp7AlGcE2OeE4FAmdllb/OX1sWxGA2yZyFq7N6s6VDq5S1kvyLO+NCpTRyL4pzJRzg== 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=WQQMX/nlAJhaBEBziG2NLFNNdRLNtD2k+Os9agqVAPc=; b=avoEzBdCOmgqr477M5oAAKeCtp8EWQPZcSQsf7dohay4F7nTsUaNLRi+18IkW8zhjbQ9FOcCCqtClWTBXdDoM0SiU2Xmqwe5uwnaaXWpSa2tnXrQcHbjrcdL1VDucuLmJEJc7nTYFD76F6zlBzv4+PGu9Xb1szdGULKUK+Plh4g= Received: from CH5P220CA0009.NAMP220.PROD.OUTLOOK.COM (2603:10b6:610:1ef::11) by SJ2PR12MB9088.namprd12.prod.outlook.com (2603:10b6:a03:565::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.16; Wed, 12 Nov 2025 07:30:27 +0000 Received: from CH2PEPF0000013C.namprd02.prod.outlook.com (2603:10b6:610:1ef:cafe::2) by CH5P220CA0009.outlook.office365.com (2603:10b6:610:1ef::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9320.17 via Frontend Transport; Wed, 12 Nov 2025 07:30:24 +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 CH2PEPF0000013C.mail.protection.outlook.com (10.167.244.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.13 via Frontend Transport; Wed, 12 Nov 2025 07:30:26 +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; Tue, 11 Nov 2025 23:30:08 -0800 From: Honglei Huang To: , , , CC: , , , , , , , , , , Honglei Huang Subject: [PATCH 5/5] drm/amdkfd: Wire up SVM ranges ioctl handler Date: Wed, 12 Nov 2025 15:29:10 +0800 Message-ID: <20251112072910.3716944-6-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251112072910.3716944-1-honglei1.huang@amd.com> References: <20251112072910.3716944-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: 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: CH2PEPF0000013C:EE_|SJ2PR12MB9088:EE_ X-MS-Office365-Filtering-Correlation-Id: a613e7ff-c707-4875-d7ca-08de21bd596f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|376014|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?4gjWFkOZo3vQOUY2/EIfBEq5s6HBpOoiRqoqKteCe7vd4MgY38qBtYeCdBhG?= =?us-ascii?Q?SaoQcmg3FIkqMPCnzj66srwLCMfaQ3THUDZSepLyg79m/hRW1SaKefK4/Y/O?= =?us-ascii?Q?Fvyzvp5RsOtQmZ652O0M2AXSyrhkSpH55MWYi0Jp5ralVrkEJHBs3g4yZsq7?= =?us-ascii?Q?IcFTrMUEO3ROd9L8HUgAtD0K/qtcGmD7XK3IQnLAfTQBN7hDIw8Z6jS1l4DN?= =?us-ascii?Q?mdkQAWKv9sRNlQeyVFM4GRuvvyqBMnfqIIgKq3TU8ZGHuwGzCCKriQhNAuxP?= =?us-ascii?Q?zTsE0SIh0FNhQC5tX9FxGymfgin93iCoOBETSAcf9x97UJpuRkLYEj6G1tpw?= =?us-ascii?Q?finBWlaRpC+4DjX80WDNZf5RJKNEAu2Yo9X2FEgzIXXdn5ZIfNAOUKctE/bz?= =?us-ascii?Q?1OanDaeFTc2j2EyjpnZuezD+6NyLe6UgpjPWZNwiDxnXC0MAertKvglbNN1S?= =?us-ascii?Q?me1hamOtH7w0yfhGpuhuZm+BeJd4VsuUnllFMw8i3FyU0t1Y+Ax95gKUD+4U?= =?us-ascii?Q?eTD2g3haC44dqAmg/uFHxSUdjHH21Kgptc3vC60AEFXpZQyBS1U7nTnkRPgO?= =?us-ascii?Q?33rrYHzYotiaAtg6otCyhd6aqTp/M1DgwHbCTuinYbjLriTPLgoZLHZSWJBF?= =?us-ascii?Q?rVKCWTD+jC28R+H5HefC19gY5JNHNbxgfRsEjafLrKgRUqayY2/xjcoCB/xX?= =?us-ascii?Q?itf8mgspy+N+2LugRDShMRF6I4OrNDfmpgysnlPOO8V+r0QbIoHwKRzFeeps?= =?us-ascii?Q?QTy2F09we5EtcgT4bsevU3Nikh5/QLjGRHz8xLDmJQblwm6PLuLdllTRdvIP?= =?us-ascii?Q?XdoUSWw2N2n4VJJOBxRlbEMCKRvSVIUgxPB4iGWezXZs3c51UPYBqcwTcQuB?= =?us-ascii?Q?Ek79moQDvPBZqbrvqgDX1RwxHXm3b9jlOS69gQwSgCaAnd87wzHHbICzKlWt?= =?us-ascii?Q?KQ+HxDOvhkz4ATrbSBs5kO1HmIZ2MGY8oTnyYqgizynRQXHkITXN6sR9lkm7?= =?us-ascii?Q?E+u3yxbwHwSONNKUuWUttQzYPr5oOF2kA2h2LiulJxvEKT1WUpgqdA4JrP5d?= =?us-ascii?Q?BmM5ZBUHccPDPqxosXJzJTV8UN+4zBrXBityRGdSm7qlmVl6oVTriILYQaJM?= =?us-ascii?Q?NR9RvUAQDqG4RXOPsIWrJ+HsATTO4AnS0HCE3naC0EGV34lZvYce5Xcbab4F?= =?us-ascii?Q?LgQy9SmVB/1WZD99zH0h6ypjR9f/ASV7sS4anTvVLrdWlmZKqrIKpPxDFL/z?= =?us-ascii?Q?S1QNyUz5i4IV4/WE84hlOgtQa+JCCDi8WE+HcI5hHUsiq5kZCVormThlC8nl?= =?us-ascii?Q?L7ThjQ3dkxKbTWiLag/YImGHZzFg6kLG+S2M1CgpER5J3bfBXz8rSNpyrqpz?= =?us-ascii?Q?54T4SoGbSjAEyp5fGsV/a22V7Vqz9jEj0WclsBlocHHdq6MQTlENxSYDF81G?= =?us-ascii?Q?zo7kHQY7fhSOpdTHS+YfIJ3FLgM/Ab8huCyGTjkyWON2bU7Mep4dtBkhP9Yb?= =?us-ascii?Q?eP/0ElRnahwOU4P2ZXL9LVEownn2fPnKVcZHtVYH7O+1F//S7r7+xWZzS13+?= =?us-ascii?Q?H5zbPl4K3dnwYOc59eM=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(376014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2025 07:30:26.5691 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a613e7ff-c707-4875-d7ca-08de21bd596f 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: CH2PEPF0000013C.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB9088 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Implement the kfd_ioctl_svm_ranges() handler that integrates the SVM ranges functionality: 1. kfd_ioctl_svm_ranges() implementation: - Validate input parameters (ranges, attributes, addresses) - Copy range descriptors and attributes from userspace - Call svm_pin_user_ranges() to pin the specified memory ranges - Construct kfd_ioctl_svm_args and invoke existing kfd_ioctl_svm() - Properly handle memory allocation and cleanup on error paths 2. Extend attribute handling: - svm_range_check_attr(): Accept KFD_IOCTL_SVM_ATTR_MAPPED attribute - svm_range_apply_attrs(): Set prange->is_map when MAPPED attr present - svm_range_is_same_attrs(): Force update when MAPPED attribute used - svm_range_has_mapped_attr(): Helper to detect MAPPED in attr list 3. Register ioctl in amdkfd_ioctls table: - Add AMDKFD_IOC_SVM_RANGES entry with kfd_ioctl_svm_ranges handler - No special flags required (use default permissions) This completes the implementation of batch SVM range registration, allowing userspace to efficiently register multiple non-contiguous memory buffers with a single ioctl call. The implementation reuses existing SVM infrastructure while adding the ability to handle pre-pinned memory pages, reducing overhead for applications that need to register many scattered allocations. Signed-off-by: Honglei Huang --- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 67 ++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd= /amdkfd/kfd_chardev.c index fdf171ad4a3c..7e7e00d3f873 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -1739,6 +1739,70 @@ static int kfd_ioctl_svm(struct file *filep, struct = kfd_process *p, void *data) =20 return r; } + +static int kfd_ioctl_svm_ranges(struct file *filep, struct kfd_process *p, + void *data) +{ + struct kfd_ioctl_svm_ranges_args *args =3D data; + struct kfd_ioctl_svm_args *svm_args; + int r =3D 0, err; + struct kfd_ioctl_svm_range *ranges; + size_t sattr; + + if (!args->nranges || !args->ranges_ptr) + return -EINVAL; + if (!args->start_addr || !args->size) + return -EINVAL; + + pr_debug("start 0x%llx size 0x%llx op 0x%x nattr 0x%x nranges 0x%x\n", + args->start_addr, args->size, args->op, args->nattr, args->nranges); + + if (args->nranges && args->ranges_ptr) { + ranges =3D kvmalloc_array(args->nranges, sizeof(*ranges), + GFP_KERNEL); + if (!ranges) + return -ENOMEM; + + err =3D copy_from_user(ranges, (void __user *)args->ranges_ptr, + args->nranges * sizeof(*ranges)); + if (err !=3D 0) { + kvfree(ranges); + return -EFAULT; + } + + r =3D svm_pin_user_ranges(p, args->start_addr, args->size, ranges, + args->nranges); + + kvfree(ranges); + + if (r) + return r; + } + + sattr =3D args->nattr * sizeof(struct kfd_ioctl_svm_attribute); + + svm_args =3D kvmalloc(sizeof(*svm_args) + sattr, GFP_KERNEL); + if (!svm_args) + return -ENOMEM; + + svm_args->start_addr =3D args->start_addr; + svm_args->size =3D args->size; + svm_args->nattr =3D args->nattr; + svm_args->op =3D args->op; + + err =3D copy_from_user(&svm_args->attrs[0], (void __user *)args->attrs_pt= r, + sattr); + if (err !=3D 0) { + kvfree(svm_args); + return -EFAULT; + } + + r =3D kfd_ioctl_svm(filep, p, svm_args); + + kvfree(svm_args); + return r; +} + #else static int kfd_ioctl_set_xnack_mode(struct file *filep, struct kfd_process *p, void *data) @@ -3226,6 +3290,9 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[]= =3D { =20 AMDKFD_IOCTL_DEF(AMDKFD_IOC_DBG_TRAP, kfd_ioctl_set_debug_trap, 0), + + AMDKFD_IOCTL_DEF(AMDKFD_IOC_SVM_RANGES,=20 + kfd_ioctl_svm_ranges, 0), }; =20 #define AMDKFD_CORE_IOCTL_COUNT ARRAY_SIZE(amdkfd_ioctls) --=20 2.34.1