From patchwork Tue Apr 15 02:39:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baoquan He X-Patchwork-Id: 14051349 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C71FBC369B4 for ; Tue, 15 Apr 2025 02:40:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 96C3928008E; Mon, 14 Apr 2025 22:40:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 91F2B280075; Mon, 14 Apr 2025 22:40:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7C19A28008E; Mon, 14 Apr 2025 22:40:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5CA8C280075 for ; Mon, 14 Apr 2025 22:40:12 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id B2ECE140AC0 for ; Tue, 15 Apr 2025 02:40:13 +0000 (UTC) X-FDA: 83334723906.28.644BFCF Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf21.hostedemail.com (Postfix) with ESMTP id 07DE61C0006 for ; Tue, 15 Apr 2025 02:40:11 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=LbG90SIh; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf21.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744684812; a=rsa-sha256; cv=none; b=2qLrreso5kVXjjp/Alr4bTDRyMNG8zmBJQKjVWqTSBK99MLfckRnWHz/wBXhCGk5McBt0w 0uKm2ri9/NAk4Eoz7tjQ570C3N/ErFcUggQd2ze862R8As80paSobKpVmmOBn6bGa/iJ1C Udh9sq/ZUh32O9ldvU/kJ3wJ4XLCVH0= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=LbG90SIh; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf21.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744684812; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=xaA7QUljbHhdtc6rrmuJ0uIfqNU2ZokdPYOHiaV6YkU=; b=YN9HxfrN34vI+xrIPbeb2amNgb7PTTrWdIBSb/LLlQ/VWmPWQGCRQXXEYgvOT5O4V4BFJZ XhiZL9hEQx6QKvdvvpb4otSVhzKhzuPrbNjcjwueiFYEE6oAAO0DWbzBouOJjV4HUOMLSV u+OfOr1pINyIEAjNTnJHImnUvFpK33M= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744684811; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xaA7QUljbHhdtc6rrmuJ0uIfqNU2ZokdPYOHiaV6YkU=; b=LbG90SIhCrI+JZjPF2cT55up8+S/zIwVy3OFVHxQA7QcjAdrytDYAe0MWGA4eA8Qx+zEtB nQuwOU9Wvp4a/Nx/t3kiVatN1wIUAlNqzQWaasyhyCgYtrN6rXVG1lA9PqbOtS4sUD4z1K 1tnvoqlsYTCYOGxA+5sM8eqlNeS8exM= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-614-pzPVa-zbM5GJ1NFvad52Ig-1; Mon, 14 Apr 2025 22:40:08 -0400 X-MC-Unique: pzPVa-zbM5GJ1NFvad52Ig-1 X-Mimecast-MFC-AGG-ID: pzPVa-zbM5GJ1NFvad52Ig_1744684807 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8D3CB19560B6; Tue, 15 Apr 2025 02:40:07 +0000 (UTC) Received: from MiWiFi-R3L-srv.redhat.com (unknown [10.72.112.37]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id AB498180AF7C; Tue, 15 Apr 2025 02:40:03 +0000 (UTC) From: Baoquan He To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, urezki@gmail.com, linux-kernel@vger.kernel.org, Baoquan He Subject: [PATCH 2/5] mm/vmalloc.c: find the vmap of vmap_nodes in reverse order Date: Tue, 15 Apr 2025 10:39:49 +0800 Message-ID: <20250415023952.27850-3-bhe@redhat.com> In-Reply-To: <20250415023952.27850-1-bhe@redhat.com> References: <20250415023952.27850-1-bhe@redhat.com> MIME-Version: 1.0 Content-type: text/plain X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Rspamd-Queue-Id: 07DE61C0006 X-Stat-Signature: hgg7y5zm1q558muyhxycyb1dp1se9dfr X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1744684811-527942 X-HE-Meta: U2FsdGVkX1/ApcF+hAmFn8/4ZkMJrNJ1atF3s5aNgb+VKgSWpa4XCPEuC7CMGa5eGVMS9ibQCRF5QEI0pqS32801P2QdCNfaTdJOr/9jGDkapZ+CVTbEUDaVTQr7jo4CuTbSw5kjFHDv5ev43tIVq/DgMJxN8usjm8CkCh/YZtg52Wp55Wt/30H0W+DJ6UB80g5zBB6QYOf6sUrZfAtMavQdq4sPR71fk4WbEZrzXulBFrjAKjVBqK+A8RPtHkYovc7IpvBDWnG3DgilYd9iwq5/JSr/c9/JAJMGJqvsIJbrWz2OmvpqvXOIqp+uEXgeJo1QDuL87FZAhyGm0M53KFXL2lzXSLEv0Kv9UsfeVRef4TJtQMRE8IHKZawsCUGepvKXHkBsmoIzFTNG0L7ZGjxujOrzP01dTavavIhTyr6O8W+7isdgEQe+x9X7VKWGSVhQjom+J3Cb4/Qc1eGn1WNfV/BRGbI8j9P48SzqOY6GIajzmnRTZlSW9o1o1SJ6lALQ32EZcDw5gh00uhED0Zw3g/g6iYtnAP33y1FobQ6a1bvfeySi8iIvAr4F9YMKKWTzsVAqjudANHXWyBDkgbqDOSRihDX0TKQNXReX+gG8tQQjvCJhpwf9zddeYmih2Vy9wOoUCgWm27l42na9AOYWSRiI4vzWzkl39pPaGWUs/cePKn1rn6BrNZM3Dv1uOjSM7owIdMJlyaT+dnEc7w+Tc3Lqkp9QLjYxb3+RTO5auvIGRMYEbvErK5csM+1Tw/IqbLb5+vm1DvlqOH+k6RBKHKLYrvf2nygHmocdAVYXIr6G9Gf6mVE/+Yb6yzgNgUXeGxSaGsrviY15HMXSro3HfuI1ffUA0SN9ZvLR3b3o7c7V/7m97ojjLvsVIb2td2oTJlWegqP8ZYsuKPzLxmpWJ9Yzba65RSgSHDo5YWXP7Pkw935yyqJBYghImXpZA5eabDzx2Fm5FtJH5kj oNq+R2HA +H52sDXY40pfJDijikOaixoZDaNP6D9r4KGsdURuOL7/jRG2Xag8tTs2Df3ZT1A88t3ZvhnnnmUV38KKGElyMO7dn+a3bf6if2oF+4vCOEpwQLwgya83eis6ndyLMLtxBVeHvcSm+3BkY/9Ij4MWguRg53yJ9Gx5pBrpjYIkWSWqP80oaYXeTwInkBm6yhb6BD2Ged8v/wiq7Sc/mr4+8f2ugxFBgi+BaLBxdFi4mDkEJOOgkBcBP682w1TwVHCaxW++p3v58KLGkoYYwMPnuO00MTLvxwk1yBLOi7a6Ffy1FaZ4MnTbWkMGLEMJ4Ap9ZFZvx+HNxUw6MC+QkiZ12GxOAC1jAzjHL5HoJ1HOi7cmVbHrdFOs+N0voLg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: When finding VA in vn->busy, if VA spans several zones and the passed addr is not the same as va->va_start, we should scan the vn in reverse odrdr because the starting address of VA must be smaller than the passed addr if it really resides in the VA. E.g on a system nr_vmap_nodes=100, <----va----> -|-----|-----|-----|-----|-----|-----|-----|-----|-----|- ... n-1 n n+1 n+2 ... 100 0 1 VA resides in node 'n' whereas it spans 'n', 'n+1' and 'n+2'. If passed addr is within 'n+2', we should try nodes backwards on 'n+1' and 'n', then succeed very soon. Meanwhile we still need loop around because VA could spans node from 'n' to node 100, node 0, node 1. Anyway, changing to find in reverse order can improve efficiency on many CPUs system. Signed-off-by: Baoquan He Reviewed-by: Uladzislau Rezki (Sony) Reviewed-by: Shivank Garg Tested-by: Shivank Garg --- mm/vmalloc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index aca1905d3397..488d69b56765 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2436,7 +2436,7 @@ struct vmap_area *find_vmap_area(unsigned long addr) if (va) return va; - } while ((i = (i + 1) % nr_vmap_nodes) != j); + } while ((i = (i + nr_vmap_nodes - 1) % nr_vmap_nodes) != j); return NULL; } @@ -2462,7 +2462,7 @@ static struct vmap_area *find_unlink_vmap_area(unsigned long addr) if (va) return va; - } while ((i = (i + 1) % nr_vmap_nodes) != j); + } while ((i = (i + nr_vmap_nodes - 1) % nr_vmap_nodes) != j); return NULL; }