From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7792FCA5FB5 for ; Wed, 30 Sep 2026 06:13:34 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2729510F1D1; Wed, 30 Sep 2026 06:13:33 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="FR07XQtB"; dkim-atps=neutral Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011052.outbound.protection.outlook.com [52.101.62.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A85510F1A1; Wed, 30 Sep 2026 06:13:31 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W9JJsg4VHYgQXXqXDa1dAPu+ntVyD+6KOn4QUqOyInfFNSfetfG4nzNYuVpAWKoALwaU7s1hVfD1yDFV5Ryj4UsqYacAMwwx5ylxr1NNjaSQEVoFq4YlFrpyRgiZtdkTcoKFNl7TUMUSKaq2mjyfw4pxrTIWq6o1SHT1lxJm1xXJMcIPnHItWHRHCWR2S4ASVdoA4bRTTp+W1ATdDaazvbah2LmDxO3uBGTk1xQoRf/eTjkCRpe/vlUf5PeOcE6wy2EmKh+dCqtYCmqj77Xcs5YEg+XUx61xmx/rETzmCHXaR4/ZKfCX6P04MEkTL1mXrpCng2pq50KBKK/4GGcl9A== 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=tyOdL2ztYjiLbv4XpAs1XIqntpVyTLvQcW5y7mlF8kQ=; b=BnJvlvlMT9IPC/Pil8mx9k1UczviHJ90okjaMCRMpjLrYxJuCN4FvKvkPYnJhHbINm4JZ4aAyIfLz8g0aSfyg1ysh2j/fhENkBs2JkqMJl0n16WFvuOZcnSo2q0M7AmrnHILJQQJvpEGCnQL1Bg6Vo3s4NSN18PQKZC6yPoyldFhEhdn10qcFYv9OyF7XluQ/n6kEhvGBHQnYaApiQHnu0MP+qFvoJ5KQMvY2PNIYVGtMkx05+Q6aKBGYG3gzG9cYgxYzPctfT1F4zfkEFlur4/YXU7/xO9HBJMzts4CASlkP8dGuJkB82unJECB26lBaro8w8TaNB+6HDnr/bHG/A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none 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=tyOdL2ztYjiLbv4XpAs1XIqntpVyTLvQcW5y7mlF8kQ=; b=FR07XQtB0YNV5yaskZR1GWvsbCkqJVTRVs5fVLSksBb/bUsoGb6+X+sozxBsrEnc5o+0pwGVknLmU6f0cPylDlaXT/32880jf5oT3slG34aMunT7/RfVU+PhYx6qThWR/Ac96hXMBHZkdzL0HSUoimO3Y27FKMnwc8FKqfEpShQ= Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from DM4PR12MB5039.namprd12.prod.outlook.com (2603:10b6:5:38a::18) by CH1PR12MB9720.namprd12.prod.outlook.com (2603:10b6:610:2b2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.26; Wed, 30 Sep 2026 06:13:16 +0000 Received: from DM4PR12MB5039.namprd12.prod.outlook.com ([fe80::762:6408:ca99:701d]) by DM4PR12MB5039.namprd12.prod.outlook.com ([fe80::762:6408:ca99:701d%4]) with mapi id 15.21.0472.015; Wed, 30 Sep 2026 06:13:16 +0000 Message-ID: Date: Wed, 30 Sep 2026 11:43:08 +0530 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 1/2] gpu/buddy: fix missing split-undo on allocation-search exhaustion To: Matthew Auld , dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Cc: christian.koenig@amd.com, alexander.deucher@amd.com, Anand.Raghavendra@amd.com References: <20260929105407.484707-1-arunpravin.paneerselvam@amd.com> <978a409e-4ac9-407b-8c57-557965b30469@intel.com> Content-Language: en-US From: Arunpravin Paneer Selvam In-Reply-To: <978a409e-4ac9-407b-8c57-557965b30469@intel.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: MA5PR01CA0100.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:1d1::8) To DM4PR12MB5039.namprd12.prod.outlook.com (2603:10b6:5:38a::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5039:EE_|CH1PR12MB9720:EE_ X-MS-Office365-Filtering-Correlation-Id: 537913ec-b0d3-44ca-fc5e-08df1eb9ea50 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|1800799024|376014|366016|4143699003|10067099003|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: w+Id2o04Zsrq3mTViGdlYGV1+xN0TWKgadJUFj8y4fb28fIaB0MuaObkhbCwMEIjrXkOWjin5n8KosGDdFEUpJX1ITO2XTS6IT3O4paxH/iLdociA0EYqE+2XoDfipkpE9CJkhG+iNTO8lFV6zx7ZbUU8bG7pz5/15nv8KIo2oJSiSSddsvtcD4j6ambXW98s6fxge4wbihP5kK00+eQWoPb+cI1qJP3sIsTzapGcfeI6cjCMKRdOxbINpNzR9Gf1xLxwP38js78hRowAWTXMvNGJA/ZyoE3V9kPDw1Vr6XveOqXlhqaIziq5tx9E8t/+evtgNFUOIG1M3n4H3dbv3f6+OpinRTNwF9tTjl/9mzr5c2TE4IWhea4iYEc28qICMWhPOX1mYZxxCKURsLWSEPGs4xKlLFkPdoLQ/b+hA8EXy1BbwPq5WcN9lsyALjXXAXsfBXGyyzqo0hTFcfuG7xQtTDgCXS4EgoYlvp2smE8jIfGJLV2jUaJOlQZA02qthwp/KMbRzk1ebbfdgoe946RxxrBXLYzi9eHPkzBBlrvgffGpZC6BZBVKYz5HazD1yErdFj7E8xwrnWzsEUpHP+A6bCTjA3tSHZ1gfQ0WQJSxxL6K8Qk66CTYDEDwhhDI9ZUhVxvpHJclOm1AZw68kd6//VPNuPSDg2fp69OiLc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR12MB5039.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(1800799024)(376014)(366016)(4143699003)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dGswV25RTWRoWVREcVlvYUs4WnMyeDBJT0RLVkNpMzNqOFh0R01hZm5ONXlU?= =?utf-8?B?QXRtRGJxOXZjMjdEQzVZcURmSmtGV3dCYm1SWEEzMFRVVlNpV0QxeTFHZ0t6?= =?utf-8?B?WHk1aFU3NURndDY4ZTF2bm9PUkNRdEIzMExiZGk3Q2FDaTRzQ3NsNnZvWEgz?= =?utf-8?B?ZXpqWVdxRW1rMnkyNFNUckYyYStoMDlGVWdrTXpvMThDeGV1ZmNiMXJnQkxp?= =?utf-8?B?M2M1MVEwU3hIWCttUEMwNUdnaHNVUFhsSHBoWnpFdE9YeE14TTlTNVp2NmQ3?= =?utf-8?B?L2lnUkF3MCtwUUtDTGlLR0JGSC9STFkrUmRwTldKeTduVjU1OWZHdzFFQzlV?= =?utf-8?B?VTZOZnNEN2paelQxMkVKcGlBN3BqcFpGb3huR0l0UkcrKzllcC9KTEd4dVlE?= =?utf-8?B?UVRteGt2NUJkYXBjcG4vaDBSLzNQSnhHSmhibGR1N0xGU2RXSkljb3lmMDh0?= =?utf-8?B?SFpmNEF3bGNoVU5wbUlQQVphYlNXdmpsK1EvdGd2VEl3eFN5Q1lHV3BaZTNH?= =?utf-8?B?NGlSanJqbTRmdkRJNHUvS0s5N2F0YlFQbFBnWlZmNVV3Rk9LeTdqMlg4azYx?= =?utf-8?B?cWk2U0xRRmNpNHRvTjJ0R2I0UXZPejdscElRUlo4L01mQytBbmwwcENQU2dl?= =?utf-8?B?cjZ0VDgrdmEzWlN1TWhhcWdwUm95ZFM0SkZYZ1ZUTHJRWHQrNkQvWmxyNE1V?= =?utf-8?B?S2Q5ZUJld3lWeWpRQTNRMU1ya2FPYkVIVktmTnUySy9wejZpVzQ1V0c1dFNP?= =?utf-8?B?clBTcGtYeVNvRnZ2dFdaN1VNTVUxQW1EQWtwMU1BNCtvYmZWRlMwODJ1cGxG?= =?utf-8?B?QS9nQ1lZQ3N1b0dXa0Jlb09zancwc1ZZRnVCdGtYbFF4blNjUjArRDBzZ1RO?= =?utf-8?B?eTB0eXhSTERYcWQySzZudTZ1a1N3S2hJdzRqOGxxOUFRMmVpc0ZDd1Ivekl1?= =?utf-8?B?MWFKL3J4NklPeWdtQ0hCVWwwNjN6OUFyc0RSODYrZXE2c1dxOW9mUGVrOHJX?= =?utf-8?B?WGdHSWtFNjZjMmVwcFN0UjFwWERiWGNzTEFZazhMaUlhYUlMdU1DZnlwZUZ3?= =?utf-8?B?d0lmeURnNkNCNERHQXMvOUV4SjQwd3JSdWpGOC9QaFJvT3l6VGlkSGluNEJ1?= =?utf-8?B?OXNMUjBCMTZHOUpvM1F2SjVLbUVwaWp1bHBhTTUxalpFdlRVaTgwSXMvNTJB?= =?utf-8?B?T01NN3NCTk15QUhCdytzZTJobXJyZGI1b2JiOUlLcUw5cmxUVEM5ZXRTQSsw?= =?utf-8?B?UGNyTHNDMURKWkVqNXdpWVp1LzB4ZHpZS0JTZUVVN0NtU1VjSyttbHQ4TGt5?= =?utf-8?B?WlZzd2NNYS8xakQ2angrVXdZRnZCUSsvOVk0SE93MUJYd0pPTUFabkxnOGJx?= =?utf-8?B?N0VjazhYclhHeEt6aDhDODdDS29HdStyejRnWmZ3VG1ubmxENm93ME5UOEJK?= =?utf-8?B?SWpPeGN2d0Zhby9QakJpL05WUTZLZXE0bGJPVVNWSE50VkltRlBNekp6bDJh?= =?utf-8?B?c25TdVdmQzJnNk1BK3lXNllQZUFQcEtpUkt4Y0R2OStRQzVweUdxMHl3Rk5n?= =?utf-8?B?d1VRWFJIVEVHRFhzaVR6Qkp1Y1RFZ1ZzdXhWem5lQzNyNzlKeDEyWm01TWh3?= =?utf-8?B?bGkySEk4M2Z4SEhzMU5pYi9kVlpzejdNb0NYL3JhNkRRVGk0Znd0b01neCtT?= =?utf-8?B?c1owNndIYXIraU5hSjRrOWFIdmRFS3lvc2g2d3pJN0NQVzlRdjVyNS8ybGVD?= =?utf-8?B?cnMreXI3eGhhd2d3ODRZMFZickQrcVVYTjlVdk5WT1BVNkV6TTNJaFNXVWRm?= =?utf-8?B?OWtHNXJJckYwcUluRFFzNnJ5d3g0R1VvMllmV3IwNkQzeWE3c0QvbHh5SXJH?= =?utf-8?B?bGo2dUtRMjJIMkRwYWZ5OXdNejlJeWVaMDZrUkdiaFZmb0dzWWJCL3NDUkJH?= =?utf-8?B?TjZjWjJITTJsZktUVjkwNWZ2Z09NMG5WSnRneHRIMFJ2dDI1L2tyclo1Z1VB?= =?utf-8?B?ZkJWblhPQWpxSmQ0cHArWEljRVpZcU9sYmlRVkZFaXQwV2E5RkpTejhvSHFv?= =?utf-8?B?cHN4MU03dks5bG5QQzRYNWNIOFU4ejNER2RWVEdRYWtkb3RrSk9qbTJNZm1m?= =?utf-8?B?alZ5RE5vTGxQWDMveWpWU1lPei9EUEtiZDU2NkZkZkk0S3hNSW9Kbm41WnVl?= =?utf-8?B?VHhiUGFWRmM0QXdjMVhjS2kyMG85cXl5QVN1WitNSFMyci9jZTZtZUZvVFAr?= =?utf-8?B?ZHhYbUkyUlJTR1VaWFVmT1ZWMGFCZWZaRVRPUHZIRE9mL0EvbHovSUZTZS80?= =?utf-8?B?RUtDbHphdVZFcDVPekpJYSt3ZmZ1UTQxMWpOVHJnVU9OYTRSd1lDdz09?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 537913ec-b0d3-44ca-fc5e-08df1eb9ea50 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5039.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2026 06:13:16.2488 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ALWrm0mT4MTYT+WP0vY/zlF+6A3rv8mfzpJECIg6/rIF1zik3coJWi8i2pUQzsm6juMMMtJnuawJnIscb0J24Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9720 X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" On 9/29/2026 5:15 PM, Matthew Auld wrote: > On 29/09/2026 11:54, Arunpravin Paneer Selvam wrote: >> From: Arunpravin Paneer Selvam >> >> __alloc_range_bias() only undid splits made during its search when >> split_block() itself failed. Its DFS-exhaustion failure path (-ENOSPC, >> when no suitable block is found) skipped the undo, leaving the buddy >> tree needlessly fragmented over repeated failed allocation attempts. >> >> Fix by recording every successful split_block() call in a list and >> unconditionally undoing those splits on every failure exit, via a >> new single-level gpu_buddy_merge_one_level() helper (the original >> __gpu_buddy_undo_splits() cascaded merges upward, which is unsafe >> when called per split-list entry). >> >> Resolves the igt@kms_plane@plane-panning-bottom-right@pipe-a/pipe-b >> regression. >> >> v2: >>   - Drop the undo from __alloc_range(): it allocates every block it >> walks, >>     so freeing that list on failure already merges the splits. (Matthew) >> >> Fixes: 1ad5e807f716 ("gpu/buddy: replace dual-tree/force_merge with >> decoupled dirty tracker") >> Assisted-by: Claude:claude-opus-4-8 >> Cc: Matthew Auld >> Cc: Christian König >> Signed-off-by: Arunpravin Paneer Selvam >> >> --- >>   drivers/gpu/buddy.c | 54 +++++++++++++++++++++++++++++++++++++++++++-- >>   1 file changed, 52 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/gpu/buddy.c b/drivers/gpu/buddy.c >> index 2f2aaadafe35..e5c9e21cd077 100644 >> --- a/drivers/gpu/buddy.c >> +++ b/drivers/gpu/buddy.c >> @@ -1240,6 +1240,52 @@ static void __gpu_buddy_undo_splits(struct >> gpu_buddy *mm, >>       } >>   } >>   +static void gpu_buddy_merge_one_level(struct gpu_buddy *mm, >> +                      struct gpu_buddy_block *block) >> +{ >> +    struct gpu_buddy_block *buddy = __get_buddy(block); >> +    struct gpu_buddy_block *parent = block->parent; >> +    enum gpu_block_state block_state; >> + >> +    if (!buddy || !gpu_buddy_block_is_free(block) || >> +        !gpu_buddy_block_is_free(buddy)) >> +        return; >> + >> +    block_state = gpu_block_cached_state(block); >> +    if (gpu_block_cached_state(buddy) != block_state) >> +        block_state = GPU_BLOCK_MIXED; >> + >> +    rbtree_remove(mm, block); >> +    rbtree_remove(mm, buddy); >> +    mm->free_scoreboard[gpu_buddy_block_order(block)] -= 2; >> + >> +    gpu_block_free(mm, block); >> +    gpu_block_free(mm, buddy); >> + >> +    __mark_free(mm, parent, block_state); >> +} >> + >> +static void gpu_buddy_undo_splits(struct gpu_buddy *mm, >> +                  struct gpu_buddy_block *block, >> +                  struct list_head *splits) >> +{ >> +    if (block) >> +        gpu_buddy_merge_one_level(mm, block); >> + >> +    while (!list_empty(splits)) { >> +        struct gpu_buddy_block *parent = >> +            list_first_entry(splits, struct gpu_buddy_block, >> +                     tmp_link); >> + >> +        list_del(&parent->tmp_link); >> + >> +        if (!gpu_buddy_block_is_split(parent)) >> +            continue; >> + >> +        gpu_buddy_merge_one_level(mm, parent->left); >> +    } >> +} >> + >>   static struct gpu_buddy_block * >>   __alloc_range_bias(struct gpu_buddy *mm, >>              u64 start, u64 end, >> @@ -1249,6 +1295,7 @@ __alloc_range_bias(struct gpu_buddy *mm, >>       u64 req_size = mm->chunk_size << order; >>       struct gpu_buddy_block *block; >>       LIST_HEAD(dfs); >> +    LIST_HEAD(splits); >>       int err; >>       int i; >>   @@ -1313,6 +1360,8 @@ __alloc_range_bias(struct gpu_buddy *mm, >>               err = split_block(mm, block); >>               if (unlikely(err)) >>                   goto err_undo; >> + >> +            list_add(&block->tmp_link, &splits); > > Looking at this now, I also don't see any issue here? If we got here: > > 1. block_order >= order. > 2. adjust_end/start is aligned to order and fits within block. > > Given that there must be something in here that will eventually hit > block_order == order, given some number of splits, so either split > fails or we must hit the 'return block'? > Good catch. The DAL CI test (igt@kms_plane@plane-panning-bottom-right) was failing before my changes and started passing once I applied both patches together, so I wrongly attributed the fix to the split-undo patch. I have now re-tested with only "gpu/buddy: add range-restricted contiguous allocation fallback" applied - the split-undo patch dropped entirely and the CI test still passes. So the fallback patch is the actual fix. I will drop the split-undo patch and move the Fixes:/Resolves: tags onto it in the next revision. Thanks, Arun. > >>           } >>             /* >> @@ -1349,7 +1398,7 @@ __alloc_range_bias(struct gpu_buddy *mm, >>           } >>       } while (1); >>   -    return ERR_PTR(-ENOSPC); >> +    err = -ENOSPC; >>     err_undo: >>       /* >> @@ -1357,7 +1406,8 @@ __alloc_range_bias(struct gpu_buddy *mm, >>        * bigger is better, so make sure we merge everything back >> before we >>        * free the allocated blocks. >>        */ >> -    __gpu_buddy_undo_splits(mm, block); >> +    gpu_buddy_undo_splits(mm, block, &splits); >> + >>       return ERR_PTR(err); >>   } >> >> base-commit: 90780f2c3d30187116128f71bcf92c8ab63400e7 >