Message ID | 1678081915-12599-2-git-send-email-js07.lee@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] arm/mm : omit [_text, _stext) from kernel code region | expand |
On Mon, Mar 06, 2023 at 02:51:55PM +0900, Jungseung Lee wrote: > The resource reservations in /proc/iomem made for the kernel image did > not reflect the gaps between text, rodata, and data. > Add the "rodata" resource and update the start/end calculations. > > Before : > 04000000-2f7fffff : System RAM > 04100000-04cfffff : Kernel code > 04e00000-05369a27 : Kernel data > > After : > 04000000-2f7fffff : System RAM > 04100000-049fffff : Kernel code > 04a00000-04cb2fff : Kernel rodata > 04e00000-05369a27 : Kernel data NAK. This is API, and programs do read and parse this file. It is important that this file reports these parameters in a similar way to other architectures. Other architectures do not split up the individual regions.
Hi, Russell > -----Original Message----- > From: Russell King (Oracle) <linux@armlinux.org.uk> > Sent: Monday, March 6, 2023 8:10 PM > To: Jungseung Lee <js07.lee@samsung.com> > Cc: linus.walleij@linaro.org; amit.kachhap@arm.com; ardb@kernel.org; > linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > keescook@chromium.org; js07.lee@gmail.com > Subject: Re: [PATCH 2/2] arm/mm : Report actual image regions in > /proc/iomem > > On Mon, Mar 06, 2023 at 02:51:55PM +0900, Jungseung Lee wrote: > > The resource reservations in /proc/iomem made for the kernel image > > did not reflect the gaps between text, rodata, and data. > > Add the "rodata" resource and update the start/end calculations. > > > > Before : > > 04000000-2f7fffff : System RAM > > 04100000-04cfffff : Kernel code > > 04e00000-05369a27 : Kernel data > > > > After : > > 04000000-2f7fffff : System RAM > > 04100000-049fffff : Kernel code > > 04a00000-04cb2fff : Kernel rodata > > 04e00000-05369a27 : Kernel data > > NAK. This is API, and programs do read and parse this file. It is > important that this file reports these parameters in a similar way to > other architectures. Other architectures do not split up the > individual regions. > Sounds like an important point, but I failed to find which programs use it as an API. Could you tell me which program uses it as an API? In fact, x86 architecture also split up the individual regions in this way. In addition, most architectures separate the "Kernel bss" area, but arm does not. > -- > RMK's Patch system: https://protect2.fireeye.com/v1/url?k=e44d6839- > 85c67d00-e44ce376-000babffae10-dcec955b544dea43&q=1&e=b53fe1bc-de29- > 4c29-a20d- > e39d10be6f3e&u=https%3A%2F%2Fwww.armlinux.org.uk%2Fdeveloper%2Fpatches > %2F > FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
On Mon, Mar 06, 2023 at 09:14:23PM +0900, Jungseung Lee wrote: > Hi, Russell > > > -----Original Message----- > > From: Russell King (Oracle) <linux@armlinux.org.uk> > > Sent: Monday, March 6, 2023 8:10 PM > > To: Jungseung Lee <js07.lee@samsung.com> > > Cc: linus.walleij@linaro.org; amit.kachhap@arm.com; ardb@kernel.org; > > linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > keescook@chromium.org; js07.lee@gmail.com > > Subject: Re: [PATCH 2/2] arm/mm : Report actual image regions in > > /proc/iomem > > > > On Mon, Mar 06, 2023 at 02:51:55PM +0900, Jungseung Lee wrote: > > > The resource reservations in /proc/iomem made for the kernel image > > > did not reflect the gaps between text, rodata, and data. > > > Add the "rodata" resource and update the start/end calculations. > > > > > > Before : > > > 04000000-2f7fffff : System RAM > > > 04100000-04cfffff : Kernel code > > > 04e00000-05369a27 : Kernel data > > > > > > After : > > > 04000000-2f7fffff : System RAM > > > 04100000-049fffff : Kernel code > > > 04a00000-04cb2fff : Kernel rodata > > > 04e00000-05369a27 : Kernel data > > > > NAK. This is API, and programs do read and parse this file. It is > > important that this file reports these parameters in a similar way to > > other architectures. Other architectures do not split up the > > individual regions. > > > > Sounds like an important point, but I failed to find which programs use it > as an API. Could you tell me which program uses it as an API? > > In fact, x86 architecture also split up the individual regions in this way. > In addition, most architectures separate the "Kernel bss" area, but arm does > not. Take a look at kexec-tools - that certainly does parse /proc/iomem looking for entries such as "Kernel code" and "Kernel data". It's fine for an architecture to decide to do something else if it started to do it early on, but not when something has been established for decades.
On Mon, 6 Mar 2023 at 13:28, Russell King (Oracle) <linux@armlinux.org.uk> wrote: > > On Mon, Mar 06, 2023 at 09:14:23PM +0900, Jungseung Lee wrote: > > Hi, Russell > > > > > -----Original Message----- > > > From: Russell King (Oracle) <linux@armlinux.org.uk> > > > Sent: Monday, March 6, 2023 8:10 PM > > > To: Jungseung Lee <js07.lee@samsung.com> > > > Cc: linus.walleij@linaro.org; amit.kachhap@arm.com; ardb@kernel.org; > > > linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > > keescook@chromium.org; js07.lee@gmail.com > > > Subject: Re: [PATCH 2/2] arm/mm : Report actual image regions in > > > /proc/iomem > > > > > > On Mon, Mar 06, 2023 at 02:51:55PM +0900, Jungseung Lee wrote: > > > > The resource reservations in /proc/iomem made for the kernel image > > > > did not reflect the gaps between text, rodata, and data. > > > > Add the "rodata" resource and update the start/end calculations. > > > > > > > > Before : > > > > 04000000-2f7fffff : System RAM > > > > 04100000-04cfffff : Kernel code > > > > 04e00000-05369a27 : Kernel data > > > > > > > > After : > > > > 04000000-2f7fffff : System RAM > > > > 04100000-049fffff : Kernel code > > > > 04a00000-04cb2fff : Kernel rodata > > > > 04e00000-05369a27 : Kernel data > > > > > > NAK. This is API, and programs do read and parse this file. It is > > > important that this file reports these parameters in a similar way to > > > other architectures. Other architectures do not split up the > > > individual regions. > > > > > > > Sounds like an important point, but I failed to find which programs use it > > as an API. Could you tell me which program uses it as an API? > > > > In fact, x86 architecture also split up the individual regions in this way. > > In addition, most architectures separate the "Kernel bss" area, but arm does > > not. > > Take a look at kexec-tools - that certainly does parse /proc/iomem > looking for entries such as "Kernel code" and "Kernel data". > > It's fine for an architecture to decide to do something else if it > started to do it early on, but not when something has been established > for decades. > Agree with Russell here. It would be helpful if you could explain why you think this needs to be changed.
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 3059860..85af967 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -181,6 +181,12 @@ static struct resource mem_res[] = { .flags = IORESOURCE_SYSTEM_RAM }, { + .name = "Kernel rodata", + .start = 0, + .end = 0, + .flags = IORESOURCE_SYSTEM_RAM + }, + { .name = "Kernel data", .start = 0, .end = 0, @@ -188,9 +194,10 @@ static struct resource mem_res[] = { } }; -#define video_ram mem_res[0] -#define kernel_code mem_res[1] -#define kernel_data mem_res[2] +#define video_ram mem_res[0] +#define kernel_code mem_res[1] +#define kernel_rodata mem_res[2] +#define kernel_data mem_res[3] static struct resource io_res[] = { { @@ -866,7 +873,9 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) u64 i; kernel_code.start = virt_to_phys(_stext); - kernel_code.end = virt_to_phys(__init_begin - 1); + kernel_code.end = virt_to_phys(_etext - 1); + kernel_rodata.start = virt_to_phys(__start_rodata); + kernel_rodata.end = virt_to_phys(__end_rodata - 1); kernel_data.start = virt_to_phys(_sdata); kernel_data.end = virt_to_phys(_end - 1); @@ -912,6 +921,9 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) if (kernel_code.start >= res->start && kernel_code.end <= res->end) request_resource(res, &kernel_code); + if (kernel_rodata.start >= res->start && + kernel_rodata.end <= res->end) + request_resource(res, &kernel_rodata); if (kernel_data.start >= res->start && kernel_data.end <= res->end) request_resource(res, &kernel_data);
The resource reservations in /proc/iomem made for the kernel image did not reflect the gaps between text, rodata, and data. Add the "rodata" resource and update the start/end calculations. Before : 04000000-2f7fffff : System RAM 04100000-04cfffff : Kernel code 04e00000-05369a27 : Kernel data After : 04000000-2f7fffff : System RAM 04100000-049fffff : Kernel code 04a00000-04cb2fff : Kernel rodata 04e00000-05369a27 : Kernel data Signed-off-by: Jungseung Lee <js07.lee@samsung.com> --- arch/arm/kernel/setup.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)