From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 48ADD2BD00C for ; Wed, 8 Apr 2026 11:36:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775648212; cv=none; b=aqDIjgqOws4oUo5FXc1g0F5u8Xq1MeDrRHm9l3YjQnl/8sS7Z0N3sMulZIyw1S/HabTfkuyxVTtz+MoaSGm6KQ1Ig5gzgK6Gd4V1NMs88jPJg60t0VN+cYfFoflM/r2wPmCMLdagI7XuwcGvEdBexecEsxFfpxduHjfDg9Vhpn8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775648212; c=relaxed/simple; bh=TIvBYgco5Q0zBdawPxnIjX/uGosAzf3bmZeuxmZn3AQ=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=WAI+Sck1UvXZ4Iizp/BBUHEb0+EsWZ21QE2GVP2Zq5cOzDcgsZHVtT60aWIV7uSBVtfkjL0t4NkRyiPlSr3PvqsVlg+fq7gzAT5+FkdRH4j6x3Thj72ZttnhPS4FgVkdiYGaOLBI8HrdvIQAbwRl8vN9mPlvBSIxd8ygF67widQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=Tyc+ZDtX; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="Tyc+ZDtX" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id CF0263161; Wed, 8 Apr 2026 04:36:44 -0700 (PDT) Received: from [10.164.148.132] (unknown [10.164.148.132]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E7CFE3F641; Wed, 8 Apr 2026 04:36:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1775648210; bh=TIvBYgco5Q0zBdawPxnIjX/uGosAzf3bmZeuxmZn3AQ=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=Tyc+ZDtXxSniCkUDIjLP6KKzflE6CwlBnHALqx63GTUFrNyU2JF3Ef62mtN/YsHmb 7ZEmNUADsIcp/gy+CcyNXX5DahMmcxjlRYvvs8Yq3SrrwZoM/CCxHo98FmeQUtJ6BB 3JVJIanKmDREHSh3cxE5uq5C9ysDoD1/Bt4VzYbc= Message-ID: <90cfbbb4-9f75-4c67-a1c5-34780b2f7108@arm.com> Date: Wed, 8 Apr 2026 17:06:42 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH 7/8] mm/vmalloc: Coalesce same page_shift mappings in vmap to avoid pgtable zigzag To: "Barry Song (Xiaomi)" , 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: linux-kernel@vger.kernel.org, anshuman.khandual@arm.com, ryan.roberts@arm.com, ajd@linux.ibm.com, rppt@kernel.org, david@kernel.org, Xueyuan.chen21@gmail.com References: <20260408025115.27368-1-baohua@kernel.org> <20260408025115.27368-8-baohua@kernel.org> Content-Language: en-US From: Dev Jain In-Reply-To: <20260408025115.27368-8-baohua@kernel.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 08/04/26 8:21 am, Barry Song (Xiaomi) wrote: > For vmap(), detect pages with the same page_shift and map them in > batches, avoiding the pgtable zigzag caused by per-page mapping. > > Signed-off-by: Barry Song (Xiaomi) > --- In patch 4, you eliminate the pagetable rewalk, and in patch 5, you re-introduce it, then in this patch you eliminate it again. So please just squash this into #5. > mm/vmalloc.c | 24 ++++++++++++++++++++---- > 1 file changed, 20 insertions(+), 4 deletions(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 6643ec0288cd..3c3b7217693a 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -3551,6 +3551,8 @@ static int vmap_contig_pages_range(unsigned long addr, unsigned long end, > pgprot_t prot, struct page **pages) > { > unsigned int count = (end - addr) >> PAGE_SHIFT; > + unsigned int prev_shift = 0, idx = 0; > + unsigned long map_addr = addr; > int err; > > err = kmsan_vmap_pages_range_noflush(addr, end, prot, pages, > @@ -3562,15 +3564,29 @@ static int vmap_contig_pages_range(unsigned long addr, unsigned long end, > unsigned int shift = PAGE_SHIFT + > get_vmap_batch_order(pages, count - i, i); > > - err = vmap_range_noflush(addr, addr + (1UL << shift), > - page_to_phys(pages[i]), prot, shift); > - if (err) > - goto out; > + if (!i) > + prev_shift = shift; > + > + if (shift != prev_shift) { > + err = vmap_small_pages_range_noflush(map_addr, addr, > + prot, pages + idx, > + min(prev_shift, PMD_SHIFT)); > + if (err) > + goto out; > + prev_shift = shift; > + map_addr = addr; > + idx = i; > + } > > addr += 1UL << shift; > i += 1U << (shift - PAGE_SHIFT); > } > > + /* Remaining */ > + if (map_addr < end) > + err = vmap_small_pages_range_noflush(map_addr, end, > + prot, pages + idx, min(prev_shift, PMD_SHIFT)); > + > out: > flush_cache_vmap(addr, end); > return err;