diff mbox series

[2/2] arm/mm : Report actual image regions in /proc/iomem

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

Commit Message

Jungseung Lee March 6, 2023, 5:51 a.m. UTC
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(-)

Comments

Russell King (Oracle) March 6, 2023, 11:10 a.m. UTC | #1
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.
Jungseung Lee March 6, 2023, 12:14 p.m. UTC | #2
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!
Russell King (Oracle) March 6, 2023, 12:28 p.m. UTC | #3
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.
Ard Biesheuvel March 6, 2023, 1 p.m. UTC | #4
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 mbox series

Patch

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);