From nobody Sun Feb 8 22:51:02 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012008.outbound.protection.outlook.com [52.101.53.8]) (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 678AC3043BE for ; Fri, 6 Feb 2026 06:26:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.8 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359188; cv=fail; b=BW5axDi7YFRdIu1iDLPz2gYlOA+3IX9kEhjBD6np+tc3ZxQcxgUv01aaPPr/dNFvMuQmMBIJ8YvvfdDzO+g7E63ONI4AaQK2gCDe2mqa2Sz1KyYa7lPMg1Wmxzj1ZaF47ccmqG1AlYZkO+OfQPDzh1C+vLVKP9PMHjKsfJAkl8c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359188; c=relaxed/simple; bh=+2c5rjfEuLJ+3MrVOrZXfA0bbKDwtGpUnvAcW+2TQKY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=X6EaT2ofYMCE3cl7pMtdcrunPxKJqPB1zRcytUAqtuR/4t9n5PKqLbIbWdbfvUH6MuXTzogL5mkDjrsa1y5zf1xmzncJRBt/j7xtyZxaThiCPtm7fC+3H8cPS47nSRYijH3F13UhLB3Cmg01ded/OHSguNbAndnIKaMYY7WwsG4= 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=aj/C8Wb0; arc=fail smtp.client-ip=52.101.53.8 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="aj/C8Wb0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wDOC2vsLmDBsxT7B0BNW9uCBjCl70ihNzMXPzuBid0+i5BKCFMyICI8/kGM6NxFIiRyi4KnTwZmzIn2pKXmIqdx7du/mF5a5F/FihF6N223TrbYQ6DCrniTZPK7K5CaK3xHRyKDCOTGr6DZ8a7kFjkrK9tZCLia59SZmyhRsV2+O2ua60pt7yr4s792KxOhHdSnlchTNgJgFl+nwUSTdRTwEwJWGMJMclhiC2Ay2LXRJSg01r+TGfV7EBfGc6nuGpvVdZZAPRy+sePBJEZUkDAdNminGezd9lVzPTHH6wqH+4NEqgr6wgHs+VcXLzDXRIBiR+bH1+UC4FcDRpUMQWA== 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=F8gMEihpPcOsLES+ozyeyv7xVerSQT/JCvbdcJISZFErHnd9+oz7E1l36Au0CXyNeUDBwv5eiZ3HDZDtS1P9VVmbuCY0EBIlVPCUB6De0v1YhfEZPS4D7kEF1xBuZOGDj25u7V/eJ9oIfxY7uQuDZtJ9wS8jweUmGtGIyd0wRRd/y1H2CC1dI7HQ/WionRrvqn0YxxESWWbfKtEBrSYrffV3qTPfVmSfcKng0aZNdYbWb8e1Mti/VQn22CjYfNlJvDGVAOQt7Ex9AK7+1QWdtwvF/eIW6DJx5Q277vC6ELiMZWpuGNDYHfjQujVaU4PxKfUjnaOs1p/9UMhBtvrh3w== 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=aj/C8Wb0uo6CLzsKj5B92Zo15siL+eKQoB/dNwDdXoSUlHrvw5oMmFFRLfg/PUiIHuuEWGv8jn/fVW+ppAe3C9OrJRiFD0iyIw2ZjPBjqngkTdc6IbYN/AOsrIf0/s1VI5+KLy6+7v34dd3VBEFb2G9Gm7upyVgiDgi5hJkOCsU= Received: from MN2PR19CA0017.namprd19.prod.outlook.com (2603:10b6:208:178::30) by PH7PR12MB7331.namprd12.prod.outlook.com (2603:10b6:510:20e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.14; Fri, 6 Feb 2026 06:26:24 +0000 Received: from BL6PEPF00022573.namprd02.prod.outlook.com (2603:10b6:208:178:cafe::13) by MN2PR19CA0017.outlook.office365.com (2603:10b6:208:178::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Fri, 6 Feb 2026 06:26: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 BL6PEPF00022573.mail.protection.outlook.com (10.167.249.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Fri, 6 Feb 2026 06:26:23 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 6 Feb 2026 00:26:19 -0600 From: Honglei Huang To: , , , CC: , , , , , , , , , Subject: [PATCH v3 1/8] drm/amdkfd: Add userptr batch allocation UAPI structures Date: Fri, 6 Feb 2026 14:25:50 +0800 Message-ID: <20260206062557.3718801-2-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206062557.3718801-1-honglei1.huang@amd.com> References: <20260206062557.3718801-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: BL6PEPF00022573:EE_|PH7PR12MB7331:EE_ X-MS-Office365-Filtering-Correlation-Id: 40bac1fc-05cb-4284-9b8f-08de6548a645 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700013|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?eEsZhCWrbj3cpHqRHpBd8dlmpw2kXA0mapk0SnsJIpakx84Og6Zx0VUPSKqf?= =?us-ascii?Q?f6Pf1QK9LSbuhRdeHAOLOQ6GlLiPYx7NGbuSyhD8L89XXmYCPgBmWVQ7prP3?= =?us-ascii?Q?RzCONzNafVxsjL7+xNJEWhXkUi/wBrsIitJJ8PoHlxSI4hRW6U9C7AJfF2kd?= =?us-ascii?Q?PFlc6vq+Bb+WnqsByP3DLuBQmi8XAXi32uIKHLDtgbG1K10iaD2tosTdzox5?= =?us-ascii?Q?oZLnAuJOESBpM8Mf1QZN07NCHxNZ1N/v/fKQOn1aiJz1C13Lv4VRBio4ZYOZ?= =?us-ascii?Q?UfC3gAM/tFcewEWiMa5xUnrHS1cwv3V+RiSiz3V6hPqqFo9NnGBNaA621npM?= =?us-ascii?Q?6VvpBNdTTHLsNCP+/+0M1EqewLPRZk8he2sneHm9lY8JSQamGJ6QlgwBjrAz?= =?us-ascii?Q?TyaQjQXIpSXDEvhJhsSl5sUkAcqwpzJN3ffkj0kmeu13n/yNBrrv947Pr3Sj?= =?us-ascii?Q?rIha/mWQ9HyTAmtMo+7VR3HiRchQUnMJvdG6DLEpIhC2OlgyVc3OPSHzYxvn?= =?us-ascii?Q?YQcxSfM3uUdXmd9OAqI5FwJlHxLT7LyD1mUVptdTXLHWUwm/q8MruKSZ1tDU?= =?us-ascii?Q?6HfO4mr0ujebm6Ytb0lD9DPvM0oPmAZSmMPBQgL7H95NWNRVQN0kO3wVoUOj?= =?us-ascii?Q?SFdWAI5dOKN+QHnwKLeyhR1oDf45ACmyQ72pr6t6lhsZJ9HxHhiINZqvfYN7?= =?us-ascii?Q?wd/0yQ4YYbh2zbT+aJcxW+aJPaM234FDMCEUanXYdUBIewZoO3WFmUh4efCn?= =?us-ascii?Q?fqh48kFiDjR9/NjcOcbaFG3ikclELlvRV2D/IIXKXXuZQJeDeF1mlq6Mhhn0?= =?us-ascii?Q?CnBXb1r2ccfekRYoHTEvo4bqlHlWCOkpfHYtamTrOBj0Pt78w5AxsPKIH8g4?= =?us-ascii?Q?WZ778K3CCP6LwNA3ryHPSH7mvRjrbweU2oA948D5OA7odfAw6ClnsKShuS3Q?= =?us-ascii?Q?5dJNymjNn4u60ZQzoZrk9t/eYYR0s1G/78kSFGXW/LeAANPbe0C4zh5RGsYV?= =?us-ascii?Q?ME4so9OWgdpeHQEkx4khfdabZTWcvGpwVwnRerm08kOqdpbdSc8cCIjSuXi5?= =?us-ascii?Q?LHUdgF9o3GfNbS63yNL2Z8Zh9gi5hLuYWmXWz8cIVSvTv6w6V+80tBrbqMmI?= =?us-ascii?Q?v3gXVQDkrmSdqyNG4RhztNcyl+4O/zP8bq3ZLcu2/Nyjw0mQYZyXAlZA4k4g?= =?us-ascii?Q?QvruxN0r/3N7pEP1plGCus+emCRsNCso5sh9/HFdxG/GLOVg38PAsX+dA7Lg?= =?us-ascii?Q?EI/WjNfRH+2Paoet9GrnJccLXeiDBDrROZoPEHz80tTbpL5r43Zh2oQP3pCQ?= =?us-ascii?Q?6Xa21kCjAFxl1i3gZyAJyCyjefplfzEVvwyrhtYQL+PXxbMLwdc76TJLzFQd?= =?us-ascii?Q?5iovCImZroPivDhDkke7Q23T3anf67BjUnLXuxmHki/NU6EJGexz0UItgiQ5?= =?us-ascii?Q?qJjfaDdE0MD+vcTwjAStmULIl5xCYpKAOFcYQ2yMXMgx4JsHkFTbgUQH8Sqk?= =?us-ascii?Q?jB2mO1DSjr4v0Ingt600IP0gl+tzkFWjv6fsX/ByTz19sBeGzoZwoPecpl7g?= =?us-ascii?Q?8GXfv0EHLqFoufCE1iwac1wNLzvd5lnhPq/tsxGusQHsBhg407j3LmM7xnN/?= =?us-ascii?Q?VM3HlxBY20GdpSHmubklckHoQfmpJ1/L+bt+fWWTUG3e5E4ZN66uIWyA0kIk?= =?us-ascii?Q?s5pOsw=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)(82310400026)(36860700013)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cF6WSFBq0CsnqAOEIz6544l2KRQYcbJ5azGt0XKaiWjz9twxvknuscRRtG/zZ3qDX6nlgK/aBiJCVIdO/TgksbRR/RGZrnO5VaYQ19Bqe15PxXJX3II2Vo0deoWvt6d9purHG4TDCFX0SIBf9SMZ5JkzxEoTqSqCe5N0Bh/N6jL1+Ugv2OjjAqydMmSyAmdE4XuLQnrTre6vvnIt0nwAvPRWxXdo88luyqYB88cOSCYrA3AtpiE6Y2eohWvyyYk5LxyBz1IYpgg0XUiUnMWFccsCq6lJWqr2n6IHIn/EJzT1Mle1ChR9NfV94ALB39FQgp0JWIJTJ13IpFCKkkSND8+2QD/h8ehAeuv7eqszO/LVvWBU/UD3kbDxQJWhR1m8KvVOC08bNw45yAwDLDyeOLRub3lIQ/c3WXHML0wyT0XiCYFXiZziSYZZu6cLfzEU X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:26:23.4375 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 40bac1fc-05cb-4284-9b8f-08de6548a645 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: BL6PEPF00022573.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7331 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 Sun Feb 8 22:51:02 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010039.outbound.protection.outlook.com [40.93.198.39]) (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 3E2AF3033FF for ; Fri, 6 Feb 2026 06:26:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.39 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359192; cv=fail; b=EhEEv5AxDWq5a2mJ0W6gEY1/6KX+lC47ZG8jtA9NU3DqObJ3C3i1M9UrJWOh1Jet/Cnu9oPzMPH1aa5GSxiLy7prp0bNhev7LLoJMAzJ4tWyUlCe+ASfj+XrGA5DWPW9cWiXZBZjzRUdV8b6nfNdQCKR9LqjhP2mAyXKyCn6gac= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359192; c=relaxed/simple; bh=I1SaraN6koJdN2ryoE+inPyBQtkjzzzA+hIZMeJbXzU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ry+cTYx6BSABGnqyUvKNLCSB6LDdmbeYw3r5nltkJsmFquNzsgnKPgmwNitBEmtv5woR6LNkfazHz0JIFk/0/1H7NVnwECD5UNw5olN8G7mqZyyIk89Q4o1WbdRPGB4vHEJMtnvrmqLB/QSrQ1t+8ca9438RH58w4ROTzIwR7KQ= 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=qXwbI7Tz; arc=fail smtp.client-ip=40.93.198.39 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="qXwbI7Tz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iKYmwGYy5whpGi10Aq8jC8iaqowyz71vbnrU1L2bYNq+T/3D1rjSrTzGvy2kzEY9MuGLNKelfo7n6oj+WhRChem8g0/YIJWEvKMIRfxlY9LpVBD7JMRoRulT1KLTxiTL0gtQfBXEAU6GhqG3c9sl7qw6VuGulOx3/WxJj++BpTOY5Gl93MlxY9AfqMaDK4GvjaF6jl/XEErj4ry1qq4Wj+n18ohZHTpvxZgP994TWwMZDCB5fvx8PRI8z0Y673tcYklO6reOokOW4euk1rpFKZPkLEPd74TX1rsEM+mGumb7izRC3uUKxsptqnPxlwKi4lMEEptiFjU6ZVi+hf4Lqw== 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=nhkBBcRyt6qidp6navqCF/Gb6+uUaK3CYV7I0esqeCs=; b=vauI9IwUDFo5oxGwII8/Z2OJJUPUonw4NNUBLjt5pEUY1Q9pwHXJp6Vgy4hF3KFV+SR8SIwiCDx3n8JWb26s4SzTL9EMkClWmKG6brGEMXrdDx3nULUSGuLLVMO7FiDffniHfH1UxQuIJxueLoRYODM0ol3p9WZ0NZk9B4fg8DufjG7DZuvxWEbv1UtTfK+3hXiadPIf2x1zl3FuIXW0iUVhgscEyI1BWcz/OVMIjXgEJrrQV5VDX5AVKEo65T6PVuqV9KTnW83bTt8WObm84mWA9Owl+VGCh+p9a2V1L25ReMnt1BgK8pJxu2/EmCrq+h1PpDW0B3jw6za0GMKYqA== 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=nhkBBcRyt6qidp6navqCF/Gb6+uUaK3CYV7I0esqeCs=; b=qXwbI7Tzdwi5ak4axFHBYFtviLNMdNeJ7/U7vPl1nW/l4PUPSR8Ms6cqUJx1wzaO0jLlPDSzFMjOpp5yoZT2pB/juALfOkhxZmCFWCDoZQI9qTt/5E/yOAk6mdp4JISEoH9mzFqD90GY1IpFw5+ZO9basoukg6+TlnhJqGJqVbU= Received: from MN2PR06CA0012.namprd06.prod.outlook.com (2603:10b6:208:23d::17) by CH3PR12MB8657.namprd12.prod.outlook.com (2603:10b6:610:172::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Fri, 6 Feb 2026 06:26:27 +0000 Received: from BL6PEPF00022570.namprd02.prod.outlook.com (2603:10b6:208:23d:cafe::e9) by MN2PR06CA0012.outlook.office365.com (2603:10b6:208:23d::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Fri, 6 Feb 2026 06:26:12 +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 BL6PEPF00022570.mail.protection.outlook.com (10.167.249.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Fri, 6 Feb 2026 06:26:26 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 6 Feb 2026 00:26:23 -0600 From: Honglei Huang To: , , , CC: , , , , , , , , , Subject: [PATCH v3 2/8] drm/amdkfd: Add user_range_info infrastructure to kgd_mem Date: Fri, 6 Feb 2026 14:25:51 +0800 Message-ID: <20260206062557.3718801-3-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206062557.3718801-1-honglei1.huang@amd.com> References: <20260206062557.3718801-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: BL6PEPF00022570:EE_|CH3PR12MB8657:EE_ X-MS-Office365-Filtering-Correlation-Id: 8a7a478f-54c5-43e3-3234-08de6548a853 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?V6x11yN5iE/zSDIKUSPRpZL30GLIEd20p8cQw9pxs2TQ5Z+xh8Jmw1stsgc/?= =?us-ascii?Q?bMw5FVXCzyq/QzDDEulGACA47kGdaq3QxJRl7PlkXcgSbBU917cp96LXjNCp?= =?us-ascii?Q?yYZwzE7j8C99eqgE4aa8dFZNZ0GDr/S0DOeHaN5o4zYPBteMeYLq1dyNGupO?= =?us-ascii?Q?YpWaeQGlj18Z7yLHmP6AiImxKddHf3jlOO4V1efMYnMvUds0FFIfhiFH1wap?= =?us-ascii?Q?7gJVHurt+5AUCct6d3GnuilTuIWUcwqSANyQlXdPROkNeVitGF6YIt5v2Exf?= =?us-ascii?Q?cWorxIft7y0ROXOAAaVe7VKIQPaRGaVKmHniEjIDjtWNCXZNSIJq4MbuQ50E?= =?us-ascii?Q?VmFB+qxrQWYRFJWe94XwNw/tN5jRR5Zyw4YieU3BnORLHobIT9QR6a35k4q5?= =?us-ascii?Q?zPxRpXJMW63Y5EIHOZ3obeNL8SL978tcNnIoRfCz28MiA5eWaODKPEEgxpLw?= =?us-ascii?Q?Io2Yj+z+wAxEueJKzjpC56IInxfRZZIl7TkQbvC0VaSSD730nfFMAhB6+EHb?= =?us-ascii?Q?mIBWBUkxOu09zQPeo2KEbmV9oDo7mvaxDz82k0s5+XQELY4AWMBS62ZW3Mwz?= =?us-ascii?Q?cxa0CULhxpxH9k0q2Os0YyAI7adi8XN3CljUMu9Bms9ozhRKrJwiqoXKidNb?= =?us-ascii?Q?uhBcOah549nEyi1B22pittssinN+eGuyYJb9r+wvf9t5HfZyHchBI1pWLbfb?= =?us-ascii?Q?S+TEEph0z4Lz26ZLZx9YAtxMc/z0KIxdbiVncTfi7jeI7TajIJqTqoLXy3m8?= =?us-ascii?Q?+KepXz/Fgt1oh07qh+nprHyxqHxFUxEXOMVWbtWgVebM/hnhDE5ISEIeb75b?= =?us-ascii?Q?Pn3DiNlgpbfWPFAfyz983l5TKcnpq7BRJF5017IXR3kYazGHUDA6s7XlLbDa?= =?us-ascii?Q?pqkunF/pYvcqX02FTPr2HmOZjLVBiY90NAVevKlip6F3w794U1exgDjxl1Ay?= =?us-ascii?Q?0MCbxsBoQMlVgWKBQ9KuY4235qWMjvWmps8NVJPNzgBd+i2EHnd7qf0aZUSP?= =?us-ascii?Q?9F4P3aG/TEyg0vttzKESFs6Ziin5BA9HThP2/wgzqdcRWg+H7RJ/2Fp9pjuf?= =?us-ascii?Q?jZQR1ivTRZ76KBN/MWhkfPk3BRlC6WyS2DTGIQJxJ1FmaPM3yV8VVL0Nyfm2?= =?us-ascii?Q?LTwRXJDvKQ+rsFHv6235mrnpxugtYLDGoYmNck0evECFwX8Qu3YrZoxXP3Sw?= =?us-ascii?Q?N8Gsf0KFHjR8tpf70iMJ+hmqVsEiMRxMHVifnN0g/1swm9gkW5VCGkWpkyzK?= =?us-ascii?Q?k/K2+JgrFMSTLM7bCwWoT2XBk1m3UsaBqJLUZTU0mNP3PgsLq3yQqBQUfoPP?= =?us-ascii?Q?dDn8CgRJhm3kwF2svpbHFmrZkKzN+Ck0/aXv0tq2PMD5h1+z6Vk6MzM9UHYO?= =?us-ascii?Q?p+iK6nIPhCYX8cLjbDUJ6x+OQZyrg/OfbSeS28YLU8UtBUF0W5G6gCiWm1xK?= =?us-ascii?Q?wuHuYhIAuna1IeDj+NGMAq5ypJPRb7GITt6mwZ/HeXb9uUivfg7P++26EsV3?= =?us-ascii?Q?72dT4/yl2sK4C96reAo9k6cgU/Sy3Cj2kE/vo7bGQU6IzSkWpR02JoYveAQV?= =?us-ascii?Q?GK+R+F1UBDZ7D9gE2DvYIzbadOaL6Ya8j5A+p7MlkO8bNdZ92BwDbpxyRuXU?= =?us-ascii?Q?ico6PU4wWv4COKyJvPUnSBWKv+TeU5sfgGJH6g/K2P/RhQsM8fI7ls4Nc4MM?= =?us-ascii?Q?ki6kEw=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)(82310400026)(1800799024)(376014)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: g5uGtav2SvWoVG+TFN9PHM3yZFqa+Uyo+eR4EWhWlh/GBih4r2jx4PTyE9IOmPKioRmiH2MBpN7aXcNbA/pF5YNPUeB9ToicjifOeg/H0NXms8EFs/4qmJ6sXCbEnS3yIoqUPmQr9reXYCYBgSaBCdfwzc5CmiEvYlb4JysyBxusvvlU++Ig0t5F+4wZ1W4rgw9/3qoUSLOpcrgDL09nBD8ficofazWLDWLvrmtrS7Pw4eZrU+6KqSu8qxwgGRqsbjSILbiHOjeLSo0q4PdD4PBIX7oFeBUxWK360J8D6bKLona8oBk4GUwpqCzjt7ojkonJ3VPzeLXJ+AfaQIbfuoqDQ4UuvfT8Ov/18CGK8ky5jDo9huCHVK78Mf2GVGCbXKpW59Hk96Nc7VnAcHBasqMSPhBSYvJs87CcYIs3UiQY/TgwFyhVeRUfS94kY3HK X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:26:26.8831 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8a7a478f-54c5-43e3-3234-08de6548a853 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: BL6PEPF00022570.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8657 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..58917a4b3 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 */ + uint32_t invalid; /* Per-range invalidation counter */ + 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 Sun Feb 8 22:51:02 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010020.outbound.protection.outlook.com [52.101.56.20]) (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 18E3F30B513 for ; Fri, 6 Feb 2026 06:26:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359194; cv=fail; b=qJgj4IzwFM9v0CRdSaZ77jyUNiXlFgVUk2hL1acFSVnX6UYBJwpG7sCi4I/15PHNdCW3EVs02OgYwSejWJDuvasROHa3UglWQcUQeAp4IJuMTbhvB2kWlfPpyONeJeGPC5VnqwZc0Qmi/zgqNWZuS2cUZcN1kKj9gaHd+tRVQ2I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359194; c=relaxed/simple; bh=GHRG014c8HYYUJyiTSJYpvQDWgoQLjFDi8clL3FRboA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=i6B9vUpfo0gSetKAgNXWEXUtTnh7oGh2qM7IsEayGNzFDizL6uasbYXSbDoiheWB+f+JeOwg+7g0MOYTRbfGiBeqqiBtcGdIjb+5YHHk8fxg76gtETiYNZwCahqu9cXTCifewclyW9V2+Gz+rhxLh9j9lpTBrA1yEc3RwntGmms= 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=E52GP3tS; arc=fail smtp.client-ip=52.101.56.20 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="E52GP3tS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QAjfVgnRwnfM5e6AHKY4ubbxvgYbhE3O2DbRUeMCIntsstZ1l3j//l/VG3A9IM6KM56OVgiRszqPua0Hnv6xhGH7OyxkkwIJxJmWV7GOXGTlfPtTFhS3XzUBZzJpBanezQsUozsN0zEzVMjWjsMD8W+JihxO3FtholGxRnmxgcW38DNr6CZ2Zzs36Bsk4mRv+htvcSzsKasYrP3fpPrAZrSDidY7qQA8ycdn17HU5rPr2BrNo62EoXTGnf6tGLzcrQeWCMS1dGOWWuEJc7NkcYMY+IV+oGDOk7g00hhwZz32qgIO88lYCNoCXjV1u3HFgTKei2pQ+FkbSurZeLcjcA== 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=gsZZ4o6mRj0OJ0EHF4vm92cMxvD2fFY+PNgD3TZMx5M=; b=uAzwhYRnV+/GTMWkwe1ayay2eKch5oDqWyv1/dx4IxhvqxUiawDbLOE9qAGlrG59YhXo3E20IXxuctY0SocPJ/SOwesX23pnHQe7yif/laoGptLFQ7XXb+3oWkk1CrMRAwJkrfKB57U2NQDMSSSgteL5A8L3Lk6xgkm8HXa0PTfYj4cJmjAMI7oSyPNPREdbEY8F6wFy2+NoZEs9P/94ihFHCdS5a9UkjuD6AetMp09dM3WMDUpQGI658vPQSqvu+NwNc3436qflYUIf8kdntjiaMrueo3jf1wxkRfa2h656Kv1Gvjy5wIa8DpwaHokwOcABelxwCRkS3kspZ78pWg== 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=gsZZ4o6mRj0OJ0EHF4vm92cMxvD2fFY+PNgD3TZMx5M=; b=E52GP3tSN+aPhhBV5EacrOZ1LBI9K116Mqe0ZPoMmR1RsPiO0d6okFp42pfeaj9UhYSu+bYD/oGS3tRF5zg1P5gQ/m5s94yWTHkouUyLuskyHhTj/euVb8krmSVmKyPdrb58t1HK3cIlkPpjGzreXxbfGGgvxtwQv5YmKEvgsqQ= Received: from MN2PR06CA0024.namprd06.prod.outlook.com (2603:10b6:208:23d::29) by MN2PR12MB4358.namprd12.prod.outlook.com (2603:10b6:208:24f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.16; Fri, 6 Feb 2026 06:26:30 +0000 Received: from BL6PEPF00022570.namprd02.prod.outlook.com (2603:10b6:208:23d:cafe::86) by MN2PR06CA0024.outlook.office365.com (2603:10b6:208:23d::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.16 via Frontend Transport; Fri, 6 Feb 2026 06:26:27 +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 BL6PEPF00022570.mail.protection.outlook.com (10.167.249.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Fri, 6 Feb 2026 06:26: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; Fri, 6 Feb 2026 00:26:26 -0600 From: Honglei Huang To: , , , CC: , , , , , , , , , Subject: [PATCH v3 3/8] drm/amdkfd: Implement interval tree for userptr ranges Date: Fri, 6 Feb 2026 14:25:52 +0800 Message-ID: <20260206062557.3718801-4-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206062557.3718801-1-honglei1.huang@amd.com> References: <20260206062557.3718801-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: BL6PEPF00022570:EE_|MN2PR12MB4358:EE_ X-MS-Office365-Filtering-Correlation-Id: 304e631d-d894-450c-b010-08de6548aa63 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?uBYYNF5W2hJOHl3vSPtjJx00DxiKpqxVQ8QqsUmYom5v+/EzEAqg0jkeFBac?= =?us-ascii?Q?KjUNqTIKemLPP+rykGj1DZdKaedfA+5sZtbJbSZ2YsJAPXqyYbYUDuxSUe9d?= =?us-ascii?Q?p0YJ2SCfsbVaJTaQ7kU1uipWwQ3Hv3nDITiCBDznN3nKs25NpUxwjI0YvUqJ?= =?us-ascii?Q?di7YfpXoXp1tz/XLUegh2Mdb+O10YwzgUZnwKMst/QHpJFkEiVX40vUOCPkn?= =?us-ascii?Q?vMmLmZW3kFkgZKl+rg6N19n4F6lvULXQs3e2S+gWLy/Ay+cvgE3NbLlFxss3?= =?us-ascii?Q?SaKOZD6TC0J8rLK3kGxoBHTIcSrIRjO8chFRyiDDk9GKPJv4vu+4sEBr8cgX?= =?us-ascii?Q?JzKoit+HE78BqypoxflE6fgF2xGZDweyJey+dLAmZOePjXca6UvKqSSqmH8D?= =?us-ascii?Q?IHSAmU1x2wLGUvquKn1elLLG+PFREJvHFY6eaoC/PIAoWfhAb8VwIUGz6lZo?= =?us-ascii?Q?wVBALdJUetSf+7eYuUhNuZb+zkoiS8FZRl0jwEWHaSkEVZXtbHzp6vmArm0K?= =?us-ascii?Q?bpa06ryKCplK/7RudSvmoJulwlYx/GKb0A6Myy3LaaRf+52X38a7X7rsuepD?= =?us-ascii?Q?+JBPNdNKCm9qHUOwmgWSc0cpucTai0lpDhFshALOR2wrh97y4QbLWiXxEOWh?= =?us-ascii?Q?3p467LUl6WjenFsiOdNyS2JutT1WImH5Mxt9YG+thpyFAMCiQMtiRQVtpZMF?= =?us-ascii?Q?nu5uUPXeEZ7Yeb6lYJrko8zqiGQwJULNajh1cfim5vDEzOSeLQbM4waszImO?= =?us-ascii?Q?H9gMxXKRckcvZmnfjzgpQt5AkDBJNUC2koxWnboxUntShcoKR5CCWIUiOXPE?= =?us-ascii?Q?GBe7PzcYDxo7VjzdZjNdij0vv6xnGBjkcTidF/JL22AQ2Kg1DPKfcU7OXtZt?= =?us-ascii?Q?mFK8QC8A/TdOivmV3Iqi20e9XPABqPapX2I2uY94regk9uBUub2Mz/3R1KD7?= =?us-ascii?Q?FJOOBn5yujG/BJYi5nnlvx7p5BbEaprvbIKDUm3Mb0eguDA0v4s98PVQO6mI?= =?us-ascii?Q?Ex01K7ftkMRMsWz5tFGf1QhetA/ZXmO6AIGcg7VMj1YSo1wHv6vHY/eZlHYV?= =?us-ascii?Q?R0FmBUXhmB5bUG9tkbERESCmDjLaS6MajE76b3+QbOEqlykq5ScE1BQQTm47?= =?us-ascii?Q?nlXwVVGvswO0eZOkkdiobxp2g3rttpEhZi9mnZyZX8fWWNhDQ7Am1/ERjY30?= =?us-ascii?Q?sKZRhEUxi/nKG+8gqct55xHJFT9my4x5dFrC8v8hDRdR3+iDCrDarxpaedHI?= =?us-ascii?Q?rlJjk1xMT3yWFpX2QLDXkCOsR1jk0r1WHlRJpMceb1YrW9RWjeP7Q4O9Ly74?= =?us-ascii?Q?79y2MLW0plv97YFddFouXUPmpQzuQuX+DLbP75TM9xcaT1wGl7VzRGIGjFH8?= =?us-ascii?Q?uvqhg3Ql+nMAJsBgd/a5trEZv3w3141csrOZJdAfjGrlJwa6pcrfm0UH+02p?= =?us-ascii?Q?1IvZCFDpg7ftbwyhgJM3JqOafb7IcSYUXs+SKHtNrkWa/b67ZRANb5+iBZMm?= =?us-ascii?Q?CkYpD9NFMQwuXvN24GEi7EEzI4FM2IVHlHbR//5GjyqVug0Lglo9jAfVCHnG?= =?us-ascii?Q?Ey2w2fc4r93EsLwoU9KP6VzhoLdc7c7QCDJaWAIMevn8X+eh2HdNap+A7gOK?= =?us-ascii?Q?Il6S1iMomYYovAd63xGou6HaTditMjlBFLQZW1M9w2Kg2oeJaThNwq3IPxeX?= =?us-ascii?Q?EFmh+Q=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)(82310400026)(1800799024)(376014)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +EKnwzOSxvealA/2HtYHgUKACMr9U75OFFe9hvrRWqeDtgJYBh2xfAnEUrHYefqrvIAHP7FozOAGjz31l3RJd0KE9jV7Il50fczNV965MFnaD07yIskbPFbnBt4mds2zUw35882aAoRsiP081g6EYul2dgCNUokB/Df9rnbcEOqW1VoaLkBj8whdr+7iKtLsNGutouMAxd0FzXjRRalDO7db4vzdKo+k7p7bbK9of2t/Z7e3v4gLxusfPRrMZWxOrNJyec4hlzloLeTwylzELEeUQhO2mXNpiuYQ6J/Ew6gRVmJo7PQf7g7wyjfb+KPJmUwAhYCHduRDzy9LrKGxJxmgQxNv7iRW8jVrvKZG5m098gHPx0br14lwb8TV1aoNuMXF7YUNrl3ua+rLb41ndJwdNQ8aMgEUCmLM1ZPFZ+96R8H9AD+iNhpa2OF3xY7F X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:26:30.3461 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 304e631d-d894-450c-b010-08de6548aa63 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: BL6PEPF00022570.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4358 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 - mark_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..3b7fc6d15 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 mark_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->invalid++; + any_invalid =3D true; + pr_debug("Range [0x%llx-0x%llx) marked invalid (count=3D%u)\n", + range_info->start, range_info->start + range_info->size, + range_info->invalid); + } + 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 Sun Feb 8 22:51:02 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012049.outbound.protection.outlook.com [52.101.53.49]) (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 9BEB3C2FF for ; Fri, 6 Feb 2026 06:26:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359198; cv=fail; b=rT9q3z8iQnbFUHcJUF25QJ/iUEle/SDHOWCE3uHn93pTBi3hwUM8pVqLr8bbMWWXJd8t/XYnUnlSRr2wMjDDLBbMFefgRPMuM1oc2UTEVh6/+bQ0G5tU4bWjSGb3nzICaXnYqHL4uRdAdbJaCVjNth8GyXxzjPWl6FT8uPyFPQo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359198; c=relaxed/simple; bh=1zieAEB9vbiWoObidUg5+ENeRKeuX5LL87IQFVCHZjI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Juq8gotDC3umNLZKv6KR+0HS4Qdqrr8sK/g6u+ZB1i/hH4R+rSR5XmExCQjbwa/+GhR8CTSVsbzxwRAO171vQimJoBdZGWgm6e0eHXdlC+AScm0jrQCKZJpmhPgRd13Q8k5pi7l23jWCXdhbfvTS+7AfVj0ryXTguS3j/1RnBIc= 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=tIRumDAE; arc=fail smtp.client-ip=52.101.53.49 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="tIRumDAE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XS9rPW3PmJfiR317pTpsLNVf49R7MoJGqmDgMmc3rrx4Lqya2MFWxEmIKCOaRy9fqy9iUT3YZeEgHQON/BvDZB9QLp8vjNXo1lDdfEzvh6g5vZ88As5OF6A7L+PGayzhhd3EGAiV/sl9olNNF5q+ankro0uIfRW3lGksUhvs92mhcLATCY+rsS3j06RvQyymn0UZkS4llnGSKssjHocy+42y1sJ6Qcspxio98S3Z0j/q9hjWCuoiU2/0kP06ADcTrB8sDaGCuh9sdZQGS0zC1kwWsBDuzWkto984RZFuc9NF9INEnCaSl7wo6iBI0MtEOJNR/yhq6Ad4cY80MS0n/A== 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=HVlxDfsPiBs/8ApMubMs+MIKCmFJLd+FLDafHNtFdI4=; b=kaCkvRdZElOGUqDypND/ZkP7QfJCPkFD0OZ9H88mjiqV1txaTm3CxCN1anfLouB1tUCU//jjqTYdrKNPxik3pyDaDiGTdXMNehxSsYQWE3iNlevkxWvrn62hqoK7aoxi3rVWe9p1D5Ow7gQ6mb1n7/Zw5d7bQlILXJci63B0PB0xQSFi+8QJN3CBz56Tkd9EPXj1SqIn7g5o7cvuxrwv5JLlXSycQ5jvHP1F0BulUc7bxqoeENOjV2uf6fMPwJvxE9qjfSizL2qc8US0eylAQWb3+/G79QU8G1e3dgzse6vGwyxN0SdecsXVhUuHqIhU66zxaBdUwBctNPypXPTADQ== 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=HVlxDfsPiBs/8ApMubMs+MIKCmFJLd+FLDafHNtFdI4=; b=tIRumDAEGWcbCNA8DIvMy4ULkumP8G0z6kUCQ42BcYsWX4HZViaFzM1DyNdErtFmR1jdgLZG32T4qxK2bC5pjJeEpVTMKEFzgCUjkaukOxOlbYELlLy8EvlOtV/RbJvK7jX97Kf4PWlp0wPGWkq9AJ3FjgIBtOyqiWVca4p8KWw= Received: from BL1P223CA0020.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:2c4::25) by DS2PR12MB9663.namprd12.prod.outlook.com (2603:10b6:8:27a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Fri, 6 Feb 2026 06:26:34 +0000 Received: from BL6PEPF0002256F.namprd02.prod.outlook.com (2603:10b6:208:2c4:cafe::2a) by BL1P223CA0020.outlook.office365.com (2603:10b6:208:2c4::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Fri, 6 Feb 2026 06:26:22 +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 BL6PEPF0002256F.mail.protection.outlook.com (10.167.249.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Fri, 6 Feb 2026 06:26:33 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 6 Feb 2026 00:26:30 -0600 From: Honglei Huang To: , , , CC: , , , , , , , , , Subject: [PATCH v3 4/8] drm/amdkfd: Add batch MMU notifier support Date: Fri, 6 Feb 2026 14:25:53 +0800 Message-ID: <20260206062557.3718801-5-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206062557.3718801-1-honglei1.huang@amd.com> References: <20260206062557.3718801-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: BL6PEPF0002256F:EE_|DS2PR12MB9663:EE_ X-MS-Office365-Filtering-Correlation-Id: 735483d9-9614-4722-f304-08de6548ac73 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?uYFyBbY+LO5cxKw2jAq1N4BC+nI0caNQckFnhSUskeweXcuTqP7p4/3fs8gt?= =?us-ascii?Q?N9rvUviPp0tEOXtAmbuKfLN/4ewVsP4GYjWUMjK/AyCS26pHeG57eNAn3BXn?= =?us-ascii?Q?86ItMnGKU1Z3cVFCfi+iWtRt2IuUUBHO3nVb8K+D/INVYh4Zgkoczo1kVGeb?= =?us-ascii?Q?cEYAg4F6ra9Csjf7q3erFrKliwQ0CswTLcMdPv0sdWz8WI6COAuX646EvPv1?= =?us-ascii?Q?UWLGDfoOiGQ9NvqXObY5RkK8aNrAbuNTyme7B4ud21TBRgEwklFsMI/Nd/v4?= =?us-ascii?Q?WvMDM0kizDzq8dvvGwsIda37t5tdzPYnmAmphAy6w3I4zEOkI1uNO5yvD0IR?= =?us-ascii?Q?D6isb8P9XJZ/uvf8m4/qUQizYIgzn1372hRGNeeRxJ0vMqbE5A8vPg+OLwjF?= =?us-ascii?Q?29EWDPNS4szpQNppVtt7pEerd/LJxL/V3k/MZXQdn0ihHV3Q+1MfXUCHDixH?= =?us-ascii?Q?3vu+0OQD3xbiXh0VzFnSJoBfcfTXzeFG2nda2D44Llt5O7PPH5ddtRibieKi?= =?us-ascii?Q?RvawHqtLGqaOcpIzWfIBG3F55MdHua4PBEguXUpZ23CrDg15t5atIB1k+Vow?= =?us-ascii?Q?9jhC9inal+k1jTFpNe6qBcNw7Cyu14kgmw8uVh4X6N+rO3D690nXyWkTAimJ?= =?us-ascii?Q?4kpUDm826BWC3R3rQns4OvtqWu8+ef+6UGq9Bu8Hmgm/Hq0UrCT2KxEWqkrZ?= =?us-ascii?Q?cBUIY7+YLy7DxbH2By6k9S4sS+FikTUW8r34Bu/0aVki66SdC66yoqFpBHDS?= =?us-ascii?Q?LXJJgKL00LCf1T9kjJbjSzrmKiugDTOf9xrySOH5BsEpXPhNKTeWEMwoO6Lu?= =?us-ascii?Q?Q86lF4btdegfJN3qrOy8PRyOERfk/wzodFugjuMwFiIGaaDqHBEfQvcvnu4M?= =?us-ascii?Q?DrFN/8ja6ShPiqwjO4M948ZkL3+Zf7JGTTTTX68Hl4+wOpmgdFQ5T8nfH56E?= =?us-ascii?Q?TpttkMowkzuLCpGPU0TxV/lCvS6sB2iSLp4nyTtQL32MmKbK14Dl0TQ8iH53?= =?us-ascii?Q?siG8AYgUEFDl7baRqwXyGk0h7SPDCNfMGhgx05/SjlDOi2KR9rGYzz4MqM0+?= =?us-ascii?Q?9h19/dh0Ec9o+u/ZlMHs8UKd3CA+oopbY5+lz6I3ATQu5G0qIyydrGphr+KH?= =?us-ascii?Q?YFK+OFz+/yZxut5THHyjQC7SLxgUxcPkh1Ict/BvPbmXpwj9KZcO/XmmDRJD?= =?us-ascii?Q?KjLZXNv7vwp3avYFK2smasTlFGeSue3PTk/uIykO8lcFCfQ2kax05XFd+U0H?= =?us-ascii?Q?DN1vfOkRa/yRThh1PkhU2WY2rfHq6JK7QY4/TcOoHPmkA4p6MnbSO1Ns2oYP?= =?us-ascii?Q?22YFFN29TE+6abEboS0cG6N4ZPkDvNjUXLZDgPv3F+rGhyFyzjbrURto7eoK?= =?us-ascii?Q?Jc371Vzs0xBt3kgYrFJe2jiVRD2W6Mv352cUKTQPT14JgnqovV2xkVEUzlHn?= =?us-ascii?Q?HZMt/o6ulOBRyDvT+UxsO0ZOuAs9Vde9d9ZgPnMsL1ltSlooQrg+BNkjrK+e?= =?us-ascii?Q?p6bbE3ySVWQUAGfIedFCDZLcGWhd9nZ6atGt5J8jkQ44b8NUNC6jtjOx9I5h?= =?us-ascii?Q?YSaL+WjzzTrw0M/rhUtodWPoav7z8qSiPvH1xj1dCt0ws7FnH78y9kliWvUe?= =?us-ascii?Q?Qn6H7ZdZQltsqaad+DdAhq66h0L1Cy+hZgKoEFLfjlYcGtWxf2MZs6wVCaZZ?= =?us-ascii?Q?KJyStw=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)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: QtAlBIJdJU/0MDYTD7ZRpqd66XWKIUgHXD0dZRnJGopjUhb7/vgKSrBo16zyN5u+G4CsGUVEA2adOfbBTdLuIgbew19UifpP30Hm+wo5YqwKaaewRLZ1KNPhOx3AILZ5njy/8HUMt9Di08IYE65gqABJ8ohgQiDNo5i+cDFxNWHNxoqX7YkhOIbxE05oz6J8GZeLsQZKCHhcl037We8zjXvVT3ebFuVSOyrgPuXKOuj8MzsjtRUhZtqkoFZrDAA9mLDvncpKFhfskchqldB+pqEtubbccIZdQ50yGVEgXFcW0HW1oQ3bLSoxEt7w/T+ioD7UVJ11B1KZ+iGXO43ZqyiAO79RB2KN3vG/spcB7Bil/5kGXwRb2VpphKqW0OBTD87LUuGvGTMhNLgmr+BP+lnBI3EkJe1XfBIFyIaEx6eeskaiHRN0FP8USutsw5Qj X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:26:33.8087 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 735483d9-9614-4722-f304-08de6548ac73 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: BL6PEPF0002256F.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR12MB9663 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 - amdgpu_amdkfd_invalidate_userptr_batch(): wrapper for invalidate callback - amdgpu_amdkfd_hsa_batch_ops: MMU notifier ops structure Signed-off-by: Honglei Huang --- .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index 3b7fc6d15..af6db20de 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1143,6 +1143,63 @@ static bool mark_invalid_ranges(struct kgd_mem *mem, 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; + + if (!mark_invalid_ranges(mem, range->start, range->end)) { + pr_debug("Batch userptr: invalidation [0x%lx-0x%lx) does not affect any = range\n", + range->start, range->end); + return 0; + } + + mutex_lock(&process_info->notifier_lock); + mmu_interval_set_seq(mni, cur_seq); + + 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 Sun Feb 8 22:51:02 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010003.outbound.protection.outlook.com [52.101.85.3]) (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 2C4D6330322 for ; Fri, 6 Feb 2026 06:26:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359201; cv=fail; b=bKRevPpGfdgwFG8Fd8F6I5JNdK+vYFPkF60EQUrkdzCi59GwLq3d3dekynK+Y2wf0YvsKvgHqYeX9ptX7j2PyJWQLwA3xOl6BiFDb11txY3XQwET1IZAUgcmhWXsYswDnW5nFWExoRGev6/1ZoTDd9NmH69DqX6+VcDT57ZdH28= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359201; c=relaxed/simple; bh=NF2W3XsNO7U0YNoQ5Lj/iVbZQnO+Sj0eVYNt9ywDb0w=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RYIOrJ1+sUXuSbpU5hcE8urIEuitn/g/KLSkVsjpZN/oycgjFKiNtr12q13Cag7jN2fxNSIUiOLvIwd8DtuuKgMReUfB8n4L7w7lZ/SVA3MS3u91p0odRKUswpNw6/1Bm7IK3XcUJmNsZSPPzn+qGf0L5/VjopXYM+2Fg2dNjH8= 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=GNBY55Sr; arc=fail smtp.client-ip=52.101.85.3 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="GNBY55Sr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W2DUmIlGwf7uNp/q0ZwYLeBGU0gtoTQgd/AcT8/joR0ktffM1uUwrgp+SWMJanU02YmRTxLaTgwL/ULzErkWvRA5IT5510+W/xTsFy58URf/14Yr5Lwq1z9FnDMS+l8uh56qLWgkKiHBjIL1lcHf8oSSOp5rS5nmegGhOzIIzVisw3uSeuz6MC4HsHJF5LYt4NWg9vBtdJx3PqHYs8p7VfKzQbwAg8zvH5fwC1glRSidF7x7YIDy3uAtHfAmKDoOmkgIWD5H8XJWwRdDauCzFDNcZwnXRAjzp47sb5fjJekCd7SKFokODO2lWBE4nl9AVEUWPm8gykv0RkaLLyhF+A== 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=wzALAS1XYkf2lFaOnKhc6iRiArYlmarmcvNNz75KjJU=; b=Kaw20EDljgkbbjjDIU2MA77NAYiPSWLyELjNHloTFCjR2rZLthRxZZyeR6X7m/UuK5VZg77zZHYaaA4ILzLPpzrGMIAFz8nfg3hhOYJcOc5auoXX6oS22I2XTgXWFdmsLMNFpG5SVnXXz+he6clsqMFVVWFjcavVNgK94wHFPaFaTZ35TI2WCVN+5J2CJA1u2mcalWBxkUGi211ztyZzmsEM6aBxoigYzD1jVmrbUxGidtlzVnJ+nimhhiNZIe6xni4rD85bpzV5KoUZogyOCOt026qcyoDr62ULiZHWvPfYGW7C39dpke4hTnnqS3Uma33JXBH7NHP8epaFCGZBIQ== 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=wzALAS1XYkf2lFaOnKhc6iRiArYlmarmcvNNz75KjJU=; b=GNBY55SrIYiza2A02UsZBThZ08sb76jvsjyvdeNNAKyBwJGaSE5fTYe4sl2k/qJWRRHHSeovIBnisyfe07agzqWupIfg6MFO6ib4x9l/mcQPm8x17jaK0oByxUW+uF4eGfe9utgolchnivGnT7/d0BZTLnzV3pmZmmZk3hs4k64= Received: from BLAPR03CA0103.namprd03.prod.outlook.com (2603:10b6:208:32a::18) by MW4PR12MB6778.namprd12.prod.outlook.com (2603:10b6:303:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Fri, 6 Feb 2026 06:26:37 +0000 Received: from BL6PEPF00022571.namprd02.prod.outlook.com (2603:10b6:208:32a:cafe::64) by BLAPR03CA0103.outlook.office365.com (2603:10b6:208:32a::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Fri, 6 Feb 2026 06:26:33 +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 BL6PEPF00022571.mail.protection.outlook.com (10.167.249.39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Fri, 6 Feb 2026 06:26:37 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 6 Feb 2026 00:26:33 -0600 From: Honglei Huang To: , , , CC: , , , , , , , , , Subject: [PATCH v3 5/8] drm/amdkfd: Implement batch userptr page management Date: Fri, 6 Feb 2026 14:25:54 +0800 Message-ID: <20260206062557.3718801-6-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206062557.3718801-1-honglei1.huang@amd.com> References: <20260206062557.3718801-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: BL6PEPF00022571:EE_|MW4PR12MB6778:EE_ X-MS-Office365-Filtering-Correlation-Id: d863adf1-8187-4f2a-d29b-08de6548ae84 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wLCO4L9d08nlfx93L7ytZvvI+KT0vKhb2pQS6J/umA4BTsKr9m4JNkFfkg2u?= =?us-ascii?Q?z3iVN0e+UKl2fQeIIcLUwsfoIsiCziqHY5zmMm7H4cKLiL7KUegf5xH/bHWR?= =?us-ascii?Q?e+cniB2636ypwh7Eoo9OMdOh/3RLYxYFO+HJgAT9OTF7zOXfkXMg71nDANBx?= =?us-ascii?Q?6GBh83TJByocqh2Vozj66UZNvRsDRvMdtbeXUWPhSNkh7UsHeoAhtTbezsiq?= =?us-ascii?Q?TqWvxRnIVBHZp1ftR9lgKx472FPhACqAUK6G71bPe9otWmfQCiEKnD3NyfvK?= =?us-ascii?Q?zKfgNjb9zDtVha/9rFtbWgh49aBvYtrEa91sMYhBEqzbkDOURPknLWgOwF1A?= =?us-ascii?Q?o5sL9mzZprT1zt9jGJve8IlzhWO1rwEH2ah2Kl9gs4pc5jwHKIPTPcZjNECi?= =?us-ascii?Q?olMdaVt7TQ7S5GJ/VHvT0m1bzxJI57BRm/xA+4aXhr/dbymYAoC0WoX+hSLZ?= =?us-ascii?Q?7vplklppUNkRsWhQzR01SFOGv1UODpdHTGXe1dTaFsg5VRiYw2bTmPVY/FKC?= =?us-ascii?Q?4KFK3DjvvzNiKyvgsgexTy9Ewnht/Yc9/wWJxhQnrJT7SAeCwQQ79a8Abu/F?= =?us-ascii?Q?MYYdsjSlHwkfkEVaarIIqy/hj/Fc1LSa+k77dPlvWpCtAyVs/qYa94YUtelQ?= =?us-ascii?Q?PhSQK6tsXbaa3Kw4ARx1T4Kdzmf1d7OGotKxG/sNPqLCkBfNPuapkdoFNvbS?= =?us-ascii?Q?XRsXrOTyD5Fcmk4htaBQdXusTGrnxv8DGCwy+Z0jF06Xw607JCIWBb5ILWK/?= =?us-ascii?Q?YzYwGeB7Y8sc7G1bS2q06YvbRezwvKSgbe2u26ElXcaomVnXZSha1F39S0g3?= =?us-ascii?Q?Q9A+kWf62q7SkQ+DlBv5fFU/Fr3mz/mUc/kPb7MT8lW7IsdqJLA1GAFNXGDj?= =?us-ascii?Q?diNgm6klTNAeF+S5QYTS4InV53DGX4blcG+IYJn40pv/mUxDOXpMXzTBuX8R?= =?us-ascii?Q?SdRY4MMFAhAxXavqnANPLy7rKS/H76lWAWmLMzAkCXSNVXF9gIbZOsxYPyXG?= =?us-ascii?Q?lLaq6/dsiHg7r20NaLEAvZnd/HIHMY/X3nOqHhU7jTQ5/9kHm9DTKpDVxeRg?= =?us-ascii?Q?bzq9+lNPE7qVuQIcEuuAJ8SdMFDV5WcIbsxnAWkaKzZo1mC+whNisLtbPjWt?= =?us-ascii?Q?DWdSLe4vFGeJnMVvyt2AaUNi7RUsvC+JUTouDQ/eK7pDaFnFdJZgxKaGmm2k?= =?us-ascii?Q?TKP+ZF7WXyh6dtlhDWeBQsglmOEPtZcdNl70bFxzcc3/R6Wy+j/1LQemGrVi?= =?us-ascii?Q?4ODdS4dYupQqFd38dgSnJJd13xvU7axSAJbftuGpCNfOgiAMJ7H8Syac+Cf/?= =?us-ascii?Q?6cTIymHEGYIy9RW4qVCirbiMDAzM23K+bzIJWcgAzegeY4gBP3U7fh+D4eKi?= =?us-ascii?Q?Fz/vZZc3QY1Kkfu16E9I1o+d4DR64wS2fyIGSh5AxR/QiO+WgpzUJlqV1qth?= =?us-ascii?Q?RdB991g3q7QxuLAmYjLwoNo1w4FacvNZCH0ub158JecaBtRyJWFenPaHhtyZ?= =?us-ascii?Q?i0jwjZGKWsjBQsYBlsR5uh8Cwl4mh+DA/jr+G9qSIl7SKU6W2PeZ74D0Rubu?= =?us-ascii?Q?kJMQw9B9O/3cFyZWowbmX25V0v3Pc6OZwBzFgucLDuR1GAOX9E2MIZmz3V1R?= =?us-ascii?Q?EtMCcZ60iKccXmOmr/JdXiLfTZ9W8OU3Ad8zko5hrUuaxawqFtg1H+ujDp+X?= =?us-ascii?Q?Hb4lJQ=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)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ACe0VkGZRadvBPx9ClOgovBmRnrHFuG7YUrlW8eTujvI0n0hYXA/4ES7rTvr07/F/XoRs7TnsDxrToJC+dtV2hzGJnUdHOc//D2VsxcCPqMXjfMp2p+G6oTGGZPZ2/4Kf4neLU2nqp/Tta8osmdKBNyv3DmCuD6vtEdCX8jw4qkSbQIdZJb4juPJ2YavTP2SvwLWp8j0adPJ2cb4zWtaJpg0pF1J8aNgPZWY7kCQE2pfS9j82592x9/30g/cy96ek+QY7rsSqqdl2X0XEnK1a+c+0NJew5gHnV37cMvPct7Q+y+U1B4bPMxkP3DbEcEBw4aYD9dqGFO5vn8kNtISkhXAkebSMip/Rjqzgc9vXWYOacP+Hk4EaCWyXwQEPYnD3KH2p6nyIlCRyJ3lq5pewR7D4d3kVExzY1rdNh/F0A7zGewu1wk275sNZhBPrYAE X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:26:37.2732 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d863adf1-8187-4f2a-d29b-08de6548ae84 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: BL6PEPF00022571.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6778 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(): gets user pages for a single range within a batch allocation using HMM - 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 | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index af6db20de..7aca1868d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1200,6 +1200,60 @@ 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(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 =3D 0; + + *range_hmm =3D NULL; + + if (!mmget_not_zero(mm)) + return -ESRCH; + + mmap_read_lock(mm); + vma =3D vma_lookup(mm, range->start); + if (unlikely(!vma)) { + r =3D -EFAULT; + goto out_unlock; + } + + r =3D amdgpu_hmm_range_get_pages(&mem->batch_notifier, range->start, + range->size >> PAGE_SHIFT, readonly, + NULL, range_hmm); + +out_unlock: + mmap_read_unlock(mm); + mmput(mm); + 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 Sun Feb 8 22:51:02 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010028.outbound.protection.outlook.com [40.93.198.28]) (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 7C0302E5B09 for ; Fri, 6 Feb 2026 06:26:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359205; cv=fail; b=LlZopc1MkiVs261b8kbA0bQiIIn9VXUoZz5aGG/DsdiqSDqxVVnMat0WB1zmY9lmBS2WfU3iouTst4+7XYVPxnEXiJYMJz4/zX7O+VkFbCD6tlpus0nQREs5xreZyFtq2wI8kQnmIvU9CELBF5wb/1lWI+DQ8fJjPriWoxhr27Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359205; c=relaxed/simple; bh=PD2j+RKx/HwzRjbrpgWAgJYSb9seO/bHe6ONl7qHqQ0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tGe2C2mhgS80i62Sw2oamNnwUBYB7boHR4Yrm3WwwL4ZtAoeJOeHODE+29z7grrUjo1gux3uJ0DCjhqLBGO/Fv40xkxwWMtKZDza3Z9qvlMISaVJ72cUDxrfCXOh3tO9jfIQHS1KItXkRZjDM0sKzxifVM1VA0ATtnc7g8CetFk= 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=Maod+zg/; arc=fail smtp.client-ip=40.93.198.28 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="Maod+zg/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VWTpAaoPuUVTtAzoWNonFPBre5Jv21yzVRH0ska2WicBE8bI3s4KU59Yx4FRvBqbObynKbtHKlnMTDZ9DUQaFU7Xun8mKPaYGo9efIOdq+FnUbUGeChsoVs50y7jF84e0YBNludfEenMoYAhT1HBO5GDSE7RAUvWoQAdm+gi3zl7RWsKOaMIsCCk8xI/2RCDowb0mfYn5nNjE9Y2FJ/pG2RE6vazj1tLY9QEGPdzKUFnA4E7yASabfrTSvaBKhMYwL5yXyiGWtiX5oInd1g2LumfKD3SZm1qD2/zUFSSfNU+D2adVO585NDQZZtncuc7YYeP5xBR7oDQ4I5wv+tfNw== 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=jmg9i++VzxJmdqMmTmXcHQuMr+JO6cpSqx+3c2AtMRs=; b=G+39/YrAHeHuWcxb4U8IrmvEaiWBv95zOxcEsQI35NwqmH02UVmKwA+GxLdJ18/uh4vY6/cSxj2xxLl8EzsgRk0feZoKLtBT+4KEIY/v+/6jsMRJ8WAg4yMjYXp0+/H6a5lGN67Vhbj4uSOXEL76OynNt6QJdmyEeoUCGMNL4b9HIGDM5S3HxgevpzsPBJ17jwVop/C+vNhZWYxgVaeh3Y8Mjq1GlfmxpPLFjl0XpWNZ3/tURRk89+RYmQuHcw5VhfoKXdasc4/+0YOGL4vthCk72rwMgOiwPTZIkYcQ5PU+/8gU0Rv80Ew4oiQNKZ/wUrnKeLPhxqF1dXzGW1L4Eg== 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=jmg9i++VzxJmdqMmTmXcHQuMr+JO6cpSqx+3c2AtMRs=; b=Maod+zg/6ka0gwuvC4Au7dUGoZZDEBHybOD4Kf+fkBphLo9D5utaPBH1wzKyiCkN1idkf1k+WfrY9kHUnrE/37qDhzHO85TsGX/isxbo4hcYFSbILNRrBBSrXVA2szU5yUrjSxTJUSK0mYRPGTh75IVyFEdJ2NJIjZpAIoZxiGU= Received: from BL1P223CA0010.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:2c4::15) by BL1PR12MB5971.namprd12.prod.outlook.com (2603:10b6:208:39a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.10; Fri, 6 Feb 2026 06:26:40 +0000 Received: from BL6PEPF0002256F.namprd02.prod.outlook.com (2603:10b6:208:2c4:cafe::22) by BL1P223CA0010.outlook.office365.com (2603:10b6:208:2c4::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Fri, 6 Feb 2026 06:26:24 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL6PEPF0002256F.mail.protection.outlook.com (10.167.249.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Fri, 6 Feb 2026 06:26:40 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 6 Feb 2026 00:26:37 -0600 From: Honglei Huang To: , , , CC: , , , , , , , , , Subject: [PATCH v3 6/8] drm/amdkfd: Add batch allocation function and export API Date: Fri, 6 Feb 2026 14:25:55 +0800 Message-ID: <20260206062557.3718801-7-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206062557.3718801-1-honglei1.huang@amd.com> References: <20260206062557.3718801-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: BL6PEPF0002256F:EE_|BL1PR12MB5971:EE_ X-MS-Office365-Filtering-Correlation-Id: e5187281-d8b4-40f6-940c-08de6548b0ad X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700013|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?EAfvIfaxbhelI+h8Ox4GYGR2EJeKZ/lRbbXeo6K0tGYWc8T46dFBdm/jjFVY?= =?us-ascii?Q?watN1f4ZNyDkpQJSZbd1e2CAaz5C+dLuV2XmUC2e0E5RewCuQ4tMyRqlOjFT?= =?us-ascii?Q?PURUGVKF1bbuauH3bIz7KFdy60ssEAF+c9FlaTJdvZMlVYw/omQNR3taztf3?= =?us-ascii?Q?RHtRoXVza25nMS2C3DpSumwoDZrqmxvUItsuLr8a7NCXfbFPX5fS/fTxDD3J?= =?us-ascii?Q?Ol7DOksfrWmf7N09HoXub00met8zQC9Yb7/YZGb3+pnTLJNWFHG7T6AYhRuh?= =?us-ascii?Q?H1BsAGVxN5vUef2gkyIKPRhhlYo40ul8h5yfRFN25Eje7BL83PrZ+IO/Jr9Z?= =?us-ascii?Q?ZIi87yB92mFhn9HTfsSzA/7gCKNX+s6jrK3CfivZ966F79SQZrHkso+g9hKi?= =?us-ascii?Q?b2nNLQb71aF88WX8zYcsZT/3ocvf7/aiEcP2hXHDPFAsFKSydaEBop4mEWsw?= =?us-ascii?Q?VHmKCCJ4yEo7Eu52zo14CefvcW51QgBfOU2iV4qP1NMnLfdcpuzT54f6ybaQ?= =?us-ascii?Q?R2Uq4b+Okiv3tSsIiqRTnuiA5mgXw195SZJfThcjZTxp+9YjkG3+RVFfoJ1I?= =?us-ascii?Q?7js4CjDg4vGOqGJDV7BfvHZqHw98Uwe3DXBIAC1m8fB/wp7bxfC/CtQfly/E?= =?us-ascii?Q?IgqBGZletCgT5GrEGsPVut1Mu6A/39OdM/fqfY3m91uJ5U4pJi4Ozhy6Ifr4?= =?us-ascii?Q?ESL90jKZPN3SOxTY5uyktZI/OrM7eR6jSRbgJ6FzKXTq8k8dVw9FnGYoU0ie?= =?us-ascii?Q?FOIz8QEodtmn0UdZG7eRIBSKGXvUB5DrVDdjBO0AbXrmW81IWc3WqTvTYlcL?= =?us-ascii?Q?iLaVkOlOOvPTIvas27hyDjuGmezt46NznpaTsch5sI36HHsF/uiWgj9dnQMH?= =?us-ascii?Q?sCgb/6VQQ69mQ/3mUEfNpnMxz9WgPtVO4Dosw/NNmrq+0MuGHYrJ1z8EuW15?= =?us-ascii?Q?vbMVjaq4O4yvq3y1pRoZMtLiBbu0bfU0EnH1z3FqVZIShYMVA/EJInUznJw+?= =?us-ascii?Q?Xy80IG/bs+mq8pWwwSVKN2fV1sDJMS39GxF4RlMkfNooU8ai4mrKuHgrFu2P?= =?us-ascii?Q?do+o9TmAgEoAyuGhXpz8Azh5rhuhBJ4WfOoxRyILiQAjQtZspSIeJ0suzuMR?= =?us-ascii?Q?xWso7on+j547pbsbNxDYbLRYezFIhsFXxu2e3Us2fxX5jhpNLRbiOn7c+zhD?= =?us-ascii?Q?Km23P9J0EuOiwKW9nMXfna4Gl7w9eiHpqEgLdaWsYIV1rJZT6ZC/Kq7UGu8C?= =?us-ascii?Q?86eu1Lg+xhFH9He6rKhJih1ltcbytfig8Vp7JwqYsBUiMMNmu7zBmsLcDeDF?= =?us-ascii?Q?tXV+XFsktX6a4otpLQPWtBKPHZHQCycL8Ew4pz3u4VmJ9Zq387Y3lEnRnbCd?= =?us-ascii?Q?dZyf7lOsuh09FFvn8E3DBQ92qdvF8M3KJF2dolH9smvWMjZO0XWGrJZTRnaB?= =?us-ascii?Q?wRb7srN7XdP/g43f13XuPCgXUALVp1uliJTcF/sN6JlI1D9KzM0vzYz/syK2?= =?us-ascii?Q?6NCY19h3+i6pVaKVV+axj7tLMRGckqTP/hjJ5IARVzTwiBLU5p3vBnBXqQoA?= =?us-ascii?Q?xImW1x9aEk3sNUe69clJThIfLP3G5NUB1757onnf17E4oAY7mL0U4UQwaJ7G?= =?us-ascii?Q?MTG134yf6wLEO336Mf1cB9hNTohliPWyd0Hdvc67kvSHErAJNhpo1aM3rtNa?= =?us-ascii?Q?HyoX2w=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Y60fKEo7lHTgYEV1CCFlo3mqAMP/obu2wbHgiwJ1A6vNX856/HkURBeZUe0YLrKOFRjrdoT8BufwGmsKhsGBfl+AEBWUN32m/dNzGT+O4R5cNU0lS40f9S74EB7mUeWYvzfgi3BxoIOkGkw9SuL/j64vHoYOT0bjzNxnKddzR8c2QAuMbUL2qU7aaA98Ko5ZOfobWBHaxjqSZ0owZaH2abaMH9X2DPpWpeUYkT+PDT1mZN5FPERdkbvATQjx/pfDuU+GN4xAbj4hi0RzAjFkrLpQW2W6Cop+PhfUPm/tcw+3FlnlY15+TM/eG8IEVGqVqD49yYgG+5RrzzB0FF2G2PtmDigHpijHYfb6h0z3vgo1kbkSBfOTEgy74C8PP2ylXpdFKFAhjydZM+DaO8AJea5Ke6FcnvVaBv6s2qS+dCgpdN34+hrOBpq4IlHuec+z X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:26:40.8965 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e5187281-d8b4-40f6-940c-08de6548b0ad 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: BL6PEPF0002256F.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5971 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 | 264 ++++++++++++++++++ 1 file changed, 264 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index 7aca1868d..bc075f5f1 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1254,6 +1254,151 @@ 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; + + 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; + } + + for (i =3D 0; i < num_ranges; i++) { + ret =3D get_user_pages_batch( + 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); + goto err_unregister; + } + + mem->user_ranges[i].range =3D range; + } + + 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 @@ -2012,6 +2157,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 Sun Feb 8 22:51:02 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011040.outbound.protection.outlook.com [52.101.52.40]) (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 6B06C3043C8 for ; Fri, 6 Feb 2026 06:26:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359212; cv=fail; b=TFHz+/DmGAyvCIwTLmG9vxuTH+QJWqmI9IgpLpGtBcPuqVN93NL4e/7voB+fR/AGJj5VlhbCDdomDrm0dM7lPDafpJ5VkTy+Y75yuZXOauqUMDbZ7/b5F3vW6jAc2jabFhN0M2FR8EXALnyVBlvJSI8vu9OMmwlidWm+r6Z6+qk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359212; c=relaxed/simple; bh=tQhkzCXc1fv7GdwaAAoZkh3oO438wM3jzeEMDrRuDGY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GFixIAn6gpLMljY4QCYniSEh2fbyqi+vuHvGWwRU2XgAhCqVMfphLFNPwC/8q8t1SODAkE8J4GGH4jdw5zBgKjdNmeHEY7rmGrKfQU16xeQ4p4WxwZ9XFijFxwlQjptcD76MChzVE/PRx0yIUlaBLj3X2Jnr1Sj9wzS12Qzp5Wg= 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=QxeFea7m; arc=fail smtp.client-ip=52.101.52.40 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="QxeFea7m" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VscrMbsOI6e2Hc0yi3fJnmm8CUEaztco7po9BLbincQjIjHhT8uLRzi9pjbAGfDQTZa9i+du49cejhj3zk2QITQv6kV89MpLuH/2yEy73N3n2MOgTBb0UDWeZ8xE0orLPgCZJWPMP/guWpWGHMZYUTUbjllWIXZLRcL6oomTkr+0j/0IRlkDyX8AcynEFziMYX3WjG1wlMDScI6+96fVdFVsakXaiXjl7RP/yQrbDBra1e0o0DvKbdBptuuCKhM4lWp7MK0YxRcw4y2hwQp1QwRo/PUOZK+t0yv5N5BfzcfV0+hFrr91noQ9Oh9SCqNwlDpB7SzSNSW+AzD/NZK44g== 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=S3hJHpnfViHF1yf+goF0/Lb83b1vt3zrrOPqrembubQ=; b=vqrderwuTG6vRMkkj0GTHxkOMDZDLq8QURGK7c9e5UKepXIdsjBLkwuXrh631eKS67JvdagM9xl0AsjmZEisokAf4U+rx2T4YqvD0Fdks7lH+AVDObBOh9CJkEY3aHjSFNDAGKPpAxtO49V18ckg5Bn1JTwThKNMVT0GBKqf+33r8OcmU8KLWeZllirmrpYf9LXCcR/+/uKBZHe0GhxO4qbUCE2iwcpk2AgYcQryHlyKrltHqVdyPsYNGCNL0vM42GblRl+cpL8Fq0ssGHnIethbtwfdU6NMv8UdRp0kEMtEvkpX/I0Ju8u+Y5GZKJ+HpUbGDCkeuz1LujsWkbhKUg== 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=S3hJHpnfViHF1yf+goF0/Lb83b1vt3zrrOPqrembubQ=; b=QxeFea7mbvCX5zeZpTkLwRAHHRpp/G/cgBkr4VOLreN27rKO7Lmd3OTQudcCvyXBoanrKnY0p1oYxcu9v2NHM+RV1STdB1qmo1TB2ty433EqOUVCpYPpRR7RggYsiBiB4AveY2FFwv0NBfEWQhU+NgqRtx2NlQTmNiNKhU5NE/M= Received: from MN2PR19CA0017.namprd19.prod.outlook.com (2603:10b6:208:178::30) by PH7PR12MB8825.namprd12.prod.outlook.com (2603:10b6:510:26a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.14; Fri, 6 Feb 2026 06:26:44 +0000 Received: from BL6PEPF00022573.namprd02.prod.outlook.com (2603:10b6:208:178:cafe::e5) by MN2PR19CA0017.outlook.office365.com (2603:10b6:208:178::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Fri, 6 Feb 2026 06:26:47 +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 BL6PEPF00022573.mail.protection.outlook.com (10.167.249.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Fri, 6 Feb 2026 06:26:44 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 6 Feb 2026 00:26:40 -0600 From: Honglei Huang To: , , , CC: , , , , , , , , , Subject: [PATCH v3 7/8] drm/amdkfd: Unify userptr cleanup and update paths Date: Fri, 6 Feb 2026 14:25:56 +0800 Message-ID: <20260206062557.3718801-8-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206062557.3718801-1-honglei1.huang@amd.com> References: <20260206062557.3718801-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: BL6PEPF00022573:EE_|PH7PR12MB8825:EE_ X-MS-Office365-Filtering-Correlation-Id: 1a14b2e5-3d6e-49c0-3908-08de6548b2bc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?GuJroFy6F6j+HwLhWHMf70pU8LQ6cMgZj0U7C58ZBSfnDA2//mqnBC7a3dvL?= =?us-ascii?Q?o4FYtjKVP/rLcDROVTLRZSEp6n8GDmD1yHmmgomQKm7Mg+QaLixBNXPO/Q6I?= =?us-ascii?Q?D1n2f4MbmAMrt48hQCMCDs9RmUYcVjg311v0+Gc8BAZwu/n4RFoOuGNlvA8K?= =?us-ascii?Q?71QtDaLzqu4dA0RXAK/tINs8hLQwLghODIF2w+6ObNNhtq5QgAHB5/buhB3y?= =?us-ascii?Q?Eb4a5vaIITAYv+5XEthaKNAjCscWRHN7jFJiF67j+5wtPnljqoN6b8jI39Te?= =?us-ascii?Q?gkUrRKrdk9fkiqjLu5Z8Q3ttpZ624YDszhk9fgblz1ux/gunK3JOi10QPNLx?= =?us-ascii?Q?x6/yRwuaE32Km2gAvCLV3AtxqxfPkteHwRS+/bysMYFcCUzwBQcaevIi5DWS?= =?us-ascii?Q?+9Wa3A5XP/GVbyqAru0l60yNltl6q1hv6r9zYYdqSHCmZXWs9RU3k+8j0VZn?= =?us-ascii?Q?nWyLve/xq7PcH6MRDHSisK1QRgpgZ/Npz9kG+Tk1hvDzDBMKNYcPAl3hFHMj?= =?us-ascii?Q?OsqER/RSKnVHzqCmhD+nXSkqQ7UPlaUsOoqQf/Ds/t8+/CMtrHJqj6c0qOSV?= =?us-ascii?Q?sffZlaUcvtvGxR9y6MbY7XcoEi+MXMy3VoFPQVfZlGjirjJSLDUNckKizo2O?= =?us-ascii?Q?paiyLN/jb//lE7xTDrpkW6ez7nhs036dnaArQHhs6kat4U1N3wdZnBFfDk42?= =?us-ascii?Q?kDm+38Cgij6MhXoHUiom1G3h5phl1rUnohl5qHaV9PYjsEOJLGLpAT0ypYUq?= =?us-ascii?Q?Sps/kdHf+ku3UzcztZPnqSqfO+y2amtX3jNjvCj7GFokUx7wG5iqoxfN8Czn?= =?us-ascii?Q?WDqFY2rak5ArjaM2cevKHDOLhuqYdqpX4qLX3tPFcy4kCo4MCiObFQc2Hd/8?= =?us-ascii?Q?3Mntr26h2p0TmWTzb1mswlwrqdlM+fRgl8oecdJHn1ayIFjqv7OprXGvV3wv?= =?us-ascii?Q?IQ3dNjlX0PuKRvL3OegghMotA18KsrTKOzJCbapoY3YtNcnLOBufJCWAVrA4?= =?us-ascii?Q?mFQZWZMjNWAG1cscUdNSe4zALHXTkCI5ihrESEftTca9+ezeNMAFGj8g+QYX?= =?us-ascii?Q?T+1i48qMuEDCClrrOi3i0O7+qSgYxcJYmyy6rZ2Gbz/SwsIzk5cA3SpyQxUy?= =?us-ascii?Q?DroRYIC6wJfGpBUHbvc2J0ESowRQApxQyj5s0ajZ1r5mcmzdjVMaM4E9dDlk?= =?us-ascii?Q?Gunv+KXwtKhPcHJSnEYlXdemIotB40n7hTiQoztVhGygQihYPjQILV125/v/?= =?us-ascii?Q?4ZmpyaZdkfvQzZHJzlg733UQUv66BQX61Rk4EVBIMsm62Jdos5hPeBfM7+HT?= =?us-ascii?Q?3Gsgxy0/NmPdGO7eHCnrworvvWn1uH7cr1DF95bKKFzn4NDAcaErpfqINCR1?= =?us-ascii?Q?p41RTXFwtHoiZmqNHuIuuv0c10/rCmhzI61Znc8eGDRoESEFMFrYrlnqji02?= =?us-ascii?Q?cJfpUMC+pibqZ16OaIR0YQkXInUAKjNKXd/nXd+t5HqIEkXukZjPDtgn7Yh9?= =?us-ascii?Q?s0mKIG63NRihFRsE/YQWANwLKKLJkF6TVGwC0rr9VruXEh/1iUD4opKL19iF?= =?us-ascii?Q?99gKh/Wy+NY1T1EFC8+F/sBJEtxV7evHS9Dbr5+LIVtXMihZBmPz0uKllJJK?= =?us-ascii?Q?UdtHdibJEjEWpEsW8iwjrPip3NWpnz1cO5T6c+xOTUnp7gDSdQwfNDRYWHIx?= =?us-ascii?Q?9kxSvA=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)(376014)(82310400026);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PPj0p+3sOWHaWCurAMvKCOef6fjOrT4M4kjtPtdpkUGksPAELsjfy3+3AOJNOyHRdfBzcbJ4JeP6FYCVWDsw9hA+PnrKYCXGxaLiFes2i9YRpOS9nxh1uiTwqxi+UkpAjv99hKhPKoNYLy1LpYoVccN2WrjpAawjRzcRyfy68eDM8lc96WcfgZpLWN+/n0OFx6J7biidvkgjGoHLf7I2k2zPIwiDkNA3qieoob/5ako+mCoJftzgxoLXBx6j4HWJM+fvBZVt+3PmjCUQmz95sC9+RX+GBmMNfxxFo7AXde77cXCnNd7+jHodCsrwiWZrro3MY+nqvOc/DGQAbr2e0BsLUNpN6wnneLRyByQ94goaBBavxTYKQ7g4VjhUHTgG11qaY/RxnaqjJ+s8YdkopvCdpt2C4yispPhHiXM7pJ/W9onDO0HWvEpdjET0ssSc X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:26:44.3488 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1a14b2e5-3d6e-49c0-3908-08de6548b2bc 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: BL6PEPF00022573.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8825 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 | 143 +++++++++++++++--- 1 file changed, 126 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 bc075f5f1..bea365bdc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -2276,6 +2276,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) @@ -2317,12 +2346,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)) @@ -2909,6 +2933,44 @@ 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].invalid && 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; + + for (i =3D 0; i < mem->num_user_ranges; i++) { + if (!mem->user_ranges[i].invalid) + continue; + + ret =3D get_user_pages_batch( + 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; + } + } + + return ret; +} + /* Update invalid userptr BOs * * Moves invalidated (evicted) userptr BOs from userptr_valid_list to @@ -2946,8 +3008,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 @@ -2971,7 +3037,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 @@ -3005,7 +3075,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 @@ -3019,6 +3092,14 @@ 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; + + if (mem->num_user_ranges > 0 && mem->user_ranges) { + uint32_t i; + + for (i =3D 0; i < mem->num_user_ranges; i++) + mem->user_ranges[i].invalid =3D 0; + mem->invalid =3D 0; + } } =20 unlock_out: @@ -3126,6 +3207,29 @@ 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].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. @@ -3140,15 +3244,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 Sun Feb 8 22:51:02 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010013.outbound.protection.outlook.com [52.101.85.13]) (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 CDC0D2E5B09 for ; Fri, 6 Feb 2026 06:26:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359212; cv=fail; b=ga3pw+txcCXDGBHxGu0R9o5lhamxgkUGr9kPO0iRSy2Esg76Tp5gy/2wg6Z+Xp99Yi7FTWKHZCvL4ybx6bXT24HVPw6n3CAC+591oXckL6VNt4s5LnheREinPbizSeteY4QFe3xaozFy6wSN4frgae8cv5egfkz+nvPEbdgLw5w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770359212; c=relaxed/simple; bh=JMw5HtRkoTGebxZCMsiORfuFchaGfc8zcbIiyZ/ixm4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DqrYn2AUj1rzE2Ig2+b4hbbAwHldHGR4mT1lEImaVPKNMM9ivqsVt74fFNDKxCxpiERCUWEOoaGqpXtiAVNx5LKu6zlL/YTH0uyH3OTAlTyonxdhnPdV/zGPOud5aIf+kJVCqCKyN1waPCai2o2br12ERg2Y2K+fyq4q4D+GbAI= 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=EZ4B/QnD; arc=fail smtp.client-ip=52.101.85.13 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="EZ4B/QnD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IGD8826yedZP3G9U4dBJbsBRYp4IiwcJUMIpoNuEa9f3tYCGyvlmwwWSgv050KwcvZ16z+I4r9dj4Cnu6wbjgHBhhk5Wx87h1yMdyy3Rwv8KGPC88myXHtMp9djiXYfE5mSpkkxrdFldfniIoir9MrLRriycVtSALSZ0+dEUK3r5xeHYQKri3emZdX1UDZQHOzP0kIJL8yT6q1w6TDMxarLrTDJLcn+VirkRx3btO9rZk18hdvrlT5d0cJYWz4sn1SA68qV2H7jEBzkBnXdMCwDJkBsgPG8Z//Y0S4n8GMs/0WA/aXSLAZqbXbsYKZXkOeMY2dtOenjrOeY9HxmG8w== 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=FS29aNbAgI2QIWqSeAmAPu5j8XiH6GK2fI3iDeomUvSFep+SkHZUlHhHa4sRGtyWvpUh+leB0vnQUCag6XoADRa1EaqaGjdGjIK1cHL5eyiSERwrFJIXwYEHTR7oPbl8+IdJxuFih0B8iuVKIpAH451FuGPyXg1d4M1o6wn3QC8mbjCjOQGWLCvKuZTLHrpJr4CItVjk4zJky90KKs2YrcrGwnpI1Bg+eVlLfBO5JiVUIlqEg/TzEoP97blAVwXvybgyz9tdI3A7u0ppfl4AUg0FtNE2NOiRPjx2vktQUG07GTdSwD/Jb4+musnAdyTTotYX33wl+VkI2/f35HIHpQ== 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=EZ4B/QnDVZPRV5Y1OYBxRoymrGUa17oIY/WpAGL3xNqbyQmHznaDhd7k2iMbcwdef2voNgXD5QDMWoY5N3KmxGTREbCUJMQv3l8Qgq7YOQQeCUuWRPJ7+Bn/TCEj2T/bWgKVRJAvbaJbe7jlLiA6o+MCjTIPAhnZL5MzGpPPc2Y= Received: from MN0PR03CA0003.namprd03.prod.outlook.com (2603:10b6:208:52f::8) by BL1PR12MB5708.namprd12.prod.outlook.com (2603:10b6:208:387::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Fri, 6 Feb 2026 06:26:47 +0000 Received: from BL6PEPF0002256E.namprd02.prod.outlook.com (2603:10b6:208:52f:cafe::75) by MN0PR03CA0003.outlook.office365.com (2603:10b6:208:52f::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Fri, 6 Feb 2026 06:26:44 +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 BL6PEPF0002256E.mail.protection.outlook.com (10.167.249.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Fri, 6 Feb 2026 06:26:47 +0000 Received: from honglei-remote.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Fri, 6 Feb 2026 00:26:44 -0600 From: Honglei Huang To: , , , CC: , , , , , , , , , Subject: [PATCH v3 8/8] drm/amdkfd: Wire up batch allocation in ioctl handler Date: Fri, 6 Feb 2026 14:25:57 +0800 Message-ID: <20260206062557.3718801-9-honglei1.huang@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206062557.3718801-1-honglei1.huang@amd.com> References: <20260206062557.3718801-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: BL6PEPF0002256E:EE_|BL1PR12MB5708:EE_ X-MS-Office365-Filtering-Correlation-Id: 6d63158a-ba1e-48e1-d373-08de6548b4c7 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?a7MVteIVpH26UczuMPT2fcAHfF+lTgSbRT+EK1lj7J4Qj4SZDYn2Dii2GDtl?= =?us-ascii?Q?OG6hn54R+ncm/LuRdP4W9bh0JKVMfnk5o8wyvi2bhv9OSEage9VeWALZl4AQ?= =?us-ascii?Q?V4jW+fDGiAkyfjKamU0UXE8kSaGWatMeedXfqZHe6gyYgnVdFzHaq9U/wIxY?= =?us-ascii?Q?vnx5tHo35CVBidEQB/x8ku2g0YSHx7Cu6Hv1mHPSlFbgx4vmPN7jYwCJP30o?= =?us-ascii?Q?JTCYAIYrBce5/kkyQT4SOkuLV2uOIr/KeNo8DbzraiX2Db1EhMQl0jAMqqdF?= =?us-ascii?Q?y2mdo/wKQDEu5IOBkz8mNWzreF0tQRjmZDP66zdg2ead5uIsmDLDcUTMbCOI?= =?us-ascii?Q?T2f2L2UIC7okrwaHAWImLlMitDoKxj7Ukxs0LmLv+M6rx8S1wB/8M6+WtnxZ?= =?us-ascii?Q?piLiFFC6E425XA5iEEN1Cn2FWq5kchehX2FJi+IRmI1gZpDD2FpPDprO89fA?= =?us-ascii?Q?ELrPjeHTCArEN/dgEymgTQ7J1hee4WmtydO5C17qh6+B21Hlxr+zGoMbLHkO?= =?us-ascii?Q?mT9FKjffbjSAkt0S0o35f01LgMaoDohrw+kpcuVbpnP2mFIDj2hwc54c/+oN?= =?us-ascii?Q?UrbRQvqfrAiUhUFANkDb1kjrSovFQtKTdNSEBh56NBrXoeqAfY5m2FS5+myp?= =?us-ascii?Q?hEkr8+Svf/bW+bnKjIuaGHtDZZae8cBZp7djknar6r7/aqpSEcT5+V31fw0l?= =?us-ascii?Q?VLZYH0OBvoA0r91VMl/tWs6HhbPpzuFiai2/YSV57FXfnpOlQFeS5/ttXD/F?= =?us-ascii?Q?HahKgjF+sDpP+/PVK2VIC5iB0OThpsXaJrJQHOweN5c0UD8aE6X3dIoL+PPq?= =?us-ascii?Q?g52an0xbfC1erIKLrou2jaiwZA3peuhMy8+dachsBbECmeQbcX+aXmJApAkj?= =?us-ascii?Q?Kr4jPeMLVSiM5Jz1RTHUWPEYDXUIn6PtmZthKnn+H9u9cBRhp9+HkVT98OfJ?= =?us-ascii?Q?8BKZZt4le4E3aVmPW4XhtDc6Yi97BNVzZ/M4hJDrkICA5mdcZwx6pQVxBc3T?= =?us-ascii?Q?0HPWkkX9bRVzQSNse1fspa5AIjUiq+vhWJrIo0soEkhMmZX+dm6rU05SQw1V?= =?us-ascii?Q?H2QHbhTEjOKiQH6jEvVemRHygoxvgMJSiml5WwNE+fx0F1nqds8zy+480csG?= =?us-ascii?Q?SejR7L55aXORJbRC47NcXfU57xdBvY8xwDWeerhfmIzukHjm2uTsOaUc+3Rm?= =?us-ascii?Q?xPVAnME9ITfabuL9XMCn45f1p3uNqVaCWpsA9E6dd5EsAPSazcHF6jvPfFtg?= =?us-ascii?Q?5P5IIWEG3bCHKbMLUgZ5uNYx/vrvVjKBw/jAl4Qsv0MGmx5Oqst3GUPANyXw?= =?us-ascii?Q?lcGcIugbb+sIqNkypLsPtr528QNIz9gZ74ViB4dpdwb0amCoTviCXQYburN2?= =?us-ascii?Q?IjLFi2RkzqDzuPABVlM9UZfA/5R+zq07uFONiNo8AN+LCfzdsCyhEcDsz+tZ?= =?us-ascii?Q?MAMp4M40grwFt80w7sfungu+oG1wEzruP7xEOC3OB9o/ulB3HgOqQwLppkRj?= =?us-ascii?Q?RAmFI1H2PV6Oh2P4HQwff1XDXJldVtHqdCq2gBAlbtT+iuRtm+N9AJL6gNGd?= =?us-ascii?Q?hMUb9mSjU7YwoKYQkThgzoXweeTBSP3AUkJVFF3b8aSfEkgLOeUe3G5ScvWw?= =?us-ascii?Q?6mtLh6i1bdKhBPRZZsdQqNLbiQHLAdmWiIRKS7XMwmsm5Ns6In4GwD1H7YzQ?= =?us-ascii?Q?Od0dCw=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: /wlwgGgIODKgPF93/DkBO5txWHpsHvcfgQwlKuC6G3Ts99cIHiPUWVL0MnVNCJlagJFdBPbVIVz347ZMwRdd0VuKD7ZhyrKhSvFOyDR81v6ZoxwmWyGAE+YGUDdXTPzoJdjhIJKKZX6rOKoFgNtcQq2fmY3ShmTlEGwJH2yw2c4H2Ttb1/OsIPsbXnBg+aS5JzW0eWl4eTepFN0rdmSLIkywwdDbQtDDlL4U/6sWfsRLytgq4eyvphBnBlnmyrvOOcypeMc9at6aZGEdKfiTjdNYaLLleeeuBnBWP06nJo1L00FCVFgXfqqmhlXLXnNLt9F4KT15M1BzhC63ecbI1bJOWvG+s/ZMYDCYd/63cLTFpeeZu49GcmahahuIcAGgPRKpQDK76POvXKjzrDVas2diUcIKs01hjRDsIwKN7MtelFz+a0KCJHOFU+E5qhLk X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:26:47.7797 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6d63158a-ba1e-48e1-d373-08de6548b4c7 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: BL6PEPF0002256E.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5708 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