Re: [PATCH 3/4] ARM: change vmalloc_min to vmalloc_start

From: Xu, Yanfei
Date: Wed May 19 2021 - 01:25:57 EST




On 5/18/21 8:15 PM, Russell King (Oracle) wrote:
[Please note: This e-mail is from an EXTERNAL e-mail address]

Change the current vmalloc_min, which is supposed to be the lowest
address of vmalloc space including the VMALLOC_OFFSET, to vmalloc_start
which does not include VMALLOC_OFFSET.

Signed-off-by: Russell King (Oracle) <rmk+kernel@xxxxxxxxxxxxxxx>
---
arch/arm/mm/mmu.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index d932c46a02e0..457203b41ceb 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1123,8 +1123,7 @@ void __init debug_ll_io_init(void)
}
#endif

-static unsigned long __initdata vmalloc_min =
- VMALLOC_END - (240 << 20) - VMALLOC_OFFSET;
+static unsigned long __initdata vmalloc_start = VMALLOC_END - (240 << 20);

/*
* vmalloc=size forces the vmalloc area to be exactly 'size'
@@ -1142,14 +1141,14 @@ static int __init early_vmalloc(char *arg)
vmalloc_reserve >> 20);
}

- vmalloc_max = VMALLOC_END - (PAGE_OFFSET + SZ_32M);
+ vmalloc_max = VMALLOC_END - (PAGE_OFFSET + SZ_32M + VMALLOC_OFFSET);
if (vmalloc_reserve > vmalloc_max) {
vmalloc_reserve = vmalloc_max;
pr_warn("vmalloc area is too big, limiting to %luMB\n",
vmalloc_reserve >> 20);
}

- vmalloc_min = VMALLOC_END - vmalloc_reserve;
+ vmalloc_start = VMALLOC_END - vmalloc_reserve;
return 0;
}
early_param("vmalloc", early_vmalloc);

The minimal vamlloc size should reduce 8MB, to be same with the original vmalloc size.

@@ -1133,8 +1133,8 @@ static int __init early_vmalloc(char *arg)
unsigned long vmalloc_reserve = memparse(arg, NULL);
unsigned long vmalloc_max;

- if (vmalloc_reserve < SZ_16M) {
- vmalloc_reserve = SZ_16M;
+ if (vmalloc_reserve < SZ_8M) {
+ vmalloc_reserve = SZ_8M;
pr_warn("vmalloc area too small, limiting to %luMB\n",
vmalloc_reserve >> 20);
}

Another point, the current size of "vmalloc=" will be align up with 8MB, should we align it down? The original is align down when we consider the vmalloc_offest in vmalloc size. If yes, we could do it like

index eb6173315291..1fc2696fadd2 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1133,8 +1133,9 @@ static int __init early_vmalloc(char *arg)
unsigned long vmalloc_reserve = memparse(arg, NULL);
unsigned long vmalloc_max;

- if (vmalloc_reserve < SZ_16M) {
- vmalloc_reserve = SZ_16M;
+ vmalloc_reserve = ALIGN_DOWN(vmalloc_reserve, SZ_8M);
+ if (vmalloc_reserve < SZ_8M) {
+ vmalloc_reserve = SZ_8M;
pr_warn("vmalloc area too small, limiting to %luMB\n",
vmalloc_reserve >> 20);
}


Regards,
Yanfei


@@ -1169,7 +1168,8 @@ void __init adjust_lowmem_bounds(void)
* and may itself be outside the valid range for which phys_addr_t
* and therefore __pa() is defined.
*/
- vmalloc_limit = (u64)vmalloc_min - PAGE_OFFSET + PHYS_OFFSET;
+ vmalloc_limit = (u64)vmalloc_start -
+ (PAGE_OFFSET + PHYS_OFFSET + VMALLOC_OFFSET);

/*
* The first usable region must be PMD aligned. Mark its start
--
2.20.1