The value of "vmalloc=" set in cmdline is always 8M more than the value
of "VmallocTotal" in meminfo. When use the "vmalloc=" parameter, user
expect to get the size what they input, and no need to consider the 8M
"hole" hided in codes. This commit make real vmalloc size equal to value
of "vmalloc=" in cmdline.
Also, the commit will reduce the size of vmalloc printed in boot message
by 8M when the size set in cmdline is irrational.
Signed-off-by: Yanfei Xu <redacted>
---
arch/arm/mm/mmu.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
@@ -1133,19 +1133,20 @@ static int __init early_vmalloc(char *arg){unsignedlongvmalloc_reserve=memparse(arg,NULL);-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);}if(vmalloc_reserve>VMALLOC_END-(PAGE_OFFSET+SZ_32M)){-vmalloc_reserve=VMALLOC_END-(PAGE_OFFSET+SZ_32M);+vmalloc_reserve=VMALLOC_END-(PAGE_OFFSET+SZ_32M+VMALLOC_OFFSET);pr_warn("vmalloc area is too big, limiting to %luMB\n",vmalloc_reserve>>20);}-vmalloc_min=(void*)(VMALLOC_END-vmalloc_reserve);+vmalloc_min=(void*)(VMALLOC_END-vmalloc_reserve-VMALLOC_OFFSET);return0;}early_param("vmalloc",early_vmalloc);
--
2.27.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
From: "Russell King (Oracle)" <linux@armlinux.org.uk> Date: 2021-05-18 11:29:57
On Tue, May 18, 2021 at 07:12:54PM +0800, Yanfei Xu wrote:
The value of "vmalloc=" set in cmdline is always 8M more than the value
of "VmallocTotal" in meminfo. When use the "vmalloc=" parameter, user
expect to get the size what they input, and no need to consider the 8M
"hole" hided in codes. This commit make real vmalloc size equal to value
of "vmalloc=" in cmdline.
Also, the commit will reduce the size of vmalloc printed in boot message
by 8M when the size set in cmdline is irrational.
Hi,
I think I'd like to do several cleanups with this:
1. change vmalloc_min to be an unsigned long.
2. exclude VMALLOC_OFFSET from vmalloc_min, moving it into
adjust_lowmem_bounds where vmalloc_min is used.
3. rename vmalloc_min to be vmalloc_start
4. enforce vmalloc_start to be a multiple of 2MiB
5. in early_vmalloc(), calculate vmalloc_max as:
VMALLOC_END - (PAGE_OFFSET + SZ_32M + VMALLOC_OFFSET)
and use that to set the upper bound of vmalloc_reserve (which is
something your patch doesn't do, which I think is a bug.
Thoughts?
@@ -1133,19 +1133,20 @@ static int __init early_vmalloc(char *arg){unsignedlongvmalloc_reserve=memparse(arg,NULL);-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);}if(vmalloc_reserve>VMALLOC_END-(PAGE_OFFSET+SZ_32M)){-vmalloc_reserve=VMALLOC_END-(PAGE_OFFSET+SZ_32M);+vmalloc_reserve=VMALLOC_END-(PAGE_OFFSET+SZ_32M+VMALLOC_OFFSET);pr_warn("vmalloc area is too big, limiting to %luMB\n",vmalloc_reserve>>20);}-vmalloc_min=(void*)(VMALLOC_END-vmalloc_reserve);+vmalloc_min=(void*)(VMALLOC_END-vmalloc_reserve-VMALLOC_OFFSET);return0;}early_param("vmalloc",early_vmalloc);
--
2.27.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
From: "Russell King (Oracle)" <linux@armlinux.org.uk> Date: 2021-05-18 12:06:51
On Tue, May 18, 2021 at 12:29:32PM +0100, Russell King (Oracle) wrote:
On Tue, May 18, 2021 at 07:12:54PM +0800, Yanfei Xu wrote:
quoted
The value of "vmalloc=" set in cmdline is always 8M more than the value
of "VmallocTotal" in meminfo. When use the "vmalloc=" parameter, user
expect to get the size what they input, and no need to consider the 8M
"hole" hided in codes. This commit make real vmalloc size equal to value
of "vmalloc=" in cmdline.
Also, the commit will reduce the size of vmalloc printed in boot message
by 8M when the size set in cmdline is irrational.
Hi,
I think I'd like to do several cleanups with this:
1. change vmalloc_min to be an unsigned long.
2. exclude VMALLOC_OFFSET from vmalloc_min, moving it into
adjust_lowmem_bounds where vmalloc_min is used.
3. rename vmalloc_min to be vmalloc_start
4. enforce vmalloc_start to be a multiple of 2MiB
5. in early_vmalloc(), calculate vmalloc_max as:
VMALLOC_END - (PAGE_OFFSET + SZ_32M + VMALLOC_OFFSET)
and use that to set the upper bound of vmalloc_reserve (which is
something your patch doesn't do, which I think is a bug.
Thoughts?
I've slightly modified the above idea, and will shortly follow up with
some patches to show the idea a bit better...
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
From: Russell King (Oracle) <hidden> Date: 2021-05-18 12:15:51
vmalloc_min is currently a void pointer, but everywhere its used
contains a cast - either to a void pointer when setting or back to
an integer type when being used. Eliminate these casts by changing
its type to unsigned long.
Signed-off-by: Russell King (Oracle) <redacted>
---
arch/arm/mm/mmu.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
From: Russell King (Oracle) <hidden> Date: 2021-05-18 12:15:52
We calculate the maximum size of the vmalloc space twice in
early_vmalloc(). Use a temporary variable to hold this value.
Signed-off-by: Russell King (Oracle) <redacted>
---
arch/arm/mm/mmu.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
@@ -1134,6 +1134,7 @@ static unsigned long __initdata vmalloc_min =staticint__initearly_vmalloc(char*arg){unsignedlongvmalloc_reserve=memparse(arg,NULL);+unsignedlongvmalloc_max;if(vmalloc_reserve<SZ_16M){vmalloc_reserve=SZ_16M;
@@ -1141,8 +1142,9 @@ static int __init early_vmalloc(char *arg)vmalloc_reserve>>20);}-if(vmalloc_reserve>VMALLOC_END-(PAGE_OFFSET+SZ_32M)){-vmalloc_reserve=VMALLOC_END-(PAGE_OFFSET+SZ_32M);+vmalloc_max=VMALLOC_END-(PAGE_OFFSET+SZ_32M);+if(vmalloc_reserve>vmalloc_max){+vmalloc_reserve=vmalloc_max;pr_warn("vmalloc area is too big, limiting to %luMB\n",vmalloc_reserve>>20);}
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
From: Russell King (Oracle) <hidden> Date: 2021-05-18 12:15:59
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) <redacted>
---
arch/arm/mm/mmu.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
@@ -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;return0;}early_param("vmalloc",early_vmalloc);
From: Russell King (Oracle) <hidden> Date: 2021-05-18 12:16:05
Rather than storing the start of vmalloc space, store the size, and
move the calculation into adjust_lowmem_limit(). We now have one single
place where this calculation takes place.
Signed-off-by: Russell King (Oracle) <redacted>
---
arch/arm/mm/mmu.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
On Tue, May 18, 2021 at 2:15 PM Russell King (Oracle)
[off-list ref] wrote:
vmalloc_min is currently a void pointer, but everywhere its used
contains a cast - either to a void pointer when setting or back to
an integer type when being used. Eliminate these casts by changing
its type to unsigned long.
Signed-off-by: Russell King (Oracle) <redacted>
On Tue, May 18, 2021 at 2:15 PM Russell King (Oracle)
[off-list ref] wrote:
We calculate the maximum size of the vmalloc space twice in
early_vmalloc(). Use a temporary variable to hold this value.
Signed-off-by: Russell King (Oracle) <redacted>
On Tue, May 18, 2021 at 2:15 PM Russell King (Oracle)
[off-list ref] wrote:
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) <redacted>
When I first read this it took me some time to figure out what was
going on here, so if you have time, please fold in a comment
with some explanation of that (240 << 20) thing, in some blog
post I described it as "an interesting way to write 0x0f000000"
but I suppose commit 0536bdf33faf chose this way for a
specific reason? (Paging Nico if he can explain it.)
Yours,
Linus Walleij
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Tue, May 18, 2021 at 2:15 PM Russell King (Oracle)
[off-list ref] wrote:
Rather than storing the start of vmalloc space, store the size, and
move the calculation into adjust_lowmem_limit(). We now have one single
place where this calculation takes place.
Signed-off-by: Russell King (Oracle) <redacted>
This is really nice.
Reviewed-by: Linus Walleij <redacted>
Yours,
Linus Walleij
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
From: Nicolas Pitre <nico@fluxnic.net> Date: 2021-05-18 22:26:59
On Wed, 19 May 2021, Linus Walleij wrote:
On Tue, May 18, 2021 at 2:15 PM Russell King (Oracle)
[off-list ref] wrote:
quoted
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) <redacted>
When I first read this it took me some time to figure out what was
going on here, so if you have time, please fold in a comment
with some explanation of that (240 << 20) thing, in some blog
post I described it as "an interesting way to write 0x0f000000"
but I suppose commit 0536bdf33faf chose this way for a
specific reason? (Paging Nico if he can explain it.)
That's an alternative (and deprecated) way to write MB(240).
Nicolas
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
From: Nicolas Pitre <nico@fluxnic.net> Date: 2021-05-18 22:32:55
On Tue, 18 May 2021, Nicolas Pitre wrote:
On Wed, 19 May 2021, Linus Walleij wrote:
quoted
On Tue, May 18, 2021 at 2:15 PM Russell King (Oracle)
[off-list ref] wrote:
quoted
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) <redacted>
When I first read this it took me some time to figure out what was
going on here, so if you have time, please fold in a comment
with some explanation of that (240 << 20) thing, in some blog
post I described it as "an interesting way to write 0x0f000000"
but I suppose commit 0536bdf33faf chose this way for a
specific reason? (Paging Nico if he can explain it.)
That's an alternative (and deprecated) way to write MB(240).
And it seems that MB() isn't globally defined either. Oh well.
Nicolas
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Wed, May 19, 2021 at 12:32 AM Nicolas Pitre [off-list ref] wrote:
On Tue, 18 May 2021, Nicolas Pitre wrote:
quoted
On Wed, 19 May 2021, Linus Walleij wrote:
quoted
please fold in a comment
with some explanation of that (240 << 20) thing,
That's an alternative (and deprecated) way to write MB(240).
And it seems that MB() isn't globally defined either. Oh well.
I suppose a comment saying "set vmalloc to be 240 MB" is fair enough.
(And I do feel silly for not realizing that...)
Yours,
Linus Walleij
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
[Please note: This e-mail is from an EXTERNAL e-mail address]
On Tue, May 18, 2021 at 12:29:32PM +0100, Russell King (Oracle) wrote:
quoted
On Tue, May 18, 2021 at 07:12:54PM +0800, Yanfei Xu wrote:
quoted
The value of "vmalloc=" set in cmdline is always 8M more than the value
of "VmallocTotal" in meminfo. When use the "vmalloc=" parameter, user
expect to get the size what they input, and no need to consider the 8M
"hole" hided in codes. This commit make real vmalloc size equal to value
of "vmalloc=" in cmdline.
Also, the commit will reduce the size of vmalloc printed in boot message
by 8M when the size set in cmdline is irrational.
Hi,
I think I'd like to do several cleanups with this:
1. change vmalloc_min to be an unsigned long.
2. exclude VMALLOC_OFFSET from vmalloc_min, moving it into
adjust_lowmem_bounds where vmalloc_min is used.
3. rename vmalloc_min to be vmalloc_start
4. enforce vmalloc_start to be a multiple of 2MiB
5. in early_vmalloc(), calculate vmalloc_max as:
VMALLOC_END - (PAGE_OFFSET + SZ_32M + VMALLOC_OFFSET)
and use that to set the upper bound of vmalloc_reserve (which is
something your patch doesn't do, which I think is a bug.
Thoughts?
I've slightly modified the above idea, and will shortly follow up with
some patches to show the idea a bit better...
[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) <redacted>
---
arch/arm/mm/mmu.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
@@ -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;return0;}early_param("vmalloc",early_vmalloc);
[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) <redacted>
---
arch/arm/mm/mmu.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
@@ -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;return0;}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)unsignedlongvmalloc_reserve=memparse(arg,NULL);unsignedlongvmalloc_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
quoted hunk
@@ -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--
[Please note: This e-mail is from an EXTERNAL e-mail address]
On Tue, May 18, 2021 at 12:29:32PM +0100, Russell King (Oracle) wrote:
quoted
On Tue, May 18, 2021 at 07:12:54PM +0800, Yanfei Xu wrote:
quoted
The value of "vmalloc=" set in cmdline is always 8M more than the value
of "VmallocTotal" in meminfo. When use the "vmalloc=" parameter, user
expect to get the size what they input, and no need to consider the 8M
"hole" hided in codes. This commit make real vmalloc size equal to
value
of "vmalloc=" in cmdline.
Also, the commit will reduce the size of vmalloc printed in boot
message
by 8M when the size set in cmdline is irrational.
Hi,
I think I'd like to do several cleanups with this:
1. change vmalloc_min to be an unsigned long.
2. exclude VMALLOC_OFFSET from vmalloc_min, moving it into
adjust_lowmem_bounds where vmalloc_min is used.
3. rename vmalloc_min to be vmalloc_start
4. enforce vmalloc_start to be a multiple of 2MiB
5. in early_vmalloc(), calculate vmalloc_max as:
VMALLOC_END - (PAGE_OFFSET + SZ_32M + VMALLOC_OFFSET)
and use that to set the upper bound of vmalloc_reserve (which is
something your patch doesn't do, which I think is a bug.
Thoughts?
I've slightly modified the above idea, and will shortly follow up with
some patches to show the idea a bit better...
Thanks for making it better!
Hi Russell,
I am not much familar with community contribution. In this case, what
kind of tags should I reply? signed-off-by? Reviewed-by? or any other
tags?
Regards,
Yanfei
From: "Russell King (Oracle)" <linux@armlinux.org.uk> Date: 2021-05-20 09:00:50
On Wed, May 19, 2021 at 12:41:10PM +0800, Xu, Yanfei wrote:
On 5/18/21 8:15 PM, Russell King (Oracle) wrote:
quoted
-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'
@@ -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);
Here is bug, it should be
vmalloc_limit = (u64)vmalloc_start -
(PAGE_OFFSET + VMALLOC_OFFSET) + PHYS_OFFSET;
[Please note: This e-mail is from an EXTERNAL e-mail address]
On Wed, May 19, 2021 at 12:41:10PM +0800, Xu, Yanfei wrote:
quoted
On 5/18/21 8:15 PM, Russell King (Oracle) wrote:
quoted
-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'
@@ -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);
Here is bug, it should be
vmalloc_limit = (u64)vmalloc_start -
(PAGE_OFFSET + VMALLOC_OFFSET) + PHYS_OFFSET;
Yes, you're absolutely right, thanks for catching that!
Hi Russell,
Will you send v2? (or I missed something.)
Thanks,
Yanfei
From: "Russell King (Oracle)" <linux@armlinux.org.uk> Date: 2021-05-28 09:56:38
On Tue, May 18, 2021 at 06:32:43PM -0400, Nicolas Pitre wrote:
On Tue, 18 May 2021, Nicolas Pitre wrote:
quoted
On Wed, 19 May 2021, Linus Walleij wrote:
quoted
On Tue, May 18, 2021 at 2:15 PM Russell King (Oracle)
[off-list ref] wrote:
quoted
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) <redacted>
When I first read this it took me some time to figure out what was
going on here, so if you have time, please fold in a comment
with some explanation of that (240 << 20) thing, in some blog
post I described it as "an interesting way to write 0x0f000000"
but I suppose commit 0536bdf33faf chose this way for a
specific reason? (Paging Nico if he can explain it.)
That's an alternative (and deprecated) way to write MB(240).
And it seems that MB() isn't globally defined either. Oh well.
From: Russell King (Oracle) <hidden> Date: 2021-05-28 10:11:42
vmalloc_min is currently a void pointer, but everywhere its used
contains a cast - either to a void pointer when setting or back to
an integer type when being used. Eliminate these casts by changing
its type to unsigned long.
Reviewed-by: Linus Walleij <redacted>
Signed-off-by: Russell King (Oracle) <redacted>
---
arch/arm/mm/mmu.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
From: Russell King (Oracle) <hidden> Date: 2021-05-28 10:11:46
We calculate the maximum size of the vmalloc space twice in
early_vmalloc(). Use a temporary variable to hold this value.
Reviewed-by: Linus Walleij <redacted>
Signed-off-by: Russell King (Oracle) <redacted>
---
arch/arm/mm/mmu.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
@@ -1134,6 +1134,7 @@ static unsigned long __initdata vmalloc_min =staticint__initearly_vmalloc(char*arg){unsignedlongvmalloc_reserve=memparse(arg,NULL);+unsignedlongvmalloc_max;if(vmalloc_reserve<SZ_16M){vmalloc_reserve=SZ_16M;
@@ -1141,8 +1142,9 @@ static int __init early_vmalloc(char *arg)vmalloc_reserve>>20);}-if(vmalloc_reserve>VMALLOC_END-(PAGE_OFFSET+SZ_32M)){-vmalloc_reserve=VMALLOC_END-(PAGE_OFFSET+SZ_32M);+vmalloc_max=VMALLOC_END-(PAGE_OFFSET+SZ_32M);+if(vmalloc_reserve>vmalloc_max){+vmalloc_reserve=vmalloc_max;pr_warn("vmalloc area is too big, limiting to %luMB\n",vmalloc_reserve>>20);}
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
From: Russell King (Oracle) <hidden> Date: 2021-05-28 10:11:55
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) <redacted>
---
arch/arm/mm/mmu.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
@@ -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;return0;}early_param("vmalloc",early_vmalloc);
From: Russell King (Oracle) <hidden> Date: 2021-05-28 10:11:59
Rather than storing the start of vmalloc space, store the size, and
move the calculation into adjust_lowmem_limit(). We now have one single
place where this calculation takes place.
Signed-off-by: Russell King (Oracle) <redacted>
---
arch/arm/mm/mmu.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
From: Russell King (Oracle) <hidden> Date: 2021-05-28 10:12:06
Make the default vmalloc size clearer by using a more natural
multiplication by SZ_1M rather than a shift left by 20 bits.
Signed-off-by: Russell King (Oracle) <redacted>
---
arch/arm/mm/mmu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Russell King (Oracle) <hidden> Date: 2021-05-28 10:12:15
Rather than using "m" (which is the unit of metres, or milli), and
"MB" in the printk statements, use MiB to make it clear that we are
talking about the power-of-2 megabytes, aka mebibytes.
Signed-off-by: Russell King (Oracle) <redacted>
---
arch/arm/mm/mmu.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
@@ -1137,14 +1137,14 @@ static int __init early_vmalloc(char *arg)if(vmalloc_reserve<SZ_16M){vmalloc_reserve=SZ_16M;-pr_warn("vmalloc area too small, limiting to %luMB\n",+pr_warn("vmalloc area is too small, limiting to %luMiB\n",vmalloc_reserve>>20);}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",+pr_warn("vmalloc area is too big, limiting to %luMiB\n",vmalloc_reserve>>20);}
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Fri, May 28, 2021 at 12:11 PM Russell King (Oracle)
[off-list ref] wrote:
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) <redacted>
On Fri, May 28, 2021 at 12:11 PM Russell King (Oracle)
[off-list ref] wrote:
Rather than storing the start of vmalloc space, store the size, and
move the calculation into adjust_lowmem_limit(). We now have one single
place where this calculation takes place.
Signed-off-by: Russell King (Oracle) <redacted>
On Fri, May 28, 2021 at 12:11 PM Russell King (Oracle)
[off-list ref] wrote:
Make the default vmalloc size clearer by using a more natural
multiplication by SZ_1M rather than a shift left by 20 bits.
Signed-off-by: Russell King (Oracle) <redacted>
On Fri, May 28, 2021 at 12:11 PM Russell King (Oracle)
[off-list ref] wrote:
Rather than using "m" (which is the unit of metres, or milli), and
"MB" in the printk statements, use MiB to make it clear that we are
talking about the power-of-2 megabytes, aka mebibytes.
Signed-off-by: Russell King (Oracle) <redacted>
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)<redacted>
vmalloc_min is currently a void pointer, but everywhere its used
contains a cast - either to a void pointer when setting or back to
an integer type when being used. Eliminate these casts by changing
its type to unsigned long.
Reviewed-by: Linus Walleij<redacted>
Signed-off-by: Russell King (Oracle)<redacted>
[Please note: This e-mail is from an EXTERNAL e-mail address]
We calculate the maximum size of the vmalloc space twice in
early_vmalloc(). Use a temporary variable to hold this value.
Reviewed-by: Linus Walleij <redacted>
Signed-off-by: Russell King (Oracle) <redacted>
@@ -1134,6 +1134,7 @@ static unsigned long __initdata vmalloc_min =staticint__initearly_vmalloc(char*arg){unsignedlongvmalloc_reserve=memparse(arg,NULL);+unsignedlongvmalloc_max;if(vmalloc_reserve<SZ_16M){vmalloc_reserve=SZ_16M;
@@ -1141,8 +1142,9 @@ static int __init early_vmalloc(char *arg)vmalloc_reserve>>20);}-if(vmalloc_reserve>VMALLOC_END-(PAGE_OFFSET+SZ_32M)){-vmalloc_reserve=VMALLOC_END-(PAGE_OFFSET+SZ_32M);+vmalloc_max=VMALLOC_END-(PAGE_OFFSET+SZ_32M);+if(vmalloc_reserve>vmalloc_max){+vmalloc_reserve=vmalloc_max;pr_warn("vmalloc area is too big, limiting to %luMB\n",vmalloc_reserve>>20);}--
Make the default vmalloc size clearer by using a more natural
multiplication by SZ_1M rather than a shift left by 20 bits.
Signed-off-by: Russell King (Oracle)<redacted>
[Please note: This e-mail is from an EXTERNAL e-mail address]
Rather than using "m" (which is the unit of metres, or milli), and
"MB" in the printk statements, use MiB to make it clear that we are
talking about the power-of-2 megabytes, aka mebibytes.
Signed-off-by: Russell King (Oracle) <redacted>
@@ -1137,14 +1137,14 @@ static int __init early_vmalloc(char *arg)if(vmalloc_reserve<SZ_16M){vmalloc_reserve=SZ_16M;-pr_warn("vmalloc area too small, limiting to %luMB\n",+pr_warn("vmalloc area is too small, limiting to %luMiB\n",vmalloc_reserve>>20);}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",+pr_warn("vmalloc area is too big, limiting to %luMiB\n",vmalloc_reserve>>20);}--
[Please note: This e-mail is from an EXTERNAL e-mail address]
Rather than storing the start of vmalloc space, store the size, and
move the calculation into adjust_lowmem_limit(). We now have one single
place where this calculation takes place.
Signed-off-by: Russell King (Oracle) <redacted>