From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 0BA3C31F98D for ; Sat, 13 Jun 2026 17:20:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781371253; cv=none; b=Yz7VYmcOwSKs4emV3UmDmF7hMnXnKjnKf6ZCDNBHigw46K+W4VRnrX17opETZCkCyg5iEZPwIazEDqYhf1TkScrhU5jgUv7t3hCyfC/mpP+wz3IQnOszwdk5Z5Du1b+iV2c60B5QtA+1pbBnFyb/zjGGvNd6hdlb8PoBh+MgzX4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781371253; c=relaxed/simple; bh=d7Rh9moU4PlywobCCQlby0ESibig6WBPrZyoRaflKyI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Kh5QNq21iq0NI2hZeCk0rvjWSbt00IRCvF/ndxQQiTgCdIBUMeyz4UCCaofV+WAuADvCDa8M1HvWmn4LTZtCFkIaZYLi22tRxB9iEFpufqBLg9mUr64gG7B+3yjvHsH90L+kTHsi4Pmu6MT6z2CZMLEQV2syHhSvgpPzCXwOOwk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=NuwBzWrd; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Z0fqC8qZ; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="NuwBzWrd"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Z0fqC8qZ" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 65DFJlWE1257480 for ; Sat, 13 Jun 2026 17:20:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= uCURNgSWRUFOFyKhAq/7V/tz5RhnVVGkvQX7hSUp9RM=; b=NuwBzWrduzG3GLBq c8tAxU2Tazzqv1lB3qZ0HY3ukFxGsv/eZzNdJ18GIUa3G+vt07gawMkvTjrvhRqQ 81HsEUN7s/czX+/NmBrXJA1qEmOFpZek4W+JEXbnJa/2pPaxm3AM0Wi8zD2Bl8bl CmOAiW2vKS4On9F8Gz8TrR7M0If9GJNpl9X4FuW0tNQoHDc6MBcdosyKh6YIXP4l QuDUSwsk6oI8um57xKx1uOnkkB5o4mz82/NlhR99bqPhrm8N/3DlA2P/DRDQqws/ AvsXoC/t62X6vROQe32UD0MM8irOYiSdX2IZTLtF+KwRl84Wal9wr+sarGMZgtCk Vee3Jw== Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eryffhksm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 13 Jun 2026 17:20:50 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-8423f3e4728so1361952b3a.2 for ; Sat, 13 Jun 2026 10:20:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1781371250; x=1781976050; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=uCURNgSWRUFOFyKhAq/7V/tz5RhnVVGkvQX7hSUp9RM=; b=Z0fqC8qZPw7LzK121KVJtagfXBQdiVR5zATqT4LDcboM0jCcFUrokPbD4+AsUtcozB ZgKZTvFkHs06RkbNiMT/fsqhU3PKwnL7njr8MmMA0tZTvTMlXmRgMJ++CsUvm9WUMU2A tNJ+JbS1/z+1AU3SsvQ9KnCYN2zt8kQq1JTCVJ5JIrfz8vIR6FpbgY2cTAusCdLIwGm6 3N6fV5AyDVPIDZsoYq8weIAvS6S5oruazuG1hGzGslNaCFOeSlcVOICc1rKAViQP8ng/ oyLs5tR3kCkTbFNLAC0+WYdh4m9ESiXh63N8eV8uQrHik/ncCeYsc2zk4kiL4LADwEWU 3bWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781371250; x=1781976050; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=uCURNgSWRUFOFyKhAq/7V/tz5RhnVVGkvQX7hSUp9RM=; b=a/nM6kivQz3Nk9iL9pXcd0ErXrHPFHppJhaEBj9XlGblMuC79Zv4J/IYK99avMrRTC wGH6LFSxr9601rXam+ubLFnhXKW7HHCGs5r073io57czm90FOkCvFM7VhpCge0YG0pQE M31xNvYmLvAgQ1BVgTi3v8NwxjzFqlbEIOqxSUUsrlT1GpkY56A7evM2x/XfJV0LYTG9 11cDEXWqF1caSYYzmBzP0PqGXnK24rTCSilmEYpytdQHgxl3KEwVlMOTN+wc1/DgPFIm v8IgDHKQujIM15Bv++8KYUllYdxwtXcE10T6fGTMk0LAzu/i3TfSEOplcKtiDgoxb0td JLmA== X-Forwarded-Encrypted: i=1; AFNElJ/0Dyt5B16vzYQ+tyUlmxgCuiY0U438Cy7kAhiqlVKIBq71fKzuotE3rQX1zxjOOZJPS6N5cp4bFxanO3Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yyla0/jOJ1CSacmXybu1oLDd+0BbX1HN3KoI97M5O4qptmtji6r ePnV5Gr/4CJy6FpZNaw92mqjVK2Nc7uMu3u/69R8cfl7A3FUYDnCVWmV0NRMQ1qJGokZoHx5Kyt I11Nozbg8vpxDcs8/K+XU3bwCPrgjvfvgYLm3AdAR7sJSglYSQ2JOjFW3Ko3lBLgSsMw= X-Gm-Gg: Acq92OEchzVqEYzmFP6fp2zA3Z5nxN+WBUZXkESnkCYE1jJgnfS7K0JkFpqbXLV8Jqx +y99cxCatliKGCYvouAIi0c7BirKy5YHxZcEOf/1jjK2ZRf/cdr+0/fR5lUkJVfPweGLYtu0AAs YWckzHEKzWnY2CnL4dXWFpdAhK+VmQYkMVDdxmOdi+kBwCdDZWr3hpOC83EIpyye1fyIg08wsKi 7zx5zdb+FL0VO9vIr214s61caBYFFitdIMDeH1aL2auGAN9fiWxc1IjW4aK+z55jIUqrZdcMXOF ABPGD4oaUE/Y+2dzPE3F84SW6SR9oM5FEQaQ1uIgybpi6KcK7DkYtUwAID3CUbK6c4Xg/9VRtWI vVgujqqseiTZrk+DOFNC0E3oEWGrB8mDUZXHyb6qm2lteLKFZ3/FJtQ== X-Received: by 2002:a05:6a00:ad04:b0:842:6594:de with SMTP id d2e1a72fcca58-8434cd4558cmr8150274b3a.15.1781371249355; Sat, 13 Jun 2026 10:20:49 -0700 (PDT) X-Received: by 2002:a05:6a00:ad04:b0:842:6594:de with SMTP id d2e1a72fcca58-8434cd4558cmr8150235b3a.15.1781371248892; Sat, 13 Jun 2026 10:20:48 -0700 (PDT) Received: from hu-pranarya-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8434accbec5sm5390913b3a.16.2026.06.13.10.20.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2026 10:20:48 -0700 (PDT) From: Pranjal Arya Date: Sat, 13 Jun 2026 22:49:45 +0530 Subject: [PATCH RFC 03/12] mm/vmalloc: convert free, purge, and pcpu paths to maple_tree Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260613-vmalloc_maple-v1-3-0aa740bb944b@oss.qualcomm.com> References: <20260613-vmalloc_maple-v1-0-0aa740bb944b@oss.qualcomm.com> In-Reply-To: <20260613-vmalloc_maple-v1-0-0aa740bb944b@oss.qualcomm.com> To: Andrew Morton , Uladzislau Rezki , "Liam R. Howlett" , Alice Ryhl , Andrew Ballance Cc: linux-arm-msm@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, maple-tree@lists.infradead.org, Lorenzo Stoakes , Pranjal Shrivastava , Will Deacon , Suzuki K Poulose , Neil Armstrong , Mostafa Saleh , Balbir Singh , Suren Baghdasaryan , Marco Elver , Dmitry Vyukov , Alexander Potapenko , Shuah Khan , Dev Jain , Brendan Jackman , Puranjay Mohan , Santosh Shukla , Wyes Karny , Pranjal Arya , Sudeep Holla X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781371215; l=8254; i=pranjal.arya@oss.qualcomm.com; s=20260516; h=from:subject:message-id; bh=d7Rh9moU4PlywobCCQlby0ESibig6WBPrZyoRaflKyI=; b=i4ZVjEUEpATUFw1AesbsDlvUbQAz4biJWSgx2WlatBpp99/Fh4zL92ovokQ6YvX3lYIEirA4W qeSCLC8FcQJCFfFoCZXnrUVBMNf37s3X1mpNxtFxc/JVLzamPLd3Rr/ X-Developer-Key: i=pranjal.arya@oss.qualcomm.com; a=ed25519; pk=ymtcTlccEIDsi3ErhpjIoZZHKdPBYWGWW0Lchs5MsbE= X-Authority-Analysis: v=2.4 cv=HuxG3UTS c=1 sm=1 tr=0 ts=6a2d9172 cx=c_pps a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=r6JOZ6DJY9FYdPoncJEA:9 a=QEXdDO2ut3YA:10 a=2VI0MkxyNR6bbpdq8BZq:22 X-Proofpoint-ORIG-GUID: 5AkQwnS9eocJ9pxRO1CiPOqwGZliZS5t X-Proofpoint-Spam-Info: AW1haW4tMjYwNjEzMDE4MCBTYWx0ZWRfXyEdku/RbeDmy M0tdZ+GlAfcGOIVtNHvFw2zNCZb/9ZozWfvoXcaYUR6fLVNIWVHpMaCPfPkU0vEvfcs2r1Ry2ip nIREO+gnHWrQLTO92LsFayFimXDoIro= X-Proofpoint-GUID: 5AkQwnS9eocJ9pxRO1CiPOqwGZliZS5t X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNjEzMDE4MCBTYWx0ZWRfX8ZcK8Hu4lX6p OXwJ0wHVXQXW9GvOwD9lTOKzaCFDkKMy8YzJBYr9CeIAOzIBQjEgdS6COT8WYJe5f3rVw9qrWpE EYWDU0krICF3rlK3VJAXu8iW/RFJCd/WllMu+sdCvcVec91gpnihoeHC/RxBX2WfEOjG8JQZPqv pCkl+gB6qbgrx6hXkX1Hil+6E7m0EvIy4YZEEN+E8KHZpiOprjDyl04neDCn5iXTqJoTseIOyVw KWswFl7bYzXA6WECHooBGSkZDnltCmqpce20Y7eanOUTGOvp8yK5QexLkm2DODwjMlzA00Bh9yR GA4MfUPut8mhkM65RI65BqF2dS7Z8MNOEcUM6ifegBL5ZgVov3icBTvJitkOOnyrPXvqTnku1Bg WEAcLHCO1A/BN6Ak/ThN6qsbv4kx0DZRt8t+ysZtA+vIAL3Ew3+n9ORrZPVNLWa9ZIvCKbV9+Rl /0TmQt1tqXN4rzw3BUw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-13_03,2026-06-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 bulkscore=0 adultscore=0 impostorscore=0 priorityscore=1501 phishscore=0 clxscore=1011 spamscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606040000 definitions=main-2606130180 Move free_vmap_area_noflush, the lazy-purge processing (__purge_vmap_area_lazy, purge_vmap_node, decay_va_pool_node, kasan_release_vmalloc_node), and pcpu_get_vm_areas onto the maple_tree helpers. Per-node busy lookup (find_vmap_area, find_unlink_vmap_area, find_vmap_area_exceed_addr_lock) and the vmap_block free path likewise shift to vn->busy.mt. pcpu_get_vm_areas keeps its top-down free-area walk; the new free_vmap_area_prev() helper returns the previous free-area neighbour via the address-sorted list, while enclose-address queries (pvm_find_va_enclose_addr) move onto the maple_tree where supported. After this patch, the augmented rb_tree is no longer consulted on the allocation or free path. The address-sorted free_vmap_area_list is still walked on the alloc path's list-based next-fit scan and on neighbour traversal in pcpu_get_vm_areas. Signed-off-by: Pranjal Arya --- mm/vmalloc.c | 78 +++++++++++++++++++++++++++++------------------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index c5f509f033e6..f2117eafa9cf 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2240,14 +2240,14 @@ static void free_vmap_area(struct vmap_area *va) * Remove from the busy tree/list. */ spin_lock(&vn->busy.lock); - unlink_va(va, &vn->busy.root); + unlink_vmap_area_busy_locked(va, vn); spin_unlock(&vn->busy.lock); /* * Insert/Merge it back to the free tree/list. */ spin_lock(&free_vmap_area_lock); - merge_or_add_vmap_area_augment(va, &free_vmap_area_root, &free_vmap_area_list); + merge_or_add_vmap_area_free_locked(va); spin_unlock(&free_vmap_area_lock); } @@ -2431,12 +2431,13 @@ static struct vmap_area *alloc_vmap_area(unsigned long size, * Only scan the relevant parts containing pointers to other objects * to avoid false negatives. */ - kmemleak_scan_area(&va->rb_node, SIZE_MAX, gfp_mask); + kmemleak_scan_area(&va->vm, SIZE_MAX, gfp_mask); } retry: if (IS_ERR_VALUE(addr)) { preload_this_cpu_lock(&free_vmap_area_lock, gfp_mask, node); + try_init_free_mt_locked(); addr = __alloc_vmap_area(size, align, vstart, vend); spin_unlock(&free_vmap_area_lock); @@ -2479,7 +2480,7 @@ static struct vmap_area *alloc_vmap_area(unsigned long size, vn = addr_to_node(va->va_start); spin_lock(&vn->busy.lock); - insert_vmap_area(va, &vn->busy.root, &vn->busy.head); + insert_vmap_area_busy_locked(va, vn); spin_unlock(&vn->busy.lock); BUG_ON(!IS_ALIGNED(va->va_start, align)); @@ -2575,8 +2576,7 @@ reclaim_list_global(struct list_head *head) spin_lock(&free_vmap_area_lock); list_for_each_entry_safe(va, n, head, list) - merge_or_add_vmap_area_augment(va, - &free_vmap_area_root, &free_vmap_area_list); + merge_or_add_vmap_area_free_locked(va); spin_unlock(&free_vmap_area_lock); } @@ -2719,12 +2719,13 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end, vn->skip_populate = full_pool_decay; decay_va_pool_node(vn, full_pool_decay); - if (RB_EMPTY_ROOT(&vn->lazy.root)) + spin_lock(&vn->lazy.lock); + if (lazy_vmap_areas_empty_locked(vn)) { + spin_unlock(&vn->lazy.lock); continue; + } - spin_lock(&vn->lazy.lock); - WRITE_ONCE(vn->lazy.root.rb_node, NULL); - list_replace_init(&vn->lazy.head, &vn->purge_list); + move_lazy_vmap_areas_to_purge_locked(vn); spin_unlock(&vn->lazy.lock); start = min(start, list_first_entry(&vn->purge_list, @@ -2823,7 +2824,7 @@ static void free_vmap_area_noflush(struct vmap_area *va) id_to_node(vn_id):addr_to_node(va->va_start); spin_lock(&vn->lazy.lock); - insert_vmap_area(va, &vn->lazy.root, &vn->lazy.head); + insert_vmap_area_lazy_locked(va, vn); spin_unlock(&vn->lazy.lock); trace_free_vmap_area_noflush(va_start, nr_lazy, nr_lazy_max); @@ -2873,7 +2874,7 @@ struct vmap_area *find_vmap_area(unsigned long addr) vn = &vmap_nodes[i]; spin_lock(&vn->busy.lock); - va = __find_vmap_area(addr, &vn->busy.root); + va = find_vmap_area_busy_locked(addr, vn); spin_unlock(&vn->busy.lock); if (va) @@ -2897,9 +2898,9 @@ static struct vmap_area *find_unlink_vmap_area(unsigned long addr) vn = &vmap_nodes[i]; spin_lock(&vn->busy.lock); - va = __find_vmap_area(addr, &vn->busy.root); + va = find_vmap_area_busy_locked(addr, vn); if (va) - unlink_va(va, &vn->busy.root); + unlink_vmap_area_busy_locked(va, vn); spin_unlock(&vn->busy.lock); if (va) @@ -2955,8 +2956,8 @@ struct vmap_block_queue { /* * An xarray requires an extra memory dynamically to - * be allocated. If it is an issue, we can use rb-tree - * instead. + * be allocated. If it is an issue, switch to another + * indexing data structure. */ struct xarray vmap_blocks; }; @@ -3133,7 +3134,7 @@ static void free_vmap_block(struct vmap_block *vb) vn = addr_to_node(vb->va->va_start); spin_lock(&vn->busy.lock); - unlink_va(vb->va, &vn->busy.root); + unlink_vmap_area_busy_locked(vb->va, vn); spin_unlock(&vn->busy.lock); free_vmap_area_noflush(vb->va); @@ -5238,9 +5239,15 @@ void free_vm_area(struct vm_struct *area) EXPORT_SYMBOL_GPL(free_vm_area); #ifdef CONFIG_SMP -static struct vmap_area *node_to_va(struct rb_node *n) +static __always_inline struct vmap_area * +free_vmap_area_prev(struct vmap_area *va) { - return rb_entry_safe(n, struct vmap_area, rb_node); + lockdep_assert_held(&free_vmap_area_lock); + + if (va->list.prev == &free_vmap_area_list) + return NULL; + + return list_entry(va->list.prev, struct vmap_area, list); } /** @@ -5255,26 +5262,19 @@ static struct vmap_area *node_to_va(struct rb_node *n) static struct vmap_area * pvm_find_va_enclose_addr(unsigned long addr) { - struct vmap_area *va, *tmp; - struct rb_node *n; + struct vmap_area *va; - n = free_vmap_area_root.rb_node; - va = NULL; + lockdep_assert_held(&free_vmap_area_lock); - while (n) { - tmp = rb_entry(n, struct vmap_area, rb_node); - if (tmp->va_start <= addr) { - va = tmp; - if (tmp->va_end >= addr) - break; + if (free_mt_supported()) + return __find_vmap_area_enclose_addr_mt(addr, &free_vmap_area_mt); - n = n->rb_right; - } else { - n = n->rb_left; - } + list_for_each_entry_reverse(va, &free_vmap_area_list, list) { + if (va->va_start <= addr) + return va; } - return va; + return NULL; } /** @@ -5419,7 +5419,7 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, * If this VA does not fit, move base downwards and recheck. */ if (base + start < va->va_start) { - va = node_to_va(rb_prev(&va->rb_node)); + va = free_vmap_area_prev(va); base = pvm_determine_end_from_reverse(&va, align) - end; term_area = area; continue; @@ -5474,7 +5474,7 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, struct vmap_node *vn = addr_to_node(vas[area]->va_start); spin_lock(&vn->busy.lock); - insert_vmap_area(vas[area], &vn->busy.root, &vn->busy.head); + insert_vmap_area_busy_locked(vas[area], vn); setup_vmalloc_vm(vms[area], vas[area], VM_ALLOC, pcpu_get_vm_areas); spin_unlock(&vn->busy.lock); @@ -5501,8 +5501,7 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, while (area--) { orig_start = vas[area]->va_start; orig_end = vas[area]->va_end; - va = merge_or_add_vmap_area_augment(vas[area], &free_vmap_area_root, - &free_vmap_area_list); + va = merge_or_add_vmap_area_free_locked(vas[area]); if (va) kasan_release_vmalloc(orig_start, orig_end, va->va_start, va->va_end, @@ -5552,8 +5551,7 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, for (area = 0; area < nr_vms; area++) { orig_start = vas[area]->va_start; orig_end = vas[area]->va_end; - va = merge_or_add_vmap_area_augment(vas[area], &free_vmap_area_root, - &free_vmap_area_list); + va = merge_or_add_vmap_area_free_locked(vas[area]); if (va) kasan_release_vmalloc(orig_start, orig_end, va->va_start, va->va_end, -- 2.34.1