From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B54B73B47C6 for ; Thu, 18 Jun 2026 08:48:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781772486; cv=none; b=CHF4uwxf6zInjYhAnw6br77DypZfDtpSgZQUS/vVsj5nkRRWJyBrpYrglaw0oOICp5XQdTxIcqM93MyjuBpzQa89dv3uIsY4R8FYUCXtD860CzkvTlZBe1NwioabjlV21rPrxK1TPZAlOFeF//yVy1AB5beCKzN7Q3hHwrxte7o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781772486; c=relaxed/simple; bh=CcAdwbgzJvkNtJI8RhR4K2fzod1YtphpK9heSCwfy/g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=UzK5/H4BVF6ctPnVcIRHvXRLJ6kT2WcswfNFVjEaVsM3BmVqw1QUkQ3WtHGGiNsib+JV6vKwJRcThs/G+tU6RF6ccl7xazSx+6+CDgkoBexrHlOO1Rh1EsVvg1GUeMcvH3L0JNPRMuPkaQo7hUgc7odTjXnsw5kdrjbnh+edHkA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KIDcQyjv; arc=none smtp.client-ip=209.85.216.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KIDcQyjv" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-36baeec21dcso345163a91.3 for ; Thu, 18 Jun 2026 01:48:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781772485; x=1782377285; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=O9Am4qJqS/MfI7jTQw49PX1QkIeiHV3cGmQD98EHd9U=; b=KIDcQyjvIaaCD3C5wil77jXW84YIsJm9xmkTCkQxCAnq+cfDEAKLY/VVbftqXIwEwY MMs4WzEvIz2bJ/k/634lSF3yjZSk+HKF0ucEAh9TIG7GpvEKJNwh0RhmXNrBK3XE3SkK as85PC95XM4f0NXze925w/FSHNTsBgZoF4cphMsX6kPslRnSsnyciIJT6ZLSFmUop/ex 9bWSX5b59UUUIOUm9lWBunHEq/E5+HTeDeFtbMc7tPxjdsz0Np2ydh5K6pXJdUUPUPJa O7O73ZUnLzN9JzcRF/bWms5SneYe+J4H6RtmEsjT3BkFos58g7GfhdiCLxcfd1R7FNUe q+NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781772485; x=1782377285; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=O9Am4qJqS/MfI7jTQw49PX1QkIeiHV3cGmQD98EHd9U=; b=T8JzkdQvzXuMPqRsflTrdWjBqRP5eEHZqPi3HSwL7hl2Vs/nPOuRLrtiL03bfviiaO XbchWjC0w0DjFLRyf86Uua2F6Lra7H/h88w5/ad7AhtA8ICTZZUbfdz6x67T/A/WTHmz BcE7noUKlAt7UyPNdzUJQfhh0ehV8MUa3AO2wimBw/rqEUD1+S1KetXfU+Hgocqtn2a4 HyM1i+323OKFS5tYIcZ/YYeQm+SrcqneS1fRVtgDMHJqRab6QBZypVmEl7/1uIWO8Hlo joUgx3iRDKMW6nEYrKWe/eSsLtJJLy4kLOJP1dR7rsNd/U+QxD/Qa6G6+5Z7DmPIrNqx Wa6w== X-Forwarded-Encrypted: i=1; AFNElJ/DP0dmPQHpMYjJ8nrE2FoTdWUeejLmJYH+6qaFOvckUP9rvX01+UICAlAEc1cLEBD64HFgZbFOSomtAsE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw6CR/+xF4UXVSWIFBnqSV2Rgo8O71doO21dnRrdJ+Lzb4C+OcW qcroSMzyv0dDp1aYWrsy8uD8ES5ZzySSO12XHgB1vXFhjwHTi1O34olA X-Gm-Gg: AfdE7clybN8PdqrmO0mVK+D0IueEoXsNEsoC477rvCKyAS6PsfCEnFM58GEcOIwlLBM NflKifn0P9UHcB4qY/7mlK5OgRktF91HKEyw4Z4wq6/4oZkJj1Z6LrV3X2n41Gyu8pUgSo/FsNr ZifwXo0dYItUbhONacl4f5yLdLUNdnxwiHVO3FNwpVSViFXEEUh5MiDIUOg7GyUpd1RRJzwudZd /nenlDigRPh/yj/vyjZsOGAsOiJeOb15eWjk/To8gC8eNHzG0b49dy6A8Q5htce5ha3++6YduE+ 9SREWQ5oqJ+mCZuqVnvAx2vTSdyv8Psn5f+r7J21O6BojMlSwUlEhR0l7f4X402BCgWg30E9W4i sqw/bwMspJPZxwSJQjdQr3V7Se+4eY2AbEbtYXafRnP97RsY/nThbNyuqjVqQM8pBJmvmjVfcgG jQwazNC3PU2jtDd2vTb1vnPkRpwhu//hNihsE= X-Received: by 2002:a17:90b:2fd0:b0:366:3517:1aa2 with SMTP id 98e67ed59e1d1-37c9be73275mr6808218a91.0.1781772485070; Thu, 18 Jun 2026 01:48:05 -0700 (PDT) Received: from mi-OptiPlex-7060.mioffice.cn ([43.224.245.234]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-37c521d8e7bsm8628856a91.5.2026.06.18.01.48.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 01:48:04 -0700 (PDT) From: Wen Jiang X-Google-Original-From: Wen Jiang To: linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, will@kernel.org, akpm@linux-foundation.org, urezki@gmail.com Cc: baohua@kernel.org, Xueyuan.chen21@gmail.com, dev.jain@arm.com, rppt@kernel.org, david@kernel.org, ryan.roberts@arm.com, anshuman.khandual@arm.com, ajd@linux.ibm.com, linux-kernel@vger.kernel.org, jiangwen6@xiaomi.com, shanghaoqiang@xiaomi.com Subject: [PATCH v4 6/6] mm/vmalloc: align vm_area so vmap() can batch mappings Date: Thu, 18 Jun 2026 16:47:26 +0800 Message-Id: <20260618084726.1070022-7-jiangwen6@xiaomi.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260618084726.1070022-1-jiangwen6@xiaomi.com> References: <20260618084726.1070022-1-jiangwen6@xiaomi.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: "Barry Song (Xiaomi)" Try to align the vmap virtual address to PMD_SHIFT or a larger PTE mapping size hinted by the architecture, so contiguous pages can be batch-mapped when setting PMD or PTE entries. Add __get_vm_area_node_aligned_caller() as a wrapper over __get_vm_area_node() to simplify repeated calls with fixed arguments. Signed-off-by: Barry Song (Xiaomi) Signed-off-by: Wen Jiang Tested-by: Xueyuan Chen --- mm/vmalloc.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index fffb885cb2158..bc9fa93e2bdc6 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3628,6 +3628,41 @@ static int vmap_batched(unsigned long addr, unsigned long end, return err; } +static struct vm_struct *__get_vm_area_node_aligned_caller(unsigned long size, + unsigned long align, unsigned long flags, const void *caller) +{ + return __get_vm_area_node(size, align, PAGE_SHIFT, flags, + VMALLOC_START, VMALLOC_END, + NUMA_NO_NODE, GFP_KERNEL, caller); +} + +static struct vm_struct *vmap_get_aligned_vm_area(unsigned long size, + unsigned long flags, const void *caller) +{ + struct vm_struct *vm_area; + unsigned int shift; + + /* Try PMD alignment for large sizes */ + if (size >= PMD_SIZE) { + vm_area = __get_vm_area_node_aligned_caller(size, PMD_SIZE, + flags, caller); + if (vm_area) + return vm_area; + } + + /* Try CONT_PTE alignment */ + shift = arch_vmap_pte_supported_shift(size); + if (shift > PAGE_SHIFT) { + vm_area = __get_vm_area_node_aligned_caller(size, 1UL << shift, + flags, caller); + if (vm_area) + return vm_area; + } + + /* Fall back to page alignment */ + return __get_vm_area_node_aligned_caller(size, PAGE_SIZE, flags, caller); +} + /** * vmap - map an array of pages into virtually contiguous space * @pages: array of page pointers @@ -3666,7 +3701,7 @@ void *vmap(struct page **pages, unsigned int count, return NULL; size = (unsigned long)count << PAGE_SHIFT; - area = get_vm_area_caller(size, flags, __builtin_return_address(0)); + area = vmap_get_aligned_vm_area(size, flags, __builtin_return_address(0)); if (!area) return NULL; -- 2.34.1