From nobody Mon Feb 9 17:05:05 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012056.outbound.protection.outlook.com [52.101.43.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D766F2D780A for ; Mon, 9 Feb 2026 06:11:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617471; cv=fail; b=T7eSHSK3hzhVGGL/SyjMIriEwPBjwECZaKDXBHBn41eBB2LMC7d9EDAkzJWGh8b5yq6fBRP6ME+3V6M6PUMKlxTI6pqpniiIwcFAL9l5D23/w/01sdaeWFwFmD075uwxwHIJzkBW43r91ZG9bSOeF+Hi0GMfnXlKBfwRXCzB8Fk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617471; c=relaxed/simple; bh=+2c5rjfEuLJ+3MrVOrZXfA0bbKDwtGpUnvAcW+2TQKY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Dkp7k+lHow8j+72Z/OOb9MVddV79ZiTVdIMWsDgeA2ecR5/1a56puwiTk8Ca5kTxKAItks8STvIqU11B+dCjL9zK2AXw5MQ1bpqZACP+TBWhEpDRi9bceEYRdsA937AsadPOIqa1rIktbSLX4ISnw0KMSGeUnUI/J1d8DXmT8Rw= 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=cOGtOhJs; arc=fail smtp.client-ip=52.101.43.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="cOGtOhJs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lNbVvGADjqgL0mufX/e8998UZ+S8199yTtf6WbNlkY8EzEE85NdLYnUSYGRuJPYBHZX1UN4L3wp0+HJTsQSaKDyXN1bECvbLqz/k4EuSj5yLVtBiERWyyXvYppPSUoiiVj+YOxDTClh/23ixyfuYB0WOxCPJzgvJ9tJyfTjZ/m9KjzC8rfF5UT1OlNw5WZBPgYr7doqpAS9NTomjOvNEHBb8aX40Iuos3NXlrPTnQjZMpmKmKFWauOu4Kfq+TSILHunT73iUgBRz+jwE9g892dpFs+AwhknQUZPRTJ/ejgOygzvY56pYtotndQjxTorKAsK1BFFv59PGyNeCluCRRw== 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=TMbvLyaAvNXsFoSV0KbS9N3tGeqxMjOmorgMDw9FoPY=; b=C+ehacZe7zN5WinWTA0wvTr03Uuv+CDVCM/0Xds3geXg0lFxALbXC59GcJxx3R2eQEY0I7wMeCjQDVfB/FRRH8RhzpKQjdTVnkVyvuy1xRwqABwupLd+FaYi4TUeDWL6MuXtDHI3bOQndfJA9xZsXcQJa8GY9tmlZ/YmEI0A7l4nClmlaeW8GXKeIIwcaVlZFBaee5NmsrHVNxJWGytBpW0UK47VSUNnnmOI+S3I+2A3HBaPurv1fR10peH58tDpoKl+ZGqU/pAs6o01wmgY3wyjjYPZGlYPANpylj2iwAPf0CnJAPjd6A145avQutR2jj2hvPDXfhHlPeDFCIICeA== 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=TMbvLyaAvNXsFoSV0KbS9N3tGeqxMjOmorgMDw9FoPY=; b=cOGtOhJs1h3LTfrB7CHZbxDk3hfalIFPl7nUfcBuUN7uvTr1JJE1/6E6f4LfU5MBJNUj1DZ5FI9D4G8W6ami+C93H5h3ElVFE+YLKYPTOQUlYcDSocg0kFPGkm1jbi71qFHyOm0w23HdTbaBApKITCm3Ozt72DeW7nehtpM0OqA= Received: from PH8PR02CA0050.namprd02.prod.outlook.com (2603:10b6:510:2da::19) by SA5PPFCB4F033D6.namprd12.prod.outlook.com (2603:10b6:80f:fc04::8e2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 9 Feb 2026 06:11:06 +0000 Received: from SN1PEPF000397AE.namprd05.prod.outlook.com (2603:10b6:510:2da:cafe::7d) by PH8PR02CA0050.outlook.office365.com (2603:10b6:510:2da::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.19 via Frontend Transport; Mon, 9 Feb 2026 06:11:06 +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 SN1PEPF000397AE.mail.protection.outlook.com (10.167.248.52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 9 Feb 2026 06:11:06 +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; Mon, 9 Feb 2026 00:11:02 -0600 From: Honglei Huang To: , , , , CC: , , , , , , , , Subject: [PATCH v4 1/8] drm/amdkfd: Add userptr batch allocation UAPI structures Date: Mon, 9 Feb 2026 14:10:40 +0800 Message-ID: <20260209061047.3881808-2-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209061047.3881808-1-honglei1.huang@amd.com> References: <20260209061047.3881808-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: SN1PEPF000397AE:EE_|SA5PPFCB4F033D6:EE_ X-MS-Office365-Filtering-Correlation-Id: 6dd66dde-d3c2-48b3-e25c-08de67a202e3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?e3yRY+/GarfzaibHXTf0+KPddfVu3sGpJ4EVj5TkQTAXxi6jXTTikNNhRgK6?= =?us-ascii?Q?ERvzAEa7PRWPDcNDTJqbztVT5fXG9dN83/+WPFa4MgncnPGxD6HIMPL9U0Qw?= =?us-ascii?Q?Mvk10s+PZlctRCH3QVtWVukTHYg956BfP93d0QBtbWwAYS8vA0/IHDfzU2xC?= =?us-ascii?Q?l1CQFypEaXwvBYhwT3qArDQjdOOKq1RYIk3PO/LW932jbBC1AdI95OZZ1aWS?= =?us-ascii?Q?5E2dFkWdPCjCEip8ZRB7PNYTdVlDwjw/4niKz6GjjCPyipt2St8sEaqBnsNx?= =?us-ascii?Q?JmztUZ3U8a3qw9xPieg+wQZ+UaOu8QnF/Yz+7Nlj1+1JfDRfGgTv8WFx/+gK?= =?us-ascii?Q?q+uhtPfCZdsWTiMFp0YeQmv2Q2OhivyTBRMMbdujhY9bmr+ncNfOZW7tHLyl?= =?us-ascii?Q?Ay0wmSXtSQbGMp/PAhCRAssiqotQEU4NgRrqqwOuTsc8r4CLhAd/Rn96rEda?= =?us-ascii?Q?a5AuBeKQe3JEjAimNRmd9PWHB3BieoQC2tLg4WcZPhFnTNhyo2a5etnNLSSz?= =?us-ascii?Q?7TY/teYYPp1IIgLBiF0QE8eRLXGlq7MiJD0v71/opTbZDtn0jPh/tNilxENk?= =?us-ascii?Q?XgxJ70se2o5u8obveFJCyaLLOJ3NUWxCeDtN+omMk2Zyz//+dEh9VVX6Ww7+?= =?us-ascii?Q?ii3dSKbnFkjUNsrqxPEZxzG3JwRrnunhbycyX+T8WE3d2Z+DTVNRvsTU42rq?= =?us-ascii?Q?2IS5BkCGJYP/Eaq6OWvzY/DqfQY9liAvV7z+lqL+mM3O0IS/iRKhSXufxEM2?= =?us-ascii?Q?xwh5Q/kQjbT/DcDXh0mTi6LIV/KUY3m5TfjN9rEvui6HVFUUK8wkAjRUF2qb?= =?us-ascii?Q?tMz9W4uC69auO7R22gBRSLBr2nR4cY6T8U0axYtoRrGRCn9TolSUHb+ZBYr8?= =?us-ascii?Q?A2m+n82KbdJq2VXv0To2oxYvfXtr7NwpKaLXv1+UNf9TQzHB3a5FCOjH2KmK?= =?us-ascii?Q?wG0nXCJjqWGNPoGaoll6PXHJVPs9PFmDPXfKQBzAlWzT6qh0dw982rs/6tTS?= =?us-ascii?Q?VEUA+rvtvoMiaGbS5zE2wY0BcGoS9oTZA/F91etsgbhXK0vrVX0y3q3YiD7x?= =?us-ascii?Q?4KNPBFqrS1G4xLtaXk1Iqln2Tz94WoFjPi3TOg7Sb2qxhh9KjZ2fKbHAbl2o?= =?us-ascii?Q?XhznIdlKM30iAMq2lXc1mS8FhL8EsOoJY4mGQZviADy4zbCGOzZXMvWrLSIf?= =?us-ascii?Q?08BXyg0b7bwsPirvloSKPKErItudAqOZjvz4chlh7BI4+U0jEh8XbR7YUxW9?= =?us-ascii?Q?uAuNXKu2Xd3Q2LotQCcdon9ogAEKKSSKj6S04zfaPpUqeTNw6oPiR0qb3iZ5?= =?us-ascii?Q?tPuSCpjwrx8IsYNbEoFD3eLqhhE5bUs8NysYXIf2AZoUEJFmEFA1rXbQrS5Z?= =?us-ascii?Q?I1psWQ0NtpC0s4/4+st6ktPaR80TZEhfBSQn9RLh31t+buZIl179Zzo7eD8Q?= =?us-ascii?Q?W6yK3buZ/1f4xQ/IoJJp7bcRpbOcZYAfcxKWiXJVbgd2WXNGSztnVAtTL7Re?= =?us-ascii?Q?LnQEAvZKJoSpBCh8wMI9IUhtFPtbcmD9FFt1cbkZZQhfHtmY2YKWVG/PNSlU?= =?us-ascii?Q?5w5xxe+wRePpcl1ORJiWImuIagKfVxR+UxFKZjhjHfaPC3Er8+DFm+gLwqtC?= =?us-ascii?Q?vt2GyfQRTJe4R2rmC18CgRPPMRdeIZAjk7Lkjp07mqdrzlWXScDoHhFOvmFb?= =?us-ascii?Q?nc5JIQ=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(82310400026)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DIwr0nfyLuZSisxEtrxayr68n4ckDhCol9Rri6OznEHzFmsEQEeZHrRo83YMCWee4KbdLpmj/I6BjDhKMRwHpEqdEIwxHPKi2RW8TOwBcGGacJJLNCkJ/T4T65MqfHJm4NW1U+zNGxgm7G56fK3pbUBxzCJ3mQPZq+OAr+fj4KlZnP7hxtvpFD8TcUlTnYubdeKRanKEfA0FBBWwLm4UbezpM4Ka8S7D0cs66gMfU1fiXVDfmdXiHV+64/UMuLmzdPZhSl3I5caHrCDfPwSWc/v8Q3Dxgd1FuE6wns3DRKknZbtcs5DibUcUzrcSW0I1wMWyWzLhanIbzUuyStaXduUAFVh8LHmEcq1NFhHmiLjXyflAryWAjs15cRJoHR2lKE7fWvcxAzbMDvVo6FhFZ8RjUBLKCUowjwTm4B8NUmQ/EuP3zkUyCnOKXHqqHWfl X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 06:11:06.3627 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6dd66dde-d3c2-48b3-e25c-08de67a202e3 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: SN1PEPF000397AE.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PPFCB4F033D6 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Introduce new UAPI structures to support batch allocation of non-contiguous userptr ranges in a single ioctl call. add: - KFD_IOC_ALLOC_MEM_FLAGS_USERPTR_BATCH flag - struct kfd_ioctl_userptr_range for individual ranges - struct kfd_ioctl_userptr_ranges_data for batch data Signed-off-by: Honglei Huang --- include/uapi/linux/kfd_ioctl.h | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h index 84aa24c02..579850e70 100644 --- a/include/uapi/linux/kfd_ioctl.h +++ b/include/uapi/linux/kfd_ioctl.h @@ -420,16 +420,45 @@ struct kfd_ioctl_acquire_vm_args { #define KFD_IOC_ALLOC_MEM_FLAGS_UNCACHED (1 << 25) #define KFD_IOC_ALLOC_MEM_FLAGS_EXT_COHERENT (1 << 24) #define KFD_IOC_ALLOC_MEM_FLAGS_CONTIGUOUS (1 << 23) +#define KFD_IOC_ALLOC_MEM_FLAGS_USERPTR_BATCH (1 << 22) + +/* Userptr range for batch allocation + * + * @start: start address of user virtual memory range + * @size: size of this user virtual memory range in bytes + */ +struct kfd_ioctl_userptr_range { + __u64 start; /* to KFD */ + __u64 size; /* to KFD */ +}; + +/* Complete userptr batch allocation data structure + * + * This structure combines the header and ranges array for convenience. + * User space can allocate memory for this structure with the desired + * number of ranges and pass a pointer to it via mmap_offset field. + * + * @num_ranges: number of ranges in the ranges array + * @reserved: reserved for future use, must be 0 + * @ranges: flexible array of userptr ranges + */ +struct kfd_ioctl_userptr_ranges_data { + __u32 num_ranges; /* to KFD */ + __u32 reserved; /* to KFD, must be 0 */ + struct kfd_ioctl_userptr_range ranges[]; /* to KFD */ +}; =20 /* Allocate memory for later SVM (shared virtual memory) mapping. * * @va_addr: virtual address of the memory to be allocated * all later mappings on all GPUs will use this address - * @size: size in bytes + * @size: size in bytes (total size for batch allocation) * @handle: buffer handle returned to user mode, used to refer to * this allocation for mapping, unmapping and freeing * @mmap_offset: for CPU-mapping the allocation by mmapping a render node * for userptrs this is overloaded to specify the CPU address + * for batch userptr (KFD_IOC_ALLOC_MEM_FLAGS_USERPTR_BATCH), + * this should point to a kfd_ioctl_userptr_ranges_data stru= cture * @gpu_id: device identifier * @flags: memory type and attributes. See KFD_IOC_ALLOC_MEM_FLAGS a= bove */ --=20 2.34.1 From nobody Mon Feb 9 17:05:05 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012057.outbound.protection.outlook.com [52.101.48.57]) (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 0C98F314D06 for ; Mon, 9 Feb 2026 06:11:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617475; cv=fail; b=usrCPEBt+O/88kB1AlQfJIQVppbRKD2rjTN8THbW8Y+vRXDNMKiyKuQtNJe0k0SIjzawuPpCnbfIdMRJM+GIpYqoTGS66l1Hg2BtKbqhHDxhYOceqIj/Y718qL0GBSX4K4YrOkJDoghKlmJpzQU5tuou4ooz+gzzOn0id0Hb7L8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617475; c=relaxed/simple; bh=Q/y2aqwaLaZMdEkT8yRq9MhkO9N4vUO30qoVyTFvpxs=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QNJGYnyT3XVAB88LGLz51xRnjX+ZR7bahvV/zpLEyFvFRzoe0o07ljQV6VvMAWvZmI8qyIsv2Djo+ddbDcMSEv0N3Sp83srLkbTT3Bgqx52yqq197VFN6vdApW2NmqenZa9BCiIaTNTjgTsTuwX0n8W869uzP2KlekJskyPAOhc= 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=bxtYlMa5; arc=fail smtp.client-ip=52.101.48.57 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="bxtYlMa5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FlJAlDNSyhNtaorBg8uvhCtPnssvT+gOEp2mVdcgleAYAUAHcc8lTgj5axg0f3M0Mv6iVVDeVHakKJHxrpPG4SAjeSKcdNlS47Y/H78p3BdmhHjXwsVbhaP4iqCDjJxF4REnJB1A9rSItGvACtyS0kMCJGdsPVpeGp8eL7Cu72bWd7odj83kNPrW5WgRD9kt00Gk4A7JtQk5C2CFWxqY0+/aYpvXqoSz+u7CgrBzRxEd6KSjQLLi1DZLKSVbHaGX2J5ZtLW+PYvLc+VDAenJytVn390iUHa32YC9BD+gIvQQgB8cGlzKKlk0tNnjZ9JfrmHCkC6V4wYCtZwXWQ/JZQ== 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=Wf/6hVSjZ33ruWCNlfjJdVzYU6gW/NkkhjSUi89Hosc=; b=KIC6xrZaw4zQ0rXBwQ+QcPNX4i4cYnev7jyIGa7xOCTmBRmtgAAM1UP65TWW/i5ArNxetWt9GLP5iRiFw/0CtKf9vslEmTNR4z+umn+aejkQW61yUPUwiCR1C6XV2/4eQ+QkJ6bV3v9YVM4Olenm8ITMrfqJL1gEWBujeHRj5E5uBfLQJSJxZPKqCBLFzRJ4a3DtCTdJHLch3wxiC1EPBEJBzWfG9PshTjbcoQdvgTu0jwgSIG1sozqN9he49evGAVq27dRiCzXzhLkTpiKdfU5Mh+essC3VoJdITYhKcDE/DZxqu/FnmD9Cu2WbjCj81plScs8HJm7DM1BX2reu/g== 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=Wf/6hVSjZ33ruWCNlfjJdVzYU6gW/NkkhjSUi89Hosc=; b=bxtYlMa5EsiasA3xHtuhBzkQClXa1wIyq9Wqh69LXt2pNfOjgTZVa6gtvnlR/iZcJqfopsJ6Ue1ZF+D0VuUrGq4jY4eYDR6SJ1uvfxF/V5p6wJSKXCfoj8+0mvpIOAjaYcSzU7OOQTM24ufTzQfvc2Y6PVjS0tCL37A8PkqseMk= Received: from SN6PR2101CA0012.namprd21.prod.outlook.com (2603:10b6:805:106::22) by DM4PR12MB7525.namprd12.prod.outlook.com (2603:10b6:8:113::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.16; Mon, 9 Feb 2026 06:11:11 +0000 Received: from SN1PEPF000397AF.namprd05.prod.outlook.com (2603:10b6:805:106:cafe::ad) by SN6PR2101CA0012.outlook.office365.com (2603:10b6:805:106::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.4 via Frontend Transport; Mon, 9 Feb 2026 06:11:10 +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 SN1PEPF000397AF.mail.protection.outlook.com (10.167.248.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 9 Feb 2026 06:11:11 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Mon, 9 Feb 2026 00:11:06 -0600 From: Honglei Huang To: , , , , CC: , , , , , , , , Subject: [PATCH v4 2/8] drm/amdkfd: Add user_range_info infrastructure to kgd_mem Date: Mon, 9 Feb 2026 14:10:41 +0800 Message-ID: <20260209061047.3881808-3-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209061047.3881808-1-honglei1.huang@amd.com> References: <20260209061047.3881808-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: SN1PEPF000397AF:EE_|DM4PR12MB7525:EE_ X-MS-Office365-Filtering-Correlation-Id: 2c8024ed-29c7-4e57-7ae7-08de67a205e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?qOlsQDLVYa3KQZhjYVMMmHe9g83qDXZvWvAhSsvx88VWItKuK7DzCN95efs/?= =?us-ascii?Q?WJvo7X7rOcnV4wOV/MfqeTfvUBFb4M2km77/3aAyMNTc0gX3xHfHsyHBlm32?= =?us-ascii?Q?DrsnIus5P8ri2dWfz4bEE92W8nWnLqaRsAM7OCehV2YiIA8BIPu4Kz5td52p?= =?us-ascii?Q?BB71vzyGFyGGGb4jWEp3bNtigX0Wgx0m1pDLRw7d948KT2XPu5ttB7us6UgR?= =?us-ascii?Q?h4v7VrjLJhmsOp2X8nu/Mx4pkuGvmnanYGqbjwrXtQk4cMrCbA3l/AR/s5jt?= =?us-ascii?Q?xWsswr3jfXLPXMUFKqJcHYifqRkxyQb5spTzXbqXyXJlD4OCS3KYgK1pDdwg?= =?us-ascii?Q?+ynLP9M6Cd6OwiI+qEx6st0S/Q+OG3K+BFdvUWnJl9SE9UUeulOCkO4NGoxw?= =?us-ascii?Q?yqAgm1roonBRMKACfzFKYqmjAf8RNOOtLT0iBQUFKANz/cTqZ5UcQKTpg9x5?= =?us-ascii?Q?2sFDFY3Wkr2LyTR95kHCpin86rNB7aPOz7b8qW5ks/CE0bT/2HGIG+s/dz0N?= =?us-ascii?Q?QttgMhzFCgbuRA4Z938pHdlrePAXYc5wDEX0jltsvpx6sJUJzgQNyUEyozMT?= =?us-ascii?Q?QezLwJEuRSzOiNssguKQCUhg3H12NamWv7nmqeu9OG/QKlZCtpBHc7/FJqjz?= =?us-ascii?Q?g2WrdLoN6Wlx096qqGgRTCBO53TE+xyJOi3WijMJ1MTgP61YyT2gMORgLnby?= =?us-ascii?Q?Ke8WmDjr3DYAOZbGoA+qf4MybNDV+hfDjcJT5F4voeidpoiYTFS2KWF803zN?= =?us-ascii?Q?Ag3Xh7ZbnY3abBY+IbKSqbJULiZjRcXWDCCHCO7vIyICn3ffkRboAc9jvAWm?= =?us-ascii?Q?MosiegyqRbEaRHS7hWR5aY8zDB74vLTK5VryZCF5XR77wTCgbRQvzyyNUmVk?= =?us-ascii?Q?uIfPaqbGVUqvh61rPHFTikDdveMLN1Qe9Zh+XIGRlSInmwSRXNxB+OlCw2AX?= =?us-ascii?Q?BbDxU9o8uQMIU9Y6OR0c8btTJtSbFWVIAzuIA6OO2R9M4a3J7FR/MGqaMc6j?= =?us-ascii?Q?j5gdxGPKeZroXnnQgKn+20xq/oW4aC2lldFdy85un+yw9ySO+s73G5o/addf?= =?us-ascii?Q?A74Uh1P8U1SvxahOC+tSPSUsMIC748H6XmCsxtZcapfAfGVQ7C/5y0EDVw+k?= =?us-ascii?Q?UjaSLLjNGdlPg0V3ZNvFkdBzyo4yYe+Wx3zI3G0n/mB4rj3B61hpT4MXBHBZ?= =?us-ascii?Q?Dd7mKgxFFP1jMMN0BxNt1aTlXFDwTlQkZc8mXAu7RFA8hPxpcMPWRnfwn6vv?= =?us-ascii?Q?WfnTt0i6E+edRQRZa6tjLqbRc04DPTH/vZjOXxPj8V0sOTxDwRoOVvZoWW9j?= =?us-ascii?Q?f/W4dH8AnzTPOeY6hcOjQxhdwvJRAgBLD9w40dNbv6o7XeAaWC+JgV1cVtvo?= =?us-ascii?Q?MToxhZcU8p83Bd0UWdzdyglAQUBIFm1hYpD+IvR98CcGXz45xfcgPLXok2vl?= =?us-ascii?Q?fT3CEUn0rZjyCl3UvL/3nzwzOLPnPZm3rZP3iour+/HPTYV4hi5svNd5IRQX?= =?us-ascii?Q?wlHiS7l5f1+6m2kWNUzicsGKOw0crrBDziVGWmI1gyqSsnMkUluT6/kYKw9m?= =?us-ascii?Q?vyxIbqb7e8SdfDQynXQE29uL+jNGdlaIjbhQnavN/w4DQd+sbE9t9Koay81/?= =?us-ascii?Q?X9H6ro4cGtkZIo/nIFi1e321tYLLFfN2gNtM0zQgtSM2jsyo+vykTi23LhDV?= =?us-ascii?Q?iGviaA=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OJQR+SUSTJMimMrxejpf0e+/qWmjn0l6qPh0vdW3qXTN8N/mnmKGoZOon1kj76+TnTruO0Tze8Oiod89lo2uT6xOCGnyKk4GiM3bkfYWJCLw184TniIiKzlzyWMeguHBPkOJDudN3RFkGeGtMwYUer6t0GcRx+qALtAc5Z2E1qJYrrUtww6tdqbOGqgeC5+geSmzciJwAdJnFQffq0u+l2BQMQwmrv9nqTA6UddPROhK2JUqTEHspr3VZFmA3K+4oHDUVANiISe0oU6upE43ObMpk6Lmcxs/ok891HDvZmAN9CG79gSB4496eOITCf6zLRTA9KXkeZuDRZl55uvLePmRR4zkZOpdziPFmWa95EPrQJ8PQFvOqrVxoqTsgxq6W3L5QSfO/htA/eEGp4vxiGSjrFrjbKl/bIEQNl058fdjztmCeYJQ3K6zZt6jQTvg X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 06:11:11.4256 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2c8024ed-29c7-4e57-7ae7-08de67a205e9 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: SN1PEPF000397AF.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB7525 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add data structures to support batch userptr allocations with multiple non-contiguous CPU virtual address ranges. add: - struct user_range_info: per-range metadata including HMM range, invalidation counter, and interval tree node - Fields to kgd_mem: num_user_ranges, user_ranges array, batch_va_min/max, batch_notifier, and user_ranges_itree Signed-off-by: Honglei Huang --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/a= md/amdgpu/amdgpu_amdkfd.h index 321cbf9a1..5b6d399f5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h @@ -48,6 +48,7 @@ enum TLB_FLUSH_TYPE { =20 struct amdgpu_device; struct kfd_process_device; +struct kfd_ioctl_userptr_range; struct amdgpu_reset_context; =20 enum kfd_mem_attachment_type { @@ -67,6 +68,15 @@ struct kfd_mem_attachment { uint64_t pte_flags; }; =20 +/* Individual range info for batch userptr allocations */ +struct user_range_info { + uint64_t start; /* CPU virtual address start */ + uint64_t size; /* Size in bytes */ + struct hmm_range *range; /* HMM range for this userptr */ + bool valid; /* Flag: true if pages are valid, false if invalidated */ + struct interval_tree_node it_node; /* Interval tree node for fast overlap= lookup */ +}; + struct kgd_mem { struct mutex lock; struct amdgpu_bo *bo; @@ -89,6 +99,14 @@ struct kgd_mem { uint32_t gem_handle; bool aql_queue; bool is_imported; + + /* For batch userptr allocation: multiple non-contiguous CPU VA ranges */ + uint32_t num_user_ranges; + struct user_range_info *user_ranges; + uint64_t batch_va_min; + uint64_t batch_va_max; + struct mmu_interval_notifier batch_notifier; + struct rb_root_cached user_ranges_itree; }; =20 /* KFD Memory Eviction */ @@ -313,6 +331,11 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( struct amdgpu_device *adev, uint64_t va, uint64_t size, void *drm_priv, struct kgd_mem **mem, uint64_t *offset, uint32_t flags, bool criu_resume); +int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu_batch( + struct amdgpu_device *adev, uint64_t va, uint64_t size, + void *drm_priv, struct kgd_mem **mem, + uint64_t *offset, struct kfd_ioctl_userptr_range *ranges, + uint32_t num_ranges, uint32_t flags, bool criu_resume); int amdgpu_amdkfd_gpuvm_free_memory_of_gpu( struct amdgpu_device *adev, struct kgd_mem *mem, void *drm_priv, uint64_t *size); --=20 2.34.1 From nobody Mon Feb 9 17:05:05 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013029.outbound.protection.outlook.com [40.93.196.29]) (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 081402D780A for ; Mon, 9 Feb 2026 06:11:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.29 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617478; cv=fail; b=B6mrj2e3blXwmwy6ISE/pEH1Aq2hWsIKAKmamm00cAmNYqPYzzK6UebZAPL6Jew1tCD2yWAYhmcwdfXBZx1yisaL/Hq1lV9DIyzsRvzS+5lDTMjO/5x5NmQell8vYqC2qHQ2JNXVTHSco3CO7UvSEEfj2dHy5/nzvcKCEo/caaI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617478; c=relaxed/simple; bh=WaneSZ2W8bycbJbFRlqpnjKXE2IX4+SFQ7JfBbdF8kE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=erAFfTlU7N/8I/1f15Y1AXiTPpaObhhVqPLgzqlJBY1DhIiRm2eK6/qANcW2Yb3hHVMhCpRou77qUcYJ0buEEehvOFuw83CeCp8wq0D6uKJF6Qx5Vjj67f0kiGiN1VfLc9EhWKRQ1IijUY69Hs1sf0rgP4r15CnPNnGQkHe4Zb4= 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=13/Hc8eD; arc=fail smtp.client-ip=40.93.196.29 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="13/Hc8eD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VwV0L1CA8jgiIv/TdzRlg+j1dd647F/f15nXG6URN9sorn1OKUUFHXwVv+MYitA67bqWWpFkrEwp/+P3MArMMaHigNwG0i+IHZV6Tf5+pn5c49GMoaEW2oC6pC/Me326u+ZvAK2EKOFo+usKRO672m1yfIE57+H/3zr1WHCX+8wN3zxS4wdRTMY3rRyTjnauXUQK0Xtic8UZz2+MhBNcaEHZN3Danq4TUh4dG02LAz9u1a0P+04kKbHnLMOCJyPJ/BOKQoUkjqtBtRizbByiC7v7AUc1fYmOB4BnyQTfLuCnTmqUqHjpaOrP/7he8uiibltrlOXo3w14vL8nxYJpIg== 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=DuNX2/bfUoi4BGUO3MtdvWGsFfEgw11uVJsz6wEavKE=; b=BSQHSH9cu0/XsL7Gbs++eAhegMt8u05x4V8Uzy/cG3aS+BeRlb2RDvde8F3Jff7MeKMuDvXQ6ReDFpGG/e6C+Er/KTXgoacgYcPekghXibXqUHGEUG2CWPv37k+a4tQvjNR0j7bxBboyIr2bUeCwxjfmgr7a5zOYcUQd9Vagg6zP5c78fvUqFjCWgcSgu5m/ezvy62/2MlNdDbxM5hGhMX+ES8JFbu56JNdKrVYmwc+bXBuI95qyNVgadnQgh/ezKI/P6+mnoLxamr17q95OsITwyfyT5ELGgyiu6L5rOOnIhIfmzN5j9A8gBVKYI/Z8XiATnvkfbDEMP+y61xZF+g== 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=DuNX2/bfUoi4BGUO3MtdvWGsFfEgw11uVJsz6wEavKE=; b=13/Hc8eDia/XN7J8+rxAq9RDCb6RtMui3sVERT/ZUlODMEIUgmaUKu0emQJl47UDHPDpqKUONv45G7CStp7N3bfjtG0ERyrcnr87FL4rnTt86Epxfuzw0da3mekM7/EqOLXxWXXQP+Ku3WVdQ8ShhGJTY8Mhy3u+CAf1HlVMOpQ= Received: from SN6PR2101CA0020.namprd21.prod.outlook.com (2603:10b6:805:106::30) by PH7PR12MB7308.namprd12.prod.outlook.com (2603:10b6:510:20c::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 06:11:13 +0000 Received: from SN1PEPF000397AF.namprd05.prod.outlook.com (2603:10b6:805:106:cafe::32) by SN6PR2101CA0020.outlook.office365.com (2603:10b6:805:106::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.4 via Frontend Transport; Mon, 9 Feb 2026 06:11:13 +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 SN1PEPF000397AF.mail.protection.outlook.com (10.167.248.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 9 Feb 2026 06:11:13 +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; Mon, 9 Feb 2026 00:11:09 -0600 From: Honglei Huang To: , , , , CC: , , , , , , , , Subject: [PATCH v4 3/8] drm/amdkfd: Implement interval tree for userptr ranges Date: Mon, 9 Feb 2026 14:10:42 +0800 Message-ID: <20260209061047.3881808-4-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209061047.3881808-1-honglei1.huang@amd.com> References: <20260209061047.3881808-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: SN1PEPF000397AF:EE_|PH7PR12MB7308:EE_ X-MS-Office365-Filtering-Correlation-Id: 97a79a6d-39fd-4799-44b0-08de67a206ec X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?NG0TYTIH1vnPR8g0Ul4vQkCQGb6ZshGFh9wHQbOr+UWAVJTwh9pw+vwnMeLy?= =?us-ascii?Q?S7qD8c21ssqJMVMkYjaoP3rbn0ogJIviCVyHu+IPJ7HTrft1AcsvDUek2fid?= =?us-ascii?Q?5h1Nz5eeDhbEsnS/2cM/nilZcKL7But516iZJiQPN4ka51lImZeGJgOJWWhz?= =?us-ascii?Q?NaKu2j3bCNlyTjFrXZ5+CxeUwu7+a99Pet6I4I26T8dTAkhVo8g1fr7BcG7j?= =?us-ascii?Q?Yh6PiGfvtrwS9p+yvXjH024rMq47rAZpdBSAmyK/EhqJAFrqUV97WgMHyxsP?= =?us-ascii?Q?8syg+TYnryqTW0Hoq2Aet9cRZkMSpKjzritiwKIp7V6Jt8Fk77C/wa6xLKER?= =?us-ascii?Q?JSoqqB5etjdJ1IuDdalA+7Wa6jJO3Z/B5JxLLSahWcRN4nrJ6/slV8v+c2Wz?= =?us-ascii?Q?CpEG914cvYwnESKA302ZrVANRAP7RDCLZWOW81wUlmLhVYZglM8S9GRKMBlz?= =?us-ascii?Q?iYBH7vZdRBzw5XrX1shfT/xG89nmVx52uTIH0hc77xsqg1SaTU4cl0+egWLU?= =?us-ascii?Q?FIfdTOKCeScnDm4ZgQADDKQxg51iOf0iDSuHcBDlBDOBXiHNJruKsTTzbXZ7?= =?us-ascii?Q?pS9cIUVQr1G6W5DVw6RHXfA7ZcdpOKEGhVYm/6XUivtmFwTuqjmZJOE8osEB?= =?us-ascii?Q?nh7RXiyp3pUJWwrEwxMIxgFaPNHxHYFkKfOVgcZDuvso0hQFIWBN+shE2TaS?= =?us-ascii?Q?wJdsWEz678o3ek3nKGSUYVfovZFD1EeLzhcMrOFnhTp7m5hCf/RzNpacF9ok?= =?us-ascii?Q?G5PJwtBra8llETtvQgsuojgG0ElMANUL9Qk9yRIqMtycLXyIvR2rGhGA8bUy?= =?us-ascii?Q?rduT1J0+xSm/nnZbNRhkc2N9AMGfsMGyHjysAJDVI0LwhMfm7aV6b3rWzgkW?= =?us-ascii?Q?RrldaZpaNniI2JaevbdEmVX25CmCzd/jmQ+ekhnpvA7fgDIPah5FjZhczT3o?= =?us-ascii?Q?uDN5OJnkk53lStse5JfslDiDRE7r76ZieUezut22cN9PbAjDkszCwLy+Ewk4?= =?us-ascii?Q?3mod0CFiZlOWxSEryfako4n8fifEfntwNnJ5GIH5WVpaJYw3AlVhgXMMVmP6?= =?us-ascii?Q?OeZhiaaEwpBbcyRxcdzEM6cwoixgrmqcA1SlHGl9+c9dWwzUdcWYnPCSx/jS?= =?us-ascii?Q?GgARtS6oyDDKGAouSE7/gMjXwxOrXPO0Z8gIQs51OZ1WKk0avRc55xihsjwd?= =?us-ascii?Q?bWqGrsg0qMQC67eAcZx11Enqyxdx92yrERT0SQO13VY/6H3+ai3MRsBoPUqB?= =?us-ascii?Q?iP8YWp/dfyBOCeGbwyYOJ+eoH2roDlyNxC9+c/2ftHGJdqpy4coIlecqH4UD?= =?us-ascii?Q?R1wPXHhmEtfkRyE8Jjwe9XEiiBgV/fcu+hBLZA7UFskSEwAXB4PuX8E5U5FW?= =?us-ascii?Q?12+/iFPbIsV5iqeVE2KxPgNIkpai9P8E8GCVwZ+32YC1Eoh2gabqm6edrfBF?= =?us-ascii?Q?wx5IL55/43JpgafDgdhX8BR5oqeHWi0GwOravybIJTS1TLvDKOHOChg+7HIa?= =?us-ascii?Q?AU7ssdOcwA49tL2Qo2j8w+UEOKwFglq0k/vjeK0m0FKAEfeyWceDrBsfisbo?= =?us-ascii?Q?4/O1Fdn21JXjJQx63uWLio3L8dd6v+34FNjAbSIEMHIEGTqBYQRw1OjeGI43?= =?us-ascii?Q?cBiQc2LO/RfLP4OBcSiq9LpLFU5lQ/POA67MnXogtb6Z9gperoTgMRm6Nan1?= =?us-ascii?Q?JZ1raw=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LjCRTNxd1KGugFIiaawG2fAe9yPEOlGQhZ3t+fDLhC9O1A7xhRJOXABcivH36oPLNqhzu7+F0v2ep7rApOIxY+omh1cUw9EPVxhAAzh7q8UJOtT909qUMpVPi1eDbBMvbz4HsjAVOvz7UMDLeWzjWQM8bdwxTQYVuOT+D4gHqBfjwsuh7gv0Z8wm4rYeSIpjEkD71FAjDMmgSWniL2ktAReODATKlNsUx1vX+8I9OEO7Go1Xwa2pVifikC9/NUvKwib4LEyK2n3FNHVnst5OYB+uwHhxrN5dHi3IzN6wPNmtYdFEW9Q3ipqq/yA5K1j0nA1yvZrByEGa+JwmVXIXZHJh9aGYxnlyEBo1IU2u2TOveD9aJcNwqxc2CuAuzwnmHXepD8/6SwE9FuJ0eWaxz0b3ISOKh+wvFHTYP6FrqSQLosCd0Su33ydoHse9hh9f X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 06:11:13.1207 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 97a79a6d-39fd-4799-44b0-08de67a206ec 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: SN1PEPF000397AF.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7308 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add interval tree support for efficient lookup of affected userptr ranges during MMU notifier callbacks. add: - Include linux/interval_tree.h - discard_invalid_ranges() function that uses interval tree to identify and mark ranges affected by a given invalidation event Signed-off-by: Honglei Huang --- .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index a32b46355..6fe4ed22c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -25,6 +25,7 @@ #include #include #include +#include #include =20 #include @@ -1122,6 +1123,26 @@ static int init_user_pages(struct kgd_mem *mem, uint= 64_t user_addr, return ret; } =20 +static bool discard_invalid_ranges(struct kgd_mem *mem, + unsigned long inv_start, unsigned long inv_end) +{ + struct interval_tree_node *node; + struct user_range_info *range_info; + bool any_invalid =3D false; + + for (node =3D interval_tree_iter_first(&mem->user_ranges_itree, inv_start= , inv_end - 1); + node; + node =3D interval_tree_iter_next(node, inv_start, inv_end - 1)) { + range_info =3D container_of(node, struct user_range_info, it_node); + + range_info->valid =3D false; + any_invalid =3D true; + pr_debug("Range [0x%llx-0x%llx) marked invalid\n", + range_info->start, range_info->start + range_info->size); + } + return any_invalid; +} + /* Reserving a BO and its page table BOs must happen atomically to * avoid deadlocks. Some operations update multiple VMs at once. Track * all the reservation info in a context structure. Optionally a sync --=20 2.34.1 From nobody Mon Feb 9 17:05:05 2026 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11013001.outbound.protection.outlook.com [40.107.201.1]) (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 7272C2DCBFA for ; Mon, 9 Feb 2026 06:11:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617485; cv=fail; b=lJOEm7lb58jPYeju7WFDe6yBygrr6HUwzAJj5AAIhznE0+SNst+Mnje4dcB0yrE8qq3QkrVE9IbL/MDkU6sW5CSjLVndac7FOZW2YfuSYadGWVyOuaeCrLLHu63BNcB/g05bLTvTcjTQTvU9QDjTvmavtsARDMN3iqXegqqtuj8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617485; c=relaxed/simple; bh=ARiIS/0XDdbQ8tQKPbrcf0wloEPCcF1MWhoB/I1BwzQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=E4F4eYTY91+mIUQ3CJuEPCa+K6g9hEkPFnftB7p6Bdcp4fqP6Unz9tgWOgIRa8BbtDcwb87EeerlAiJtVwiJxhayF9kzjjFDja4L6ntyvTcgdAMGfoDY1iWCOvig4FhBKl4s1Sa2Cfx117fPAXwcsZc7nkdgpvtDPL44i0K4Q5I= 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=h0zBe5ly; arc=fail smtp.client-ip=40.107.201.1 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="h0zBe5ly" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Vq5NB8s/YR01H88FjnoYnOw9uaLMCyBqdnugqQBpOO0nZ7/97hCCA0yrZhFj0WspiO4iG2QgAhtTIdOcIVyI0ktjPfp1Y4eqif+Y8IcmSh2BoQFUN2/wp/yDQVKm+QJN/w9Odv5BqgOSvBTe95hBP8extvyTRpvVfYY1jvubn8ph3y7YJpxtga/QQ4hPSL0ZKlntxfnBPgZfX58eyeDBHlhueq7orNTnqExmoCDoQ7XVZDBobALg0nhzReF0bgrDgNSS06/61WSa5ubpb6KAZlCovHNqQAIcV+8t6GQyHA7d+beHthiBDJ6p3tO3odJOPctLQCkRd4iHEDpCGO2tVA== 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=p7sOCVtAr4Uhgj6aG/CyN+kX0pTSAJrcF5LYPU+vluU=; b=izbXqpkpA2Rh7YEaYLNJYKP/tshNRSy8z6xaK1mRzLoedwSCAQFIig2ipVMdAKwFDolKTDZbXZITgmbKyRF99cuwOoEtNcMXV6cPLjxp2wHwPcnBsQvU73x+Fxf0hrlqFhZPvUJWL5CtJBFKRPBw8yQDPoNHlrifsqeTzxEJjasg/0ZrVkWqw2zcOpU/ehTsP/VqozwxZH8v6zsl2zbxLQTyPM+lWPXekMbc4KzaOcFWWNURxK98dyc2RFs9aLI0mpEY+hHgQcaB4MJF4g6MXZg79rN9gEtMwoUaO21zLarSDd99cRL9LiwmVJGgHQhSbY7Fu/W87lD37UnW7ZS2Og== 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=p7sOCVtAr4Uhgj6aG/CyN+kX0pTSAJrcF5LYPU+vluU=; b=h0zBe5lyvB/c2ommfHIOxhc6ExGT5fknKovuLCqkOkSboU7QcEvC0/8YkP3OvaIfrHBVssrQybUkGipqZ87t9KcNrf9XqAJ02ws0wSsLabjynVcYuXtgiH8N80M0qb4UPQWXTcR3l4X+mZy++UelgLubNhwlmVBOLFbBcBBGSH0= Received: from PH7P221CA0065.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:328::31) by CY8PR12MB7265.namprd12.prod.outlook.com (2603:10b6:930:57::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 06:11:18 +0000 Received: from SN1PEPF000397B0.namprd05.prod.outlook.com (2603:10b6:510:328:cafe::37) by PH7P221CA0065.outlook.office365.com (2603:10b6:510:328::31) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.18 via Frontend Transport; Mon, 9 Feb 2026 06:11:14 +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 SN1PEPF000397B0.mail.protection.outlook.com (10.167.248.54) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 9 Feb 2026 06:11:18 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Mon, 9 Feb 2026 00:11:13 -0600 From: Honglei Huang To: , , , , CC: , , , , , , , , Subject: [PATCH v4 4/8] drm/amdkfd: Add batch MMU notifier support Date: Mon, 9 Feb 2026 14:10:43 +0800 Message-ID: <20260209061047.3881808-5-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209061047.3881808-1-honglei1.huang@amd.com> References: <20260209061047.3881808-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: SN1PEPF000397B0:EE_|CY8PR12MB7265:EE_ X-MS-Office365-Filtering-Correlation-Id: 53ec1d4b-bf9e-466d-1980-08de67a209fe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?HlkJMdgebmtf/FBdZXlLBKMRdQaHO0LrqbTCjzO3dvgTyTY77ftakCi66dDW?= =?us-ascii?Q?rtQvIyZYAMH9vf2oinynEvnWg7TMsMz5b3WVO5GTx3DmT7RP7KseQU8bP3FK?= =?us-ascii?Q?Wt6qt71W1uqAw6ideBtHV6AW5QP/sShHlEIw5v3Xk1fgSgKvC6X6pGWPxzcy?= =?us-ascii?Q?Wa6AM5iDTkd42tOkSma5R3mtHVUMnw6f3ebTYx1ts9+viI+EwziWuNo/Rqxk?= =?us-ascii?Q?E2TT9T9nKP5eEj3qP6aiJmYALD4CefPrUtTY6Go+nkZj3Xhgku+3+oprhnHt?= =?us-ascii?Q?tba6WvTnv2cKQ6IWL8LiQbbFdeAVQHZc06kEzFP64I9Q49ER/4XFyBHbuM+m?= =?us-ascii?Q?7fiZQ2Qukc0kzMgQnxrpEpmgVgzqePnvqNcDy2cqigkbtsGimEheRRr26NRD?= =?us-ascii?Q?0QPYdgAygc65wDzkiWjw6Uzz9kZJwNJhOEKGRc0iClj0XaWbo3jrU+iSrVtn?= =?us-ascii?Q?pc9+h62IZN7aXhQAXnXkJg3anqECcBTE52FVNhdiiXzLkqaoCldd63VCDrIs?= =?us-ascii?Q?trpsvmf95BymhaNmjZXjzCL8DQF++0RF/g7f5/TvibqZBUgk/M2IP9Ho6gRD?= =?us-ascii?Q?YrwMuGcQAUQ4xEeCCFg9wJZ0haQ6EI7gsMlcLy+8Jz/WFZRyYP1lQVUoY66m?= =?us-ascii?Q?/WkQKXbXQsPeXd2c3yMMBuugT0CCAnd4UfO8eeqSEcTZkOuj15XeBYPN3zmh?= =?us-ascii?Q?2VzJIUqAgZCItbVpsP7LdOwe1mQ/zJs4IAxw0l7frql6DDkZAP10vrAbBC4J?= =?us-ascii?Q?KjN6I5E2RZuN76cnDaLnplWDJwQ98FjEYzUIx6YRcN51ig7SEimQw36h6Vi7?= =?us-ascii?Q?82jJi2y8oJzcyHsGkektWxRDJxwofi1Q0XE5OQ42dobnFv0Fc3hgYPLMxxZt?= =?us-ascii?Q?/Zu3eY6U4hflu066AdYMNhOiXK53S7RCICgTXLGmZh8AFdlZR9EuDvaf/9VH?= =?us-ascii?Q?aWKATJqU7gUVezQch/rWac6dNZFMEEDIFI8OLpMRf2bBB2q3hVE5zfytevSW?= =?us-ascii?Q?gRy/qrGsphGyb7OboIsLgBepKgUlv9ABLhsW47N9FDa4MotkkxxM+KLMcSRM?= =?us-ascii?Q?2WdzdDaoVFmDEJlFARV7asKzRhUOOP0LZwj3NBaMZYQ+Fg8Xw0Tnm7pEAUtc?= =?us-ascii?Q?YWjE9ryU87WFuZJBY4Yjqvr/aFjNIv8D4fQrX70HOAG2/c1IhiTOQWQ22ri+?= =?us-ascii?Q?HyKFiPpXQ7QTtXkKvc150jbFvpwjiDcSwNQp5gGBVDpAx2vv5Ucgv+KuV9Of?= =?us-ascii?Q?+woESDmXYMAXsKGIob1MnScSqm2yVrqnYn+EIaMrhwWYJt18uyzQ+hMzpx40?= =?us-ascii?Q?jukA3ui+UI7Aqt6VwuuEOEIpHl4+/lw11Cb0QU0fzZFE7kgpYS/q3vMMxvZn?= =?us-ascii?Q?w1AM6eWXgCwj9If1yXut1Pg5v3+RgsOcU9dwI2VIuZlaZWWrUG6mo2qlMuRK?= =?us-ascii?Q?Ex+mCVRtVyfZfNs2ywY/UnzD6mCjr28eT95KVooOqvDLQ0wcBzrlJ6kpu287?= =?us-ascii?Q?0kwW8+vBp/EO+cCJRDui7jniOaXvnXlbyH0JfcUqnAK6Eg0fX0qpxEYFrCLk?= =?us-ascii?Q?Vwr8kYadxj1LjPRIDstvz4AtojwirFV+n7TxIOnhUVpzzZJ2CAL02ByktYiz?= =?us-ascii?Q?E6tlmkR4DI51Ug/Xu5L+wxtJTTAZX4cWssXtiZGKODN0EgRAkiTjEnFmCCQR?= =?us-ascii?Q?orJJlQ=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(1800799024)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LEDuTC+cMHMFb6PgxfoVnkp+3fwEW1sKiySRY+YLqzt1435oEt0YGj0KLIurFVwecLI+tQqkQLIqB5ofnwPoZFYPtgbw8Bvfl1l0XzGB8bApQ5wLrrTIugXpnRKP5m+iAekTn+SsqJE7QKH6MoRV6/pyT/wGVbvzA+5bNbTIdpI+4EQV1maBeeo0IyWPXUO25QDRl8PCsIPgLs9br/IFanKIMjq4ukDz72W4A3PZv4BfMXqZfuOl2oBgPEv5iA50NcSl+2Jh5E3BpMwWfI6bkKEtcA9+9xUc2jK19wSbuLXwBum6NULTc/r8EAv4ens3D1gLXagftS0QyR7GVbDQ+S4gsmlCxwBMcZN4bC8OG5rb1vkpVcO8H51emqWIrxDSrlUZYKQ0e3RPJr1LqhJrUDplSLQ2caUJDps1nvyQ7CEK5lhNJIpD87S+HANhD3be X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 06:11:18.2488 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 53ec1d4b-bf9e-466d-1980-08de67a209fe 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: SN1PEPF000397B0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7265 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Implement MMU notifier callbacks for batch userptr allocations. This adds: - amdgpu_amdkfd_evict_userptr_batch(): handles MMU invalidation events for batch allocations, using interval tree to identify affected ranges Signed-off-by: Honglei Huang --- .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index 6fe4ed22c..a22a99b8d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1143,6 +1143,65 @@ static bool discard_invalid_ranges(struct kgd_mem *m= em, return any_invalid; } =20 +static int amdgpu_amdkfd_evict_userptr_batch(struct mmu_interval_notifier = *mni, + const struct mmu_notifier_range *range, + unsigned long cur_seq) +{ + struct kgd_mem *mem; + struct amdkfd_process_info *process_info; + int r =3D 0; + + mem =3D container_of(mni, struct kgd_mem, batch_notifier); + process_info =3D mem->process_info; + + if (READ_ONCE(process_info->block_mmu_notifications)) + return 0; + + mutex_lock(&process_info->notifier_lock); + mmu_interval_set_seq(mni, cur_seq); + + /* Discard affected ranges under notifier_lock for atomicity */ + if (!discard_invalid_ranges(mem, range->start, range->end)) { + mutex_unlock(&process_info->notifier_lock); + pr_debug("Batch userptr: invalidation [0x%lx-0x%lx) does not affect any = range\n", + range->start, range->end); + return 0; + } + + mem->invalid++; + + if (++process_info->evicted_bos =3D=3D 1) { + r =3D kgd2kfd_quiesce_mm(mni->mm, + KFD_QUEUE_EVICTION_TRIGGER_USERPTR); + + if (r && r !=3D -ESRCH) + pr_err("Failed to quiesce KFD\n"); + + if (r !=3D -ESRCH) + queue_delayed_work(system_freezable_wq, + &process_info->restore_userptr_work, + msecs_to_jiffies(AMDGPU_USERPTR_RESTORE_DELAY_MS)); + } + mutex_unlock(&process_info->notifier_lock); + + pr_debug("Batch userptr evicted: va_min=3D0x%llx va_max=3D0x%llx, inv_ran= ge=3D[0x%lx-0x%lx)\n", + mem->batch_va_min, mem->batch_va_max, range->start, range->end); + + return r; +} + +static bool amdgpu_amdkfd_invalidate_userptr_batch(struct mmu_interval_not= ifier *mni, + const struct mmu_notifier_range *range, + unsigned long cur_seq) +{ + amdgpu_amdkfd_evict_userptr_batch(mni, range, cur_seq); + return true; +} + +static const struct mmu_interval_notifier_ops amdgpu_amdkfd_hsa_batch_ops = =3D { + .invalidate =3D amdgpu_amdkfd_invalidate_userptr_batch, +}; + /* Reserving a BO and its page table BOs must happen atomically to * avoid deadlocks. Some operations update multiple VMs at once. Track * all the reservation info in a context structure. Optionally a sync --=20 2.34.1 From nobody Mon Feb 9 17:05:05 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013012.outbound.protection.outlook.com [40.93.196.12]) (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 A26F82DC33B for ; Mon, 9 Feb 2026 06:11:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.12 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617483; cv=fail; b=dSX6Lvg4ipaq0yy46S6xtrJ1EddvEDmp2SzNRAkmyHOdteweVP+E0eoAnk3WJpxauPV9m3OzD/5qNSD2pXSDWUs9HGPxRcOhytAf/PFid4eUTeSHVjnENBwSFhXrgmi+esEzCDyeXSpdjWzH7o9sgQFiANDC0DRM9tJTeocUz2s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617483; c=relaxed/simple; bh=atYEHvRY/SbWs3KWyasnx4040U2wDrK8WPUFXPPxgog=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rBteI41jF1sRplheAe3F2Z+LHvORuqqNNWY9oA3O0bWaXCUlp3+IElghdY1yfi2fCKlC2PqK2Lvo2NpzOt728hkyalz4VuAUb3Lr0RimrpHadl4wZKED5tSibhw50ur9KFOzah6rmZwYUZeNzLV8gxqWC1hBaWEjdWlth/lsnnA= 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=2AHTpkod; arc=fail smtp.client-ip=40.93.196.12 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="2AHTpkod" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nGbRB3/eomDnXvPCNDKvcV9L2F/61BoVdWdHW0ynXRUW4rF4B+G2fhFvw45EQTwugSZqPtEvE+hmJWXBhRV1Mogb7A+u8VR9hapwqapANYv0qfx91ilPWxQ5dqPkWZgE316bjfWQT1N+2o+VhK9kVwgUci9EsJ821peYdsJYy/9Q348etys1/XDcIEybyyKoqlq3apEQOggGxfSUcvnClHv1879xX3r2I7nYpJu0pDhjFx3E6sHsvX1Hzcrl7bOshi8WNd7H6W4hZ+tsFXwvBX+zWeVza0o1fRYmBjNtcfFHAgiTUojPl+xpvpUR/rCFsHBEz6utulkU783ekI2Lqw== 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=fat2crwgVVMpS8nDqnqoL80q3yRb7P+5WeN+syyubH0=; b=Ln8ZjgrZEzxYnSirP9o2R3Jscig5FLvVx+45jA9B8af6vnpvAyeqywHcXA32G5WSwxz9YrvxYxcYG9i5EshZY7SBvad/sQPU3fL/1TytlbJbjfbiezkXXVgCuZeJxR/gRjInw4mAcp5coUiMRIUON56CQQ8vN4j2Q0W+R6TZbX5eJPHyQZiR2XflfABuWDmoagtftkJCadlVQtzQp+QvDVi0YGe7siDE4LMPsoDTD0/UyxAg+VJ+FB/Vt+emWaax+SxaQdE2Ytjjyfkt9dHeqOEE/vA6gXIz4xj1fZ/yLTEOAbcQPQO4iNnOZ/s0xZ6fn6W7HbCmURa+fY9HN2f7Vg== 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=fat2crwgVVMpS8nDqnqoL80q3yRb7P+5WeN+syyubH0=; b=2AHTpkodr83qYDKH0VeU+usZ2cfVqTS1WYcpnbTZA67HRASNV2qdYu25cOie6EdOV6kDtr5zsYzroto+fLtQYY5Fn3qTcReRG5Mpb4/utccyH4uFNp373mO9Mvv7VTeMmD9ktiFyWZNxyB9E4lXMjn6EaWtP4kE+bIFKT/0vUlo= Received: from PH8PR05CA0001.namprd05.prod.outlook.com (2603:10b6:510:2cc::22) by CY1PR12MB9627.namprd12.prod.outlook.com (2603:10b6:930:104::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.13; Mon, 9 Feb 2026 06:11:20 +0000 Received: from SN1PEPF000397B1.namprd05.prod.outlook.com (2603:10b6:510:2cc:cafe::76) by PH8PR05CA0001.outlook.office365.com (2603:10b6:510:2cc::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9611.7 via Frontend Transport; Mon, 9 Feb 2026 06:11:18 +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 SN1PEPF000397B1.mail.protection.outlook.com (10.167.248.55) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 9 Feb 2026 06:11:20 +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; Mon, 9 Feb 2026 00:11:16 -0600 From: Honglei Huang To: , , , , CC: , , , , , , , , Subject: [PATCH v4 5/8] drm/amdkfd: Implement batch userptr page management Date: Mon, 9 Feb 2026 14:10:44 +0800 Message-ID: <20260209061047.3881808-6-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209061047.3881808-1-honglei1.huang@amd.com> References: <20260209061047.3881808-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: SN1PEPF000397B1:EE_|CY1PR12MB9627:EE_ X-MS-Office365-Filtering-Correlation-Id: 147ab57b-0b3a-409a-c15a-08de67a20b26 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?9QJfp4DXzpYBgl2PjqjmoFwZjnfX88UIvEQRcUxK9wEeKT/raC02Icp4lVyp?= =?us-ascii?Q?1iJhgr6N/2C6rUZEf5CDn7f4PTfGLebP/5xYGW2tr9jzbYJif0oNAXF53ktR?= =?us-ascii?Q?MWDmNPpuaY6PLRrn7sCHwR4ZLH8tbYMsYqNT8OK4CfAUdxDVf0s2hDG5ILXY?= =?us-ascii?Q?bd2r/PDpB3mCN2yb/PXpA6I9brCylc89gMswwJ8Aa24PwwOKoNnbLv2GHh8V?= =?us-ascii?Q?H679aF8GyRND2SHk7ch3ijopJ5zxBjICBcLFBY0ZaEqfgLmA4iA/r4YQ0hZa?= =?us-ascii?Q?eXobs8bZj0B5ZlbakZsU9fVFvw2JCRTaFNc7wPjZDdU69VRavwmdnZIU8xVc?= =?us-ascii?Q?ubjqX8gcyBvfOJsGibhwuvYFxWxkYxos4fF1DJILyZp5TetoF4RL8wzh6GNF?= =?us-ascii?Q?x4CQb24ZrMc9GF3Ea9oKL4jCY+o/GtBG9lsJd+sB1ZnlVXrEXfO7wYE+9zdO?= =?us-ascii?Q?RbmCSOkCRIf+jxPRq9boquYyCUHzHbOjI6VPYHJ/BPFPjFbWEYI7cWK9v255?= =?us-ascii?Q?8zQtej0n/nVwgArAAVuUBjc/1aWVJiLt+r98Q0f+9WxmaQXet2SSO/LbqUSU?= =?us-ascii?Q?Z7KCJcZhWjmULbqpicgraTKHI92oVqKxrj0xxZaG/TgFDSUHWlXdzoCcfMko?= =?us-ascii?Q?Ha9iQ1b0Tz4KlcOET2u3/UmzfZNWzmzKo4GciJ5A05QVEg9zn2mMld6xsDUu?= =?us-ascii?Q?D/djVLIjuQv6fYZlVB44wRcLgO8i/ynMqtoOJqqvB0RQe09GX6qScJF5NbtT?= =?us-ascii?Q?MlBsm+q4XmIUcjoTX+7lOIYXAHUbU7lPMJ5lUfkpZ9iB7k5B2Nbx3ZWZmnpd?= =?us-ascii?Q?yXiHCG8KGuu/e/+kfIbanTGu69gum8AKnDjzNtBucCDnLTxIw13MriOP1+JY?= =?us-ascii?Q?TLlYPdbjX/8I9L7Q7Piv65W7q7iWkBsDG/Q0XH+A2iGs7Qr7iTMieBxWeUqW?= =?us-ascii?Q?XXhqYSu3Cs4zaebqLUNMWy3k7LcGg6lTjo/0vvrdMGQWClillTZL/Bj+I8Ga?= =?us-ascii?Q?utIYbZBPUHEz0B41ogaVNA+7zOXxdZ+lLDTIE3Epi1pp3heW7+47zW7QAbcj?= =?us-ascii?Q?G1R+K+4Z2s4EMggrTjdopVDL9kt7MHatp6Uka4pmRqBd+DrXrVCP70Endf4b?= =?us-ascii?Q?rrmWerDpLUErVJv4sjtgPL2huNoN+6UWxFuIx7lJ8WCvvwZat1aLgZ9wRLEB?= =?us-ascii?Q?7DFZYtpwKNE0RHW4jEJpLHkHnR1MHl6egmj3XVLChYPl8Bda3dGJTG3uQs2S?= =?us-ascii?Q?qYwTPHLAWqOnqhoZIJau/vmXDW3tNXqSPsGLYZzjPihLZp/VSX6I09IgMbFt?= =?us-ascii?Q?xo9PzYDzWOmBU5t/fC/O6DBKnkNT//EWal2BlhO5bcG+6aqoP9qOIHVA8qKM?= =?us-ascii?Q?OilOEJjvvGqDhBk2h3/HK4FQTXwaXi8UkFz5YFqwdWKDdxsUQTIU9wxa/qxr?= =?us-ascii?Q?Q6Q8CJxmOkrkMz3rXjbvXe+IVDj0IEFDHughigF6ITwG2n7qvaTjPQtZ2DsO?= =?us-ascii?Q?JAjn4se021nJyYFTP6IfXf0qHucK5wW3NMmsJyf8c8qjlkJQjbQXvU0ZMdgE?= =?us-ascii?Q?AdmM8BatcRU5Bs1mAJdssO948oSRM8PJFV6Rs+4skzVgt5Hl7fA2oJxgKRBI?= =?us-ascii?Q?di5Rl9mDA3e/d6pCXDDdp79/PZFc6YCng7ze2awEq8e8RBqsEHS8/9ZGxMH6?= =?us-ascii?Q?ul5+tQ=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HxWErg1lo40DW1SIfbajB3YeuzEyYYlNMLrk6lGYhb/uHKkj/kWVpk1Tc+yu9D5yFVHrWMjPL+0HZsxcCmaPGvJsG3yehruDOQKKYUaLcgTJqSDZNHiBkxO+fAX/i1DSQVMbAlQIvkYIBMiXttEdptPgMNGeHNy38z8GxjxNB8IO52IonB89qp1RAlSOovENfhefjnnvxwO9Al4i6Rx7s/CDkZkQiv9FZmQoMVZ9+7F0ZgLhLUNSo1Sqb6JJIVDHMjdpquWm/TdYzsrAoRJh14n6uHf2Kn/7lTaPm5IAFjo3h6nQ62PCnzw7RdYssYWs+lTKn2V4Y4KDqq2LTbnc/U/WWX3qtzTeNnnzpkOxklAPiD50RlYjte6b7WMMPOZ6lQ9YH5q78olISQdkGwFFLnBe/TOJSXdJrxJ6wPYsOxI9xkZ7z2HSwbqKwFn5V+nB X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 06:11:20.2243 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 147ab57b-0b3a-409a-c15a-08de67a20b26 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: SN1PEPF000397B1.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB9627 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Add core page management functions for batch userptr allocations. This adds: - get_user_pages_batch_locked(): gets user pages for batch - set_user_pages_batch(): populates TTM page array from multiple HMM ranges Signed-off-by: Honglei Huang --- .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index a22a99b8d..5f10a4514 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1202,6 +1202,51 @@ static const struct mmu_interval_notifier_ops amdgpu= _amdkfd_hsa_batch_ops =3D { .invalidate =3D amdgpu_amdkfd_invalidate_userptr_batch, }; =20 +static int get_user_pages_batch_locked(struct mm_struct *mm, + struct kgd_mem *mem, + struct user_range_info *range, + struct hmm_range **range_hmm, + bool readonly) +{ + struct vm_area_struct *vma; + int r; + + *range_hmm =3D NULL; + + vma =3D vma_lookup(mm, range->start); + if (unlikely(!vma)) + return -EFAULT; + + r =3D amdgpu_hmm_range_get_pages(&mem->batch_notifier, range->start, + range->size >> PAGE_SHIFT, readonly, + NULL, range_hmm); + return r; +} + +static int set_user_pages_batch(struct ttm_tt *ttm, + struct user_range_info *ranges, + uint32_t nranges) +{ + uint32_t i, j, k =3D 0, range_npfns; + + for (i =3D 0; i < nranges; ++i) { + if (!ranges[i].range || !ranges[i].range->hmm_pfns) + return -EINVAL; + + range_npfns =3D (ranges[i].range->end - ranges[i].range->start) >> + PAGE_SHIFT; + + if (k + range_npfns > ttm->num_pages) + return -EOVERFLOW; + + for (j =3D 0; j < range_npfns; ++j) + ttm->pages[k++] =3D + hmm_pfn_to_page(ranges[i].range->hmm_pfns[j]); + } + + return 0; +} + /* Reserving a BO and its page table BOs must happen atomically to * avoid deadlocks. Some operations update multiple VMs at once. Track * all the reservation info in a context structure. Optionally a sync --=20 2.34.1 From nobody Mon Feb 9 17:05:05 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010042.outbound.protection.outlook.com [52.101.61.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 82F152DCC08 for ; Mon, 9 Feb 2026 06:11:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617489; cv=fail; b=Voyf92jQNG4AJzTtOqNAyEf0vhpKiJBwIx2g2NSoNW3y+GlYalk88yU1+ysjhMsakkL8oyL4PS1byAF/AcUTadQJvWOHD0Mg2dqJIw07GB8zPK6LIsui+tJHFe42/9eVxNLd9SQX45FTxg6w2UmC5EzN76RBTMuFa+T845somPA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617489; c=relaxed/simple; bh=jwWM+bEFgddA6Off3x0jp5RFrMYB+n7qbkC6ZMsfImc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=EYsk03tObzXTWqXcEX86ExQ1Ydme7lNdp4gFM9VdRGi4vVA9Yxw6JwB44eIVfW6yl74RCY331FFgutbrNGY9dG3QiXaDscv6kUljmrt7QW4bJUcIjhRLj+jJAptmmw9wxZLpSOjYH0NDLUby2wIe0VmK33QGWduDXvkD/EE9y7o= 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=T+g6BMCG; arc=fail smtp.client-ip=52.101.61.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="T+g6BMCG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rDDxSMBX8zr2mKG4nbTv7JDSr8gSs2sWJC+fMiEFp409GZqU5mOaebPnQ1L8z5WplHrP4wJejnedPRv6c5E+oUTsRLcFmDcG2of81rdfvcPiFPAzru6DHDhYT9pcuPEh1T2haWuqtuiGvRmPNTv0sUZ07Vc7+4OAKntgEzsgNWAQ9SSpuKpXLv8uEiEk1DyFqRTinAMfJJbP7oFwon8e92ih0CuZ2SMwzezqWTGcLtuUsICYoBOv3zDwOMh3p7WXnGh5iNCSsqI2WoC7yClwPBwxvM45qgxxLS55htPGXVeUh940/rFIygtgArcDpzzmQgF67z82ttj4JznNf2b+0Q== 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=Or/g3k8aWypXL2C3Ieox5FHOSnrb6FczpCu51sPvkWk=; b=G2HBo7hEbOmXZWp+BTC/jbtWOgZg2i6zYtlqgzkktIK17hi6Byvdyei58rIz3RdHyKBzG31uvewkXty7TAln0SZ9qe/rIgxMBTWLXV3WhdAjxBR51fNXbomAXCPwSqJ+6CD35nDaxwDPf6aJsRypv1TremJA9C0kXJTlTXLf2QdjTj+Bl41hzFUjDbPaVQHekeNcCyBFBRFimBPlwpS4lbGL9B3EXYDf7NfD31hTJMH1Vw/cLtiUR0qZxLjTve1ZDM3p4bVYaUF7jraz1XIiBpgxxfCII/cJdAB9KVHhYsSj6geY/xF+ib58ZTXXOvv6c/MX82FTVrlAiNjgE1XlEQ== 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=Or/g3k8aWypXL2C3Ieox5FHOSnrb6FczpCu51sPvkWk=; b=T+g6BMCGSKZdEJlhGK+jjMhCGQnwT2TzOEgLTWCO83RDBO5Qa2Euj+r+E9smsc0PBORGxI6jMTZFke+JMV+pKgRDm7/V54awnrOw14s2eyV9rG4C3xle3Hk4glgMP9xq+KmpXvsnrArGRfd2lJBmY1bqZLVfsTKeWz4RCpfYDms= Received: from PH5P222CA0007.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:34b::13) by MN2PR12MB4255.namprd12.prod.outlook.com (2603:10b6:208:198::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 06:11:24 +0000 Received: from SN1PEPF000397B3.namprd05.prod.outlook.com (2603:10b6:510:34b:cafe::ca) by PH5P222CA0007.outlook.office365.com (2603:10b6:510:34b::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.19 via Frontend Transport; Mon, 9 Feb 2026 06:11:21 +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 SN1PEPF000397B3.mail.protection.outlook.com (10.167.248.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 9 Feb 2026 06:11:24 +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; Mon, 9 Feb 2026 00:11:20 -0600 From: Honglei Huang To: , , , , CC: , , , , , , , , Subject: [PATCH v4 6/8] drm/amdkfd: Add batch allocation function and export API Date: Mon, 9 Feb 2026 14:10:45 +0800 Message-ID: <20260209061047.3881808-7-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209061047.3881808-1-honglei1.huang@amd.com> References: <20260209061047.3881808-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: SN1PEPF000397B3:EE_|MN2PR12MB4255:EE_ X-MS-Office365-Filtering-Correlation-Id: c96018b7-766c-4585-066d-08de67a20d70 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Wixs8bF02poqAGs/4c3Riwqho/k8bguEG7CV+hVslfUKFO8bAuk8IsX/TClP?= =?us-ascii?Q?nmHy8x4GfwsFIK+dG4fW1Y9Zs++3L7xGLM/nL/Mzsldhmglnhpn49zBJVnN9?= =?us-ascii?Q?0ofQIl9RFmtaXDFhBK5W4XRKjRAtU1/iyVfxI4qMuFDdlTKCyZn+rUfw9SqN?= =?us-ascii?Q?5dGOKfshubqG42GWT1c97OSXCZPxEDOu8e3NHKKcfNyE52712/S7VE7FBoDW?= =?us-ascii?Q?BIEScy6e48lvvtQ1mRisuGoJOKYvV9S57idNmCklOtjErvqfEYqMGEItGvB5?= =?us-ascii?Q?G7HVWrboyeN1UrW6+Z7w59HMklhoBDHPDWDX22iejM4a9OnDjklAClBN8T+c?= =?us-ascii?Q?87F7y+FRu+L3F9hMOU1m01cVU5yMLHemIahycvXmD7yAH66zGTf6YNsZKs3A?= =?us-ascii?Q?p/7YY4O+tpF78gn1l+J7bhKCrPTEKVo10ncOi28aQAvNC+3UqopQUypOQDGz?= =?us-ascii?Q?QJMJGzAafn83FFyItUfS5pc292X3k1IusHdCdneHxSgvnL0wVIvSoJ4EI0zz?= =?us-ascii?Q?/iTWVUx50/dFckXL6GziuKVTKxbGPdFcHAi0gP9wVLISVTAqUfORSRVIrl/4?= =?us-ascii?Q?49Wm/l3mSP6u6DhrZ+Av5y+Yo7qVX4SpWbdexnJTJhxI/Jl96iR6eggKm7WX?= =?us-ascii?Q?CTAd6BZD9HDQ8rW+qA8EEZf9EUZCOVsNS5Wy/VbUnxtJ4/h4KWX3udhkwYbM?= =?us-ascii?Q?JVh+bno6klyrNVDyW+Sm94H5Xbcypdigg1/IssbzlxxxJWkGkXbwnBtaQS0l?= =?us-ascii?Q?Fz4k717pL9Tzi8k+hwhHBqNVKM6i/lJoKff7Om/ZBMora0RRvjaS7ibjX7ou?= =?us-ascii?Q?9CpRJoprHCegQzNYc3Z7XBEnqIAdIjRYVO0N9fLbBPwz9jASyW8c+KHVZoK9?= =?us-ascii?Q?VNa6tvTlXsbtRjZoY0B7HzqlzukY2brewik7yy/OGdmKT0LKclI//AYj6SO1?= =?us-ascii?Q?hobwpTEyChpGtj1JrHljelBL1Y/rR0TmYx48jmCWaMw8F1bqN3UY088qAC/y?= =?us-ascii?Q?kUwqVjeFpRce8P6fq29Nvz4MQOYVxYn+pWP9GTtTytl3g5GIjKDyLJGhVVkz?= =?us-ascii?Q?zlqfAQh6Fpxdsv4cPCHonkHEYOJh/XpO6g7Wtnr7uJTBpe5ku9VY3hnU4qjr?= =?us-ascii?Q?VewHbhbrile4OOPWvThxsU/TKwNcQ79mpHa7o5XrAs/vThnZYkFA2bs31Sev?= =?us-ascii?Q?SHs07pZZ/PtXOnOxghMaAve6HrffZiwqLd4NITCJHMCaFmUGIvQck5Nne4XO?= =?us-ascii?Q?y6BdbPNkcyLzTXXLK9yw6bNS68SXi8QBU1tHEVw3+dGEW5JCeCcH8m+MJxLV?= =?us-ascii?Q?Am7w0H6PPMJxzT8zEZC59CC5lbFEJtXbKytONotCMF0XIIwrMRqSLApGaHwk?= =?us-ascii?Q?7TN/ZUynKXI8CpgRDV1Ja1C6lZ1W0BaPJaZ4QU5nf+vdSIr4uC/7NnU6pQzp?= =?us-ascii?Q?FUld1NAtoY++hlEM8z4EOPMHxEEdxjdI6A1qDct4GDdcd8ZA+46F20X7Ylio?= =?us-ascii?Q?TKSp5v3DbFQgl45zt8br9zk9F141BpfMHbcb9z8anwCM2bXISUH6cJS5GOoG?= =?us-ascii?Q?Levf1VhfWPgBMWWOL+Sc3IXfvdlWOY+KhxKEcOiDOJXpO8ptFMCZWMhQkufu?= =?us-ascii?Q?LlByRwwvIuawuT0ET1S3Fn23wQmNghRQUv9Ns0LE5VQGIMZF9RpDXmuf5wRE?= =?us-ascii?Q?ONd3HA=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ezTXioitw4moKYVE1einpPlyPWtptlEQtE4q8qbEryaRcseoZm4lnM00onm20xuAdqifXtmSCskCETav0qkrQ3rs0TfMutPtdVbafd3DFbfE8kx2CEgB1HSPa0x85C83gef6RsLd2RdnZG9HX4yyTA5ay7rgLJdO7vHyXlPFuzwmtpB/GDbCZJvvj6bAUxFeGr1SHlhnt8q/OIG83MNmMjvcH9PBNyIWNTU4xar8T//F3l5y97BAmSk0KXK7LuObnonCTs7a/TpHTEb1Tj5ncDD1/iz7hCZ/skOArSB8trnVpDRhy87dIt4C59PL7k783c22CWPjIQSzg7yn1pb3wF0I3SKPIQqTnnqLu4osN9P4WVufkTPVwqBQ/2G4q27FdOO93GAt62Ti/ELC+lgiiSJ06dGt5B+XDuClYgzPApgY98gr+EyiK2RhkTMgdgBk X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 06:11:24.0370 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c96018b7-766c-4585-066d-08de67a20d70 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: SN1PEPF000397B3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4255 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Implement the main batch userptr allocation function and export it through the AMDKFD API. This adds: - init_user_pages_batch(): initializes batch allocation by setting up interval tree, registering single MMU notifier, and getting pages for all ranges - amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu_batch(): main entry point for batch userptr allocation - Function export in amdgpu_amdkfd.h Signed-off-by: Honglei Huang --- .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 276 ++++++++++++++++++ 1 file changed, 276 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index 5f10a4514..c2fc31964 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1247,6 +1247,163 @@ static int set_user_pages_batch(struct ttm_tt *ttm, return 0; } =20 +static int init_user_pages_batch(struct kgd_mem *mem, + struct kfd_ioctl_userptr_range *ranges, + uint32_t num_ranges, bool criu_resume, + uint64_t user_addr, uint32_t size) +{ + struct amdkfd_process_info *process_info =3D mem->process_info; + struct amdgpu_bo *bo =3D mem->bo; + struct ttm_operation_ctx ctx =3D { true, false }; + struct hmm_range *range; + uint64_t va_min =3D ULLONG_MAX, va_max =3D 0; + int ret =3D 0; + uint32_t i; + + if (!num_ranges || !ranges) + return -EINVAL; + + mutex_lock(&process_info->lock); + + mem->user_ranges =3D kvcalloc(num_ranges, sizeof(struct user_range_info),=20 + GFP_KERNEL); + + if (!mem->user_ranges) { + ret =3D -ENOMEM; + goto out; + } + mem->num_user_ranges =3D num_ranges; + + mem->user_ranges_itree =3D RB_ROOT_CACHED; + + ret =3D amdgpu_ttm_tt_set_userptr(&bo->tbo, user_addr, 0); + if (ret) { + pr_err("%s: Failed to set userptr: %d\n", __func__, ret); + goto out; + } + + for (i =3D 0; i < num_ranges; i++) { + uint64_t range_end; + + mem->user_ranges[i].start =3D ranges[i].start; + mem->user_ranges[i].size =3D ranges[i].size; + mem->user_ranges[i].range =3D NULL; + mem->user_ranges[i].valid =3D false; + + range_end =3D ranges[i].start + ranges[i].size; + + mem->user_ranges[i].it_node.start =3D ranges[i].start; + mem->user_ranges[i].it_node.last =3D range_end - 1; + interval_tree_insert(&mem->user_ranges[i].it_node, &mem->user_ranges_itr= ee); + + if (ranges[i].start < va_min) + va_min =3D ranges[i].start; + if (range_end > va_max) + va_max =3D range_end; + + pr_debug("Initializing userptr range %u: addr=3D0x%llx size=3D0x%llx\n", + i, mem->user_ranges[i].start, mem->user_ranges[i].size); + } + + mem->batch_va_min =3D va_min; + mem->batch_va_max =3D va_max; + + pr_debug("Batch userptr: registering single notifier for span [0x%llx - 0= x%llx)\n", + va_min, va_max); + + ret =3D mmu_interval_notifier_insert(&mem->batch_notifier, + current->mm, va_min, va_max - va_min, + &amdgpu_amdkfd_hsa_batch_ops); + if (ret) { + pr_err("%s: Failed to register batch MMU notifier: %d\n", + __func__, ret); + goto err_cleanup_ranges; + } + + if (criu_resume) { + mutex_lock(&process_info->notifier_lock); + mem->invalid++; + mutex_unlock(&process_info->notifier_lock); + mutex_unlock(&process_info->lock); + return 0; + } + + if (!mmget_not_zero(current->mm)) { + ret =3D -ESRCH; + goto err_unregister; + } + + mmap_read_lock(current->mm); + for (i =3D 0; i < num_ranges; i++) { + ret =3D get_user_pages_batch_locked( + current->mm, mem, &mem->user_ranges[i], &range, + amdgpu_ttm_tt_is_readonly(bo->tbo.ttm)); + if (ret) { + if (ret =3D=3D -EAGAIN) + pr_debug("Failed to get user pages for range %u, try again\n", i); + else + pr_err("%s: Failed to get user pages for range %u: %d\n", + __func__, i, ret); + mmap_read_unlock(current->mm); + mmput(current->mm); + goto err_unregister; + } + + mem->user_ranges[i].range =3D range; + mem->user_ranges[i].valid =3D true; + } + mmap_read_unlock(current->mm); + mmput(current->mm); + + ret =3D amdgpu_bo_reserve(bo, true); + if (ret) { + pr_err("%s: Failed to reserve BO\n", __func__); + goto release_pages; + } + + if (bo->tbo.ttm->pages) { + set_user_pages_batch(bo->tbo.ttm, + mem->user_ranges, + num_ranges); + } else { + pr_err("%s: TTM pages array is NULL\n", __func__); + ret =3D -EINVAL; + amdgpu_bo_unreserve(bo); + goto release_pages; + } + + amdgpu_bo_placement_from_domain(bo, mem->domain); + ret =3D ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + if (ret) + pr_err("%s: failed to validate BO\n", __func__); +=09 + amdgpu_bo_unreserve(bo); + +release_pages: + for (i =3D 0; i < num_ranges; i++) { + if (mem->user_ranges[i].range) { + amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm,=20 + mem->user_ranges[i].range); + } + } + +err_unregister: + if (ret && mem->batch_notifier.mm) { + mmu_interval_notifier_remove(&mem->batch_notifier); + mem->batch_notifier.mm =3D NULL; + } +err_cleanup_ranges: + if (ret) { + for (i =3D 0; i < num_ranges; i++) { + mem->user_ranges[i].range =3D NULL; + } + } + +out: + mutex_unlock(&process_info->lock); + return ret; +} + /* Reserving a BO and its page table BOs must happen atomically to * avoid deadlocks. Some operations update multiple VMs at once. Track * all the reservation info in a context structure. Optionally a sync @@ -2005,6 +2162,125 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( return ret; } =20 +int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu_batch( + struct amdgpu_device *adev, uint64_t va, uint64_t size, void *drm_priv, + struct kgd_mem **mem, uint64_t *offset, + struct kfd_ioctl_userptr_range *ranges, uint32_t num_ranges, + uint32_t flags, bool criu_resume) +{ + struct amdgpu_vm *avm =3D drm_priv_to_vm(drm_priv); + struct amdgpu_bo *bo; + struct drm_gem_object *gobj =3D NULL; + u32 domain, alloc_domain; + uint64_t aligned_size; + int8_t xcp_id =3D -1; + u64 alloc_flags; + int ret; + + if (!(flags & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR)) { + pr_err("Batch allocation requires USERPTR flag\n"); + return -EINVAL; + } + + if (flags & KFD_IOC_ALLOC_MEM_FLAGS_AQL_QUEUE_MEM) { + pr_err("Batch userptr does not support AQL queue\n"); + return -EINVAL; + } + + domain =3D AMDGPU_GEM_DOMAIN_GTT; + alloc_domain =3D AMDGPU_GEM_DOMAIN_CPU; + alloc_flags =3D AMDGPU_GEM_CREATE_PREEMPTIBLE; + + if (flags & KFD_IOC_ALLOC_MEM_FLAGS_COHERENT) + alloc_flags |=3D AMDGPU_GEM_CREATE_COHERENT; + if (flags & KFD_IOC_ALLOC_MEM_FLAGS_EXT_COHERENT) + alloc_flags |=3D AMDGPU_GEM_CREATE_EXT_COHERENT; + if (flags & KFD_IOC_ALLOC_MEM_FLAGS_UNCACHED) + alloc_flags |=3D AMDGPU_GEM_CREATE_UNCACHED; + + *mem =3D kzalloc(sizeof(struct kgd_mem), GFP_KERNEL); + if (!*mem) { + ret =3D -ENOMEM; + goto err; + } + INIT_LIST_HEAD(&(*mem)->attachments); + mutex_init(&(*mem)->lock); + (*mem)->aql_queue =3D false; + + aligned_size =3D PAGE_ALIGN(size); + + (*mem)->alloc_flags =3D flags; + + amdgpu_sync_create(&(*mem)->sync); + + ret =3D amdgpu_amdkfd_reserve_mem_limit(adev, aligned_size, flags, + xcp_id); + if (ret) { + pr_debug("Insufficient memory\n"); + goto err_reserve_limit; + } + + pr_debug("\tcreate BO VA 0x%llx size 0x%llx for batch userptr (ranges=3D%= u)\n", + va, size, num_ranges); + + ret =3D amdgpu_gem_object_create(adev, aligned_size, 1, alloc_domain, all= oc_flags, + ttm_bo_type_device, NULL, &gobj, xcp_id + 1); + if (ret) { + pr_debug("Failed to create BO on domain %s. ret %d\n", + domain_string(alloc_domain), ret); + goto err_bo_create; + } + + ret =3D drm_vma_node_allow(&gobj->vma_node, drm_priv); + if (ret) { + pr_debug("Failed to allow vma node access. ret %d\n", ret); + goto err_node_allow; + } + + ret =3D drm_gem_handle_create(adev->kfd.client.file, gobj, &(*mem)->gem_h= andle); + if (ret) + goto err_gem_handle_create; + + bo =3D gem_to_amdgpu_bo(gobj); + bo->kfd_bo =3D *mem; + bo->flags |=3D AMDGPU_AMDKFD_CREATE_USERPTR_BO; + + (*mem)->bo =3D bo; + (*mem)->va =3D va; + (*mem)->domain =3D domain; + (*mem)->mapped_to_gpu_memory =3D 0; + (*mem)->process_info =3D avm->process_info; + + add_kgd_mem_to_kfd_bo_list(*mem, avm->process_info, ranges[0].start); + + ret =3D init_user_pages_batch(*mem, ranges, num_ranges, criu_resume, va, = aligned_size); + if (ret) { + pr_err("Failed to initialize batch user pages: %d\n", ret); + goto allocate_init_user_pages_failed; + } + + return 0; + +allocate_init_user_pages_failed: + remove_kgd_mem_from_kfd_bo_list(*mem, avm->process_info); + drm_gem_handle_delete(adev->kfd.client.file, (*mem)->gem_handle); +err_gem_handle_create: + drm_vma_node_revoke(&gobj->vma_node, drm_priv); +err_node_allow: + goto err_reserve_limit; +err_bo_create: + amdgpu_amdkfd_unreserve_mem_limit(adev, aligned_size, flags, xcp_id); +err_reserve_limit: + amdgpu_sync_free(&(*mem)->sync); + mutex_destroy(&(*mem)->lock); + if (gobj) + drm_gem_object_put(gobj); + else + kfree(*mem); +err: + return ret; +} + int amdgpu_amdkfd_gpuvm_free_memory_of_gpu( struct amdgpu_device *adev, struct kgd_mem *mem, void *drm_priv, uint64_t *size) --=20 2.34.1 From nobody Mon Feb 9 17:05:05 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013031.outbound.protection.outlook.com [40.93.201.31]) (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 6AB6D2DC33B for ; Mon, 9 Feb 2026 06:11:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.31 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617492; cv=fail; b=iNGaj48WRldeE6McmYHYbaiNH3wNovFp3aFgrR2ivGPdkj2dYWbLpD2zU9ADuNJYzUWI9fUymYyHY/WBI8Ccsnrwzskf3KDSQ7V8glZS9VijefQhl9+ONnKa1n0lkfS+cPyrw/eB2VVa/wCVajUfqBEHPYOJvCrguK+rRMFPvSg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617492; c=relaxed/simple; bh=M5NY1KC6z6JqpdcoNcBSZuBjOHeknKRHcsE3plBMAGc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FycbMAcQNJlPDoqXsYf8u+haraoECbDOvSbNuj00aU7SXoSB21O5MiQkDpIbjYowxI5lH7IbVMOPQm0+/5huG7YZg7KI3ssQMZNW8Y3EHgx3R2WuAStOjSlSYr4MQL6+2Jqv+kwLgM7RxggB3b4H9wRN7zsmyGHZI3UsZL2sO5Q= 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=h2D6Sy61; arc=fail smtp.client-ip=40.93.201.31 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="h2D6Sy61" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CyXKn4+UP659DIZkKsl+zdjunHqIroUKHoIRSTLs3khTqYclqo65xJOim4xpW/cVbrWQX9JApDvciLlz1cndk9qKjgui4G9LQi29yareR69i9HzsKmf+KqzhIInphrSwit5egvnjO8LjcbS5kAOV5RKXqDR0HeasQbULhH0IjLe7nmRlXCPPa7vSMFabCI4VixYf5KlLI1vUMNKRWZlF9FlAK3XhIGhaToFtYahZWY9E/d6w5AQGZWAqXUlKv1/3nSIFkpt/Q3jZWmVLshdDABv/umIlxFS5XiOPnzA1fXn6YTIbjDXoVZUnvDizr+ut08QbmqhcJ/4Cco2pYV6q5w== 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=vNkXPePT/Vj8OyJiqkm+2BBC099VF0XjU2xt3SArCbA=; b=kXZcyWsyTeptFxlbyvSnutE/CCHYX+GKsGFQe9eR3ttczn6udnlTxyNDZe48BdOcdFxbUXR2iX7RX/G/86vBjbyDX62x887QZlcFukoX+fBs5MdtF/sCoW8NhYcj51TOdbylfR0u845+o+w4MJuvISOB2YfaLIdFjQlPJsiTXdDRsHjvuoYRgJ/hKWONNAh8qKnT3DTlywz9oAggyMSKVCsMqZ/bxosNHzM/9lp4hOyO83B+Q6TzAUI6Ip6E64Hs6bIO+GHFo6BtkvQ1fPyV6zFtO0mIu9b/J1tNZBEnma2vAW1LTw1dnG4I2KPwjIYHdiTd28GNSOHf9U3zDIXVLg== 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=vNkXPePT/Vj8OyJiqkm+2BBC099VF0XjU2xt3SArCbA=; b=h2D6Sy61n21e4/AcP4SjvLaDserl8ufNP/Fy28XRG1aTk9vduSxbDYxh3UsNtqSpzzy75LBfS59fek83jzpwMSCg9dwcyS5QFouMAPrIl1Y3mKXkXvEuKuzLb4dR9iQGPFIlIvDK/e/DWkLe+UkOJSSxw6oxUdrUWRE+VhrbykI= Received: from PH8PR02CA0027.namprd02.prod.outlook.com (2603:10b6:510:2da::18) by BY5PR12MB4099.namprd12.prod.outlook.com (2603:10b6:a03:20f::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Mon, 9 Feb 2026 06:11:27 +0000 Received: from SN1PEPF000397AE.namprd05.prod.outlook.com (2603:10b6:510:2da:cafe::26) by PH8PR02CA0027.outlook.office365.com (2603:10b6:510:2da::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.18 via Frontend Transport; Mon, 9 Feb 2026 06:11: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 SN1PEPF000397AE.mail.protection.outlook.com (10.167.248.52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 9 Feb 2026 06:11:27 +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; Mon, 9 Feb 2026 00:11:23 -0600 From: Honglei Huang To: , , , , CC: , , , , , , , , Subject: [PATCH v4 7/8] drm/amdkfd: Unify userptr cleanup and update paths Date: Mon, 9 Feb 2026 14:10:46 +0800 Message-ID: <20260209061047.3881808-8-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209061047.3881808-1-honglei1.huang@amd.com> References: <20260209061047.3881808-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: SN1PEPF000397AE:EE_|BY5PR12MB4099:EE_ X-MS-Office365-Filtering-Correlation-Id: f0860438-ad66-422a-7487-08de67a20f66 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?FQW6nW8QGcf/DiSGusNz5qB1RMspC4ouQ9CQqjPafB+ltc8sT5FTC3JDtbFg?= =?us-ascii?Q?EJhI0X5A9DCwYyn5UUeZov2nWwdwdzwagmtyyPCmwVtHhAR/C0JCEptY0TRm?= =?us-ascii?Q?1ygtgtHXwQOp1FqAyefNpOrVz0OXMSfQ9gEr2K293OpIpUnsBkGPRPo+AI8Z?= =?us-ascii?Q?AvFZ563+bR6YQNzbpd7iFFprSZzTaf2reVapb07aMTmPwS1pJpPN9WyNjIEn?= =?us-ascii?Q?cH1XQH9YMH4vLtmykXMDBpFWxz4dAI/pEJDqmyZh8fhD6dlSflmpdeNXMTAi?= =?us-ascii?Q?Exp7nldIG4PcR1fMnHFepg1YcOaF+Q0nVgvaUolvdj5Ts8CL9/V0bkLhmdMu?= =?us-ascii?Q?bhsqE2Puyl/Kci60H06MIfrHn+aJ2wupfxz7RPAfyNHNYzJrYl7rt23892bi?= =?us-ascii?Q?SkUfzCY0KUDa6Ik1mkWU00I/VSU8Qzg0cW8lseFy0kDaR9HHWr8f/m1UR1kA?= =?us-ascii?Q?lkKdAIZt6ofOJnRitLC5X/JQkvTt39oKLd99DlLjO+oLm5zDVyeHUDUbHyTY?= =?us-ascii?Q?RljnWla2cS9VKI1tYjaMVlVsGTJN2JwpbV9MD01pqrOPFu5TX25xHgRgWoCe?= =?us-ascii?Q?Frws883J990xeyympUdJFubxl0iWNaLa1Ag5Rm34lusH2bordEBQiihKFe24?= =?us-ascii?Q?KmxpFsu06bv/CASUaIvbjRQ6S5/5YK+Pls/PlHZgJ6YgnUzSLRxgiXiU362j?= =?us-ascii?Q?h0tJbzO0JhXaIaQopPvECunAokB/arZYYlJG3Dnntay53hEDdUguzKCHfRCM?= =?us-ascii?Q?2Kcu6gwFqqQHSqq4MuUbHPuVlr2ZzfiXeg90QOo1DaorOJtHOx7gpcFVzNC9?= =?us-ascii?Q?UvPYwCDjPMM5k2mVvjl5Dp0J3x9id/12koA5kz3FnO5rkEI7HtRQHKXWvcJu?= =?us-ascii?Q?+u7QAgjc9X8B/odrYrt+LYpva3gP2rVnLNsANmgC+/+TO70CD0LTw5hiKS5V?= =?us-ascii?Q?20QA8gSU9k60qLUhySQ+2mXeVtgL05lXV1OIJ6cW97xZS9QfHlJ7naCmcjrq?= =?us-ascii?Q?jbmfaMg9YSx7LleOTpU3HtO/qtEQNJFU/OWx271kDqxFAjHjYXfZqB3ktpi7?= =?us-ascii?Q?UIAHAgcxj/gB5/2ngH6VRZK3rxrGogVM2I4fn6NgZl++SLJpRTNmJZU3vQQn?= =?us-ascii?Q?T9pNsEndQqfdO3XKL0dDLFVwYEpPqx5rzZR5yNWzap20wPMd/Bc7yLiKfcXT?= =?us-ascii?Q?pLiytIYhs+i2jSQsRu9r4g4udbhCQyHxquDJq/gsP1hsx+lVtciCrCiUbk6k?= =?us-ascii?Q?ja9rXQlOSM8+NEcWnM5B/FfxoNp3lRJNNMKSQSFVbUU9IHG2SUQxf7xnW3im?= =?us-ascii?Q?BZedgfr9W/ani7X2P6havFYYU6ZuCXCuuo2is17Jf/xaesyLbqFbVRIseyGT?= =?us-ascii?Q?+y1+8uLQ78LXJqdtEytDWAPidCELbgzzn1O4T7XqrMY9E8e/O93ANPXiqD/6?= =?us-ascii?Q?sI3s1cRO6zKHUcJagFi2n/VGHcJKlULRtd/gpPvnHtQLPZlS63rgtFj4FSyI?= =?us-ascii?Q?P9CH9wDWWG8rTTn7w7Y9uT/U3wqeBbF84njuyOK+P3PKroypAD0X6AUXiYij?= =?us-ascii?Q?fb2ODJiem5HBX3lyce2JnFSX/K6+Hxc2EXmDq3Yo3xVAqBMX44EegYIi8WvA?= =?us-ascii?Q?DuYXAMRmg6GTNyhtJrOHPWcWJev/h4Q1KZizCDPSYFYVVJFGJ0LMVKn44Ymo?= =?us-ascii?Q?Ivmaow=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(1800799024)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PTt/gnT0yshQuaRzv5cZu0NSfvDVaqxUvRNVWkNzRdU8sOdmIejkChJ4IlWdhlK2UOIu4FBU5lrgmfYh9rC05LQIlwfJSOz5qEvKqXD2p0t+qe2A1Yq2LmHHW9yjD6WweS3PteVkV7fV94yO1wLPQ5lk7u/eC6NyC7Hk4D/+7AVwvxFGBp2RCHD04Xn6K6NLNqxry6hKCrvVsJu4u/3rLevzCv6qayG4pvUrHmEvp3viTYG6hksbBE+ndq7wSXYO9WD90T4Mf7Rp2hPChe7ly1/8vrfShRn2wgMrWxoSlR48EjAaIHCErq0+rekEfsWXjUXW0jw2GvcBihW2M5sF1EhOz1ry67DUNB508fZ6uOzzd9yIPFte0TR7M6iBEua9nAQlGOKSETzfisJ299gfcEmr4yzfEWGf0g7yEAaA3DtbOcaoSRlTww0zmS8dp+ii X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 06:11:27.3529 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f0860438-ad66-422a-7487-08de67a20f66 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: SN1PEPF000397AE.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4099 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Refactor userptr management code to handle both single and batch allocations uniformly. This adds: - cleanup_userptr_resources(): unified cleanup for single/batch - discard_user_pages_batch(): discard pages for batch ranges - amdgpu_amdkfd_update_user_pages_batch(): update pages for batch - valid_user_pages_batch(): validate batch pages Modified functions to support batch mode: - update_invalid_user_pages(): uses batch update when applicable - confirm_valid_user_pages_locked(): checks batch validity - amdgpu_amdkfd_gpuvm_free_memory_of_gpu(): uses unified cleanup Signed-off-by: Honglei Huang --- .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 158 ++++++++++++++++-- 1 file changed, 141 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index c2fc31964..7233b127b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -2281,6 +2281,35 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu_batch( return ret; } =20 +static void cleanup_userptr_resources(struct kgd_mem *mem, + struct amdkfd_process_info *process_info) +{ + uint32_t i; + + if (!amdgpu_ttm_tt_get_usermm(mem->bo->tbo.ttm)) + return; + + if (mem->num_user_ranges > 0 && mem->user_ranges) { + for (i =3D 0; i < mem->num_user_ranges; i++) + interval_tree_remove(&mem->user_ranges[i].it_node, + &mem->user_ranges_itree); + + if (mem->batch_notifier.mm) { + mmu_interval_notifier_remove(&mem->batch_notifier); + mem->batch_notifier.mm =3D NULL; + } + + kvfree(mem->user_ranges); + mem->user_ranges =3D NULL; + mem->num_user_ranges =3D 0; + } else { + amdgpu_hmm_unregister(mem->bo); + mutex_lock(&process_info->notifier_lock); + amdgpu_ttm_tt_discard_user_pages(mem->bo->tbo.ttm, mem->range); + mutex_unlock(&process_info->notifier_lock); + } +} + int amdgpu_amdkfd_gpuvm_free_memory_of_gpu( struct amdgpu_device *adev, struct kgd_mem *mem, void *drm_priv, uint64_t *size) @@ -2322,12 +2351,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu( mutex_unlock(&process_info->lock); =20 /* Cleanup user pages and MMU notifiers */ - if (amdgpu_ttm_tt_get_usermm(mem->bo->tbo.ttm)) { - amdgpu_hmm_unregister(mem->bo); - mutex_lock(&process_info->notifier_lock); - amdgpu_ttm_tt_discard_user_pages(mem->bo->tbo.ttm, mem->range); - mutex_unlock(&process_info->notifier_lock); - } + cleanup_userptr_resources(mem, process_info); =20 ret =3D reserve_bo_and_cond_vms(mem, NULL, BO_VM_ALL, &ctx); if (unlikely(ret)) @@ -2914,6 +2938,51 @@ int amdgpu_amdkfd_evict_userptr(struct mmu_interval_= notifier *mni, return r; } =20 +static void discard_user_pages_batch(struct amdgpu_bo *bo, struct kgd_mem = *mem) +{ + uint32_t i; + + for (i =3D 0; i < mem->num_user_ranges; i++) { + if (!mem->user_ranges[i].valid && mem->user_ranges[i].range) { + amdgpu_ttm_tt_discard_user_pages(bo->tbo.ttm, + mem->user_ranges[i].range); + mem->user_ranges[i].range =3D NULL; + } + } +} + +static int amdgpu_amdkfd_update_user_pages_batch(struct mm_struct *mm, + struct amdgpu_bo *bo, + struct kgd_mem *mem) +{ + uint32_t i; + int ret =3D 0; + + if (!mmget_not_zero(mm)) + return -ESRCH; + + mmap_read_lock(mm); + for (i =3D 0; i < mem->num_user_ranges; i++) { + if (mem->user_ranges[i].valid) + continue; + + ret =3D get_user_pages_batch_locked( + mm, mem, &mem->user_ranges[i], + &mem->user_ranges[i].range, amdgpu_ttm_tt_is_readonly(bo->tbo.ttm)); + if (ret) { + pr_debug("Failed %d to get user pages for range %u\n", + ret, i); + break; + } + + mem->user_ranges[i].valid =3D true; + } + mmap_read_unlock(mm); + mmput(mm); + + return ret; +} + /* Update invalid userptr BOs * * Moves invalidated (evicted) userptr BOs from userptr_valid_list to @@ -2928,6 +2997,7 @@ static int update_invalid_user_pages(struct amdkfd_pr= ocess_info *process_info, struct ttm_operation_ctx ctx =3D { false, false }; uint32_t invalid; int ret =3D 0; + uint32_t i; =20 mutex_lock(&process_info->notifier_lock); =20 @@ -2951,8 +3021,12 @@ static int update_invalid_user_pages(struct amdkfd_p= rocess_info *process_info, =20 bo =3D mem->bo; =20 - amdgpu_ttm_tt_discard_user_pages(bo->tbo.ttm, mem->range); - mem->range =3D NULL; + if (mem->num_user_ranges > 0 && mem->user_ranges) + discard_user_pages_batch(bo, mem); + else { + amdgpu_ttm_tt_discard_user_pages(bo->tbo.ttm, mem->range); + mem->range =3D NULL; + } =20 /* BO reservations and getting user pages (hmm_range_fault) * must happen outside the notifier lock @@ -2976,7 +3050,11 @@ static int update_invalid_user_pages(struct amdkfd_p= rocess_info *process_info, } =20 /* Get updated user pages */ - ret =3D amdgpu_ttm_tt_get_user_pages(bo, &mem->range); + if (mem->num_user_ranges > 0 && mem->user_ranges) + ret =3D amdgpu_amdkfd_update_user_pages_batch(mm, bo, mem); + else + ret =3D amdgpu_ttm_tt_get_user_pages(bo, &mem->range); + if (ret) { pr_debug("Failed %d to get user pages\n", ret); =20 @@ -3010,7 +3088,10 @@ static int update_invalid_user_pages(struct amdkfd_p= rocess_info *process_info, ret =3D 0; } =20 - amdgpu_ttm_tt_set_user_pages(bo->tbo.ttm, mem->range); + if (mem->num_user_ranges =3D=3D 0) + amdgpu_ttm_tt_set_user_pages(bo->tbo.ttm, mem->range); + else + set_user_pages_batch(bo->tbo.ttm, mem->user_ranges, mem->num_user_range= s); =20 mutex_lock(&process_info->notifier_lock); =20 @@ -3024,6 +3105,17 @@ static int update_invalid_user_pages(struct amdkfd_p= rocess_info *process_info, /* set mem valid if mem has hmm range associated */ if (mem->range) mem->invalid =3D 0; + + /* For batch mode, clear global invalid counter and mark ranges as valid. + * Individual range validity is tracked by valid flag. + */ + if (mem->num_user_ranges > 0 && mem->user_ranges) { + mem->invalid =3D 0; + for (i =3D 0; i < mem->num_user_ranges; i++) { + if (mem->user_ranges[i].range) + mem->user_ranges[i].valid =3D true; + } + } } =20 unlock_out: @@ -3131,6 +3223,33 @@ static int validate_invalid_user_pages(struct amdkfd= _process_info *process_info) return ret; } =20 +static bool valid_user_pages_batch(struct kgd_mem *mem) +{ + uint32_t i; + bool all_valid =3D true; + + if (!mem->user_ranges || mem->num_user_ranges =3D=3D 0) + return true; + + for (i =3D 0; i < mem->num_user_ranges; i++) { + if (!mem->user_ranges[i].valid) { + all_valid =3D false; + continue; + } + + if (!mem->user_ranges[i].range) + continue; + + if (!amdgpu_ttm_tt_get_user_pages_done( + mem->bo->tbo.ttm, mem->user_ranges[i].range)) + all_valid =3D false; + + mem->user_ranges[i].range =3D NULL; + } + + return all_valid; +} + /* Confirm that all user pages are valid while holding the notifier lock * * Moves valid BOs from the userptr_inval_list back to userptr_val_list. @@ -3145,15 +3264,20 @@ static int confirm_valid_user_pages_locked(struct a= mdkfd_process_info *process_i validate_list) { bool valid; =20 - /* keep mem without hmm range at userptr_inval_list */ - if (!mem->range) - continue; + if (mem->num_user_ranges > 0 && mem->user_ranges) + valid =3D valid_user_pages_batch(mem); + else { + /* keep mem without hmm range at userptr_inval_list */ + if (!mem->range) + continue; =20 - /* Only check mem with hmm range associated */ - valid =3D amdgpu_ttm_tt_get_user_pages_done( - mem->bo->tbo.ttm, mem->range); + /* Only check mem with hmm range associated */ + valid =3D amdgpu_ttm_tt_get_user_pages_done( + mem->bo->tbo.ttm, mem->range); + + mem->range =3D NULL; + } =20 - mem->range =3D NULL; if (!valid) { WARN(!mem->invalid, "Invalid BO not marked invalid"); ret =3D -EAGAIN; --=20 2.34.1 From nobody Mon Feb 9 17:05:05 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010027.outbound.protection.outlook.com [52.101.201.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 762E23EBF13 for ; Mon, 9 Feb 2026 06:11:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.27 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617498; cv=fail; b=XM4wgK1q7ihS394rMFvzojdzP/93R8YHUBARHBaYOrlxHejsNaBu5PRnQ5nlqPNWFo3dqiOaKtvzqkWKZ5oW6bozRc3hS9e/Q5Mlv8ovGEnvRSRjOq0CO5oSfxL6FKOtJWRFwkT/FH526mMyrwiaPS3R+DN28kkFfpD0Ax9YHKc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770617498; c=relaxed/simple; bh=JMw5HtRkoTGebxZCMsiORfuFchaGfc8zcbIiyZ/ixm4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=k15sQJ8U1QOCWQFuoBLLH12+x5zVaH/GLTm2+Fx3ClYpqP4IAMKFumQVQ+ddCZr0KIwOYcEqiG0ZyZTAPh80jZ54Xh/opuTcpGJ/11mens2iJP3g/930ltT6ydXCnIAeLZ6gYo0JWBBguM+z9lgAYyp1ZgftYB3qRfOQgJATpyE= 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=Wz8T8sR0; arc=fail smtp.client-ip=52.101.201.27 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="Wz8T8sR0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uSwjouzobzZHhR+/yoimlW5oTQfgeZrxxfQuslJA/YQ1tCG5UKqZiTFtNp/Ya8X384IivZb8XRCdf+MnA6slaRz8FKyKh70ThcX8nj3GsygWTLbcLpWZ8Zpcw4X1R64QCFfvGh5DP0YdBcrNpB4RRwzBTZnxZcvHzNAjRQIu25ZE0P34B3qLFrLz+DOkUGxz54ETIixV0zQH9lZk1nOxgPJSZMUM8pEB/OpxFpKE9XrVa89rypsMG8spU+5ghMZrmnTbXn50ekfJPQG77tJMTZaXrqzg5itzT4w+a0ywETeS80I/Y6CxW0MlJZy4XIwdlsNJJn/x5kWzcKZHiMHEyA== 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=VJTtTawA2Hmf4olaQXrPFzgodT38XQ6lbiOfeh8E2SQ=; b=jgvk7RGJfotxjV2UwpzwR40YhvDdB7kHldOV6MRNzO/4B5Q4px9QP8/PEp8wCsMMM4GIrqgpfSNvpVMH4EszpCvAndBJBNfGq2HYkjUXstdVMvLBQycoA05zR75hNLaaXNS6eh3kaXQH127XyRcpA4clrkkE5bTvEaCJKZppmZoRXnOd15MDji2Sx/AmliBWgGK8y1j+RN3yES530P8zMF4/JH7v4dgui4a46YMefqQseXlT2WNoNXQe7nO9KP0bMN646rhpNspi1HnvbNmP3eqN+inUKGh+rLP+IY/53Q6mAS2VAPe/amBKGutNzM5/+sMsdyfl/mhxzczACPjSfA== 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=VJTtTawA2Hmf4olaQXrPFzgodT38XQ6lbiOfeh8E2SQ=; b=Wz8T8sR0F2xjsN5eD2LZChNsUI7sL9uZsk32mOsPzv0tyxgaaSHAj3PGj3jYzdKkYKPt/TE8d9KxrWnJNqQlXTku8GczLzYEgbj6RTHLvl80MvuDiorieVY/HRHAsv8WqR0t91Ni/LMqxc/aj1S8k2QU4P84wZsd3/0Hwc3X99k= Received: from PH5P222CA0011.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:34b::15) by DM3PR12MB9414.namprd12.prod.outlook.com (2603:10b6:0:47::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Mon, 9 Feb 2026 06:11:31 +0000 Received: from SN1PEPF000397B3.namprd05.prod.outlook.com (2603:10b6:510:34b:cafe::f0) by PH5P222CA0011.outlook.office365.com (2603:10b6:510:34b::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.19 via Frontend Transport; Mon, 9 Feb 2026 06:11:31 +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 SN1PEPF000397B3.mail.protection.outlook.com (10.167.248.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 9 Feb 2026 06:11:30 +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; Mon, 9 Feb 2026 00:11:27 -0600 From: Honglei Huang To: , , , , CC: , , , , , , , , Subject: [PATCH v4 8/8] drm/amdkfd: Wire up batch allocation in ioctl handler Date: Mon, 9 Feb 2026 14:10:47 +0800 Message-ID: <20260209061047.3881808-9-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260209061047.3881808-1-honglei1.huang@amd.com> References: <20260209061047.3881808-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: SN1PEPF000397B3:EE_|DM3PR12MB9414:EE_ X-MS-Office365-Filtering-Correlation-Id: 0cf27832-5857-4486-f938-08de67a21175 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?bGowHUmHZeofYiJkV5M8MfsxKjrZyW8/AW/fpcjBiRQUt0bh+k1wu4YblJr0?= =?us-ascii?Q?+weZZ8Vw3xDJb47yW1rE0B7LIyI2+SBshAG9iwh6Non8kOPh/kkdGsbfqs/z?= =?us-ascii?Q?zUqzfIUhNbGFuuesgAoXWZWsPgL1pIEiR9oN2p0yr4bG27kRh6JU70cd6cCQ?= =?us-ascii?Q?fJzf4IvIzrrKVCwdguxJXa8YkdWNWYLQ6bKloS9gMEZ0Yb8HU+/wmedqvyUb?= =?us-ascii?Q?lN6QTHTMu0QZpdH4szSuRoMB8E827uo9xn5vXKgh+XH/rOs8gu//oRPG2wAc?= =?us-ascii?Q?TyiZq2PvN9O4EvucU5tacv3ZVie+MzjqVAtNTA7QGf5UfP/00SXR7jxDhYVV?= =?us-ascii?Q?bHU1/+RCD8A0Tnnaz+tPLtPIC/oI6kedLpp+LJJuFbjrsjJqOb59cQRLuNcH?= =?us-ascii?Q?JbAXZZJEsfO5nOa6cnSEF+iD0H27Ah8bqwkTxFWP78nPAyqnpkvDwR6aQJKl?= =?us-ascii?Q?6vuCLxy3GUi+FgIT18L7dl6czfFvqxD1b1MXAlHSyr4n+aiYnuizmzKwbeZw?= =?us-ascii?Q?IHS+nB5E+3ujblrGHFc28gEEAR+QLtvxCf/Vc3bgYDdW2B5i2MB4mDIni26B?= =?us-ascii?Q?lLeq5cDcwFaPdE8RqQgAMlM6FF66qbzs0w2m6X40tSLZxlwe5raQtfZoG3XH?= =?us-ascii?Q?iMOzhTSGHZ+3S2fKNYM+gn+tQTzfYDLsRO/rJ0zPJ29W6pb73KClMaA2/7fu?= =?us-ascii?Q?MUdyr0b7odTmPFR3IkON7dQEVHpFXWlBRLQRdRSmUSsaIKefydK2GhO6LuNA?= =?us-ascii?Q?9keJt2TceSwO8poaCl6Gyx6iQpFO9A1wOnVDyafIQAKFHMKd0ZI4OMws5fte?= =?us-ascii?Q?P+UWmA79NgoaU64cOKVUNxnnEcBpzi+CaIhcsLF3iFwdrCxsTeDAkdjmj5pi?= =?us-ascii?Q?g1moWxMPYHDXc0SGUymlnBVO4ZKZrvvm9wmvoqUGNivUOtdzuI1hE9wcjFnL?= =?us-ascii?Q?GhsOPmOrl5CkIXUpPGNJfIsKj9y69xxyEplCU0WpVGb1zgNWl6s+2/1jYtyL?= =?us-ascii?Q?qbIBReORjKgdv75/hNCgGW8oOHx2PWRl4O5RVLaTUAkFnYcRU570xOzAjNZn?= =?us-ascii?Q?aOdr7hQJ+TIhwhgjCXCf5TLos4QX9taX/NaY2MO7DYcVu1rurMpCapSTAVgX?= =?us-ascii?Q?02/bJWqe/XhLrf7Sv3tuazUKrIEHeHvNcJajxZwsWaVOR2FjdlztBSyKdfKj?= =?us-ascii?Q?y8T5WjNkLIj1//twmcYsZO0rMNjVZg2uTtE1RFn6/il952DKiN5l3NxYactu?= =?us-ascii?Q?JTXZ4+Yzc1ckHImGgU+8AR+dTk3l8TAj2KSJz6H3cmdDvRXJS9oI+gUqzA95?= =?us-ascii?Q?GTNfZtOfOec9NLFnTnX8WAn9UNJ8CnfLsdh/Zb1F7JoA6cOU7fBhLOFnhi0d?= =?us-ascii?Q?0L5rFI5datupiW4BvOfc0lqpU/414jre3/lObQMXVl2qgJeGMDNo9U7WslBr?= =?us-ascii?Q?X1viDkl/436rLoj5tcsMrWAmDQzTILz2CryPx1IlfiJ58/KbSjrWBM5iEhhv?= =?us-ascii?Q?39gMrE1+OXL1fxPn96K7c5H/B+7AE7QcaQ1qOkVVqxP4JEIE6Thilnw/TjLC?= =?us-ascii?Q?/UdYi4ZqMJILBOTXcLt0wdt9O1ijkHwArPNWp14yife5fvRq1F2ExuMd4FeK?= =?us-ascii?Q?zPLMSl3Fcw3LH/dQRutVeCoW4pkJRnb8uplqSngliLVZ2Azdq1Ncni5o1R2j?= =?us-ascii?Q?H+3jSw=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ksEU1CkqiQCgMzq0NrLjKy27HUY4XVq8MfP/c2atcVp4DaNC0hvsU2PbI/Pa7x9GilSsStXDliHnntI4TC98ISfr6R7ndeNd9d6ZHZJo8qiArc7ZJ9r5DK+qQSD31rM7HHUaGs/p9GZEsrU3rFSUWMUcWxCeX/bIzN3BDx0Oh68wN06oIqF/y7R0kjQijSybErxbT7s4Bt+wAO47hEi7Iynis5BV5mz/+2sgKSg1t8lNN1w0RZhgUabl7bK6MZJmbAJ0TzxY6ouTZq312Ys1eLfOiUd6khjWHYOxfVXIjXKFWfzAagsjBWNcz6nqQrB531UpUvokMTSnH+pETjrhqaomb8B7i1lKzKunWtHjVuOnfc79dYlq7aErxWsJDjCGhtk6RLhIR+I6bqrTI+2ePqq9jktBhNEZjrqtjPV8ZXpI+2gCDQ+6MzzS2WMW5uNK X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 06:11:30.7861 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0cf27832-5857-4486-f938-08de67a21175 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: SN1PEPF000397B3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR12MB9414 Content-Type: text/plain; charset="utf-8" From: Honglei Huang Integrate batch userptr allocation into the KFD ioctl interface. This adds: - kfd_copy_userptr_ranges(): validates and copies batch range data from userspace, checking alignment, sizes, and total size match - Modifications to kfd_ioctl_alloc_memory_of_gpu() to detect batch mode and route to appropriate allocation function - SVM conflict checking extended for batch ranges Signed-off-by: Honglei Huang --- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 128 +++++++++++++++++++++-- 1 file changed, 122 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd= /amdkfd/kfd_chardev.c index a72cc980a..d0b56d5cc 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -1047,10 +1047,79 @@ static int kfd_ioctl_get_available_memory(struct fi= le *filep, return 0; } =20 +static int kfd_copy_userptr_ranges(void __user *user_data, uint64_t expect= ed_size, + struct kfd_ioctl_userptr_range **ranges_out, + uint32_t *num_ranges_out) +{ + struct kfd_ioctl_userptr_ranges_data ranges_header; + struct kfd_ioctl_userptr_range *ranges; + uint64_t total_size =3D 0; + uint32_t num_ranges; + size_t header_size; + uint32_t i; + + if (!user_data) { + pr_err("Batch allocation: ranges pointer is NULL\n"); + return -EINVAL; + } + + header_size =3D offsetof(struct kfd_ioctl_userptr_ranges_data, ranges); + if (copy_from_user(&ranges_header, user_data, header_size)) { + pr_err("Failed to copy ranges data header from user space\n"); + return -EFAULT; + } + + num_ranges =3D ranges_header.num_ranges; + if (num_ranges =3D=3D 0) { + pr_err("Batch allocation: invalid number of ranges %u\n", num_ranges); + return -EINVAL; + } + + if (ranges_header.reserved !=3D 0) { + pr_err("Batch allocation: reserved field must be 0\n"); + return -EINVAL; + } + + ranges =3D kvmalloc_array(num_ranges, sizeof(*ranges), GFP_KERNEL); + if (!ranges) + return -ENOMEM; + + if (copy_from_user(ranges, user_data + header_size, + num_ranges * sizeof(*ranges))) { + pr_err("Failed to copy ranges from user space\n"); + kvfree(ranges); + return -EFAULT; + } + + for (i =3D 0; i < num_ranges; i++) { + if (!ranges[i].start || !ranges[i].size || + (ranges[i].start & ~PAGE_MASK) || + (ranges[i].size & ~PAGE_MASK)) { + pr_err("Invalid range %u: start=3D0x%llx size=3D0x%llx\n", + i, ranges[i].start, ranges[i].size); + kvfree(ranges); + return -EINVAL; + } + total_size +=3D ranges[i].size; + } + + if (total_size !=3D expected_size) { + pr_err("Size mismatch: provided %llu !=3D calculated %llu\n", + expected_size, total_size); + kvfree(ranges); + return -EINVAL; + } + + *ranges_out =3D ranges; + *num_ranges_out =3D num_ranges; + return 0; +} + static int kfd_ioctl_alloc_memory_of_gpu(struct file *filep, struct kfd_process *p, void *data) { struct kfd_ioctl_alloc_memory_of_gpu_args *args =3D data; + struct kfd_ioctl_userptr_range *ranges =3D NULL; struct kfd_process_device *pdd; void *mem; struct kfd_node *dev; @@ -1058,16 +1127,32 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct fil= e *filep, long err; uint64_t offset =3D args->mmap_offset; uint32_t flags =3D args->flags; + uint32_t num_ranges =3D 0; + bool is_batch =3D false; =20 if (args->size =3D=3D 0) return -EINVAL; =20 + if ((flags & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) && + (flags & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR_BATCH)) { + is_batch =3D true; + } + if (p->context_id !=3D KFD_CONTEXT_ID_PRIMARY && (flags & KFD_IOC_ALLOC_M= EM_FLAGS_USERPTR)) { pr_debug("USERPTR is not supported on non-primary kfd_process\n"); =20 return -EOPNOTSUPP; } =20 + if (is_batch) { + err =3D kfd_copy_userptr_ranges((void __user *)args->mmap_offset, + args->size, &ranges, &num_ranges); + if (err) + return err; + + offset =3D 0; + } + #if IS_ENABLED(CONFIG_HSA_AMD_SVM) /* Flush pending deferred work to avoid racing with deferred actions * from previous memory map changes (e.g. munmap). @@ -1086,13 +1171,15 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct fil= e *filep, pr_err("Address: 0x%llx already allocated by SVM\n", args->va_addr); mutex_unlock(&p->svms.lock); - return -EADDRINUSE; + err =3D -EADDRINUSE; + goto err_free_ranges; } =20 /* When register user buffer check if it has been registered by svm by * buffer cpu virtual address. + * For batch mode, check each range individually below. */ - if ((flags & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) && + if ((flags & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) && !is_batch && interval_tree_iter_first(&p->svms.objects, args->mmap_offset >> PAGE_SHIFT, (args->mmap_offset + args->size - 1) >> PAGE_SHIFT)) { @@ -1102,6 +1189,22 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct file= *filep, return -EADDRINUSE; } =20 + /* Check each userptr range for SVM conflicts in batch mode */ + if (is_batch) { + uint32_t i; + for (i =3D 0; i < num_ranges; i++) { + if (interval_tree_iter_first(&p->svms.objects, + ranges[i].start >> PAGE_SHIFT, + (ranges[i].start + ranges[i].size - 1) >> PAGE_SHIFT)) { + pr_err("Userptr range %u (0x%llx) already allocated by SVM\n", + i, ranges[i].start); + mutex_unlock(&p->svms.lock); + err =3D -EADDRINUSE; + goto err_free_ranges; + } + } + } + mutex_unlock(&p->svms.lock); #endif mutex_lock(&p->mutex); @@ -1149,10 +1252,17 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct fil= e *filep, } } =20 - err =3D amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( - dev->adev, args->va_addr, args->size, - pdd->drm_priv, (struct kgd_mem **) &mem, &offset, - flags, false); + if (is_batch) { + err =3D amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu_batch( + dev->adev, args->va_addr, args->size, pdd->drm_priv, + (struct kgd_mem **)&mem, &offset, ranges, num_ranges, + flags, false); + } else { + err =3D amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( + dev->adev, args->va_addr, args->size, + pdd->drm_priv, (struct kgd_mem **) &mem, &offset, + flags, false); + } =20 if (err) goto err_unlock; @@ -1184,6 +1294,9 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct file = *filep, args->mmap_offset =3D KFD_MMAP_TYPE_MMIO | KFD_MMAP_GPU_ID(args->gpu_id); =20 + if (is_batch) + kvfree(ranges); + return 0; =20 err_free: @@ -1193,6 +1306,9 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct file = *filep, err_pdd: err_large_bar: mutex_unlock(&p->mutex); +err_free_ranges: + if (ranges) + kvfree(ranges); return err; } =20 --=20 2.34.1