[PATCH] powerpc/8xx: Load modules closer to kernel text

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE1971d

5 messages, 2 authors, 2021-04-01 · open the first message on its own page

[PATCH] powerpc/8xx: Load modules closer to kernel text

From: Christophe Leroy <hidden>
Date: 2021-03-29 07:08:03

On the 8xx, TASK_SIZE is 0x80000000. The space between TASK_SIZE and
PAGE_OFFSET is not used.

Use it to load modules in order to minimise the distance between
kernel text and modules and avoid trampolines in modules to access
kernel functions or other module functions.

Define a 16Mbytes area for modules, that's more than enough.

DEBUG logs in module_32.c without the patch:

[ 1572.588822] module_32: Applying ADD relocate section 13 to 12
[ 1572.588891] module_32: Doing plt for call to 0xc00671a4 at 0xcae04024
[ 1572.588964] module_32: Initialized plt for 0xc00671a4 at cae04000
[ 1572.589037] module_32: REL24 value = CAE04000. location = CAE04024
[ 1572.589110] module_32: Location before: 48000001.
[ 1572.589171] module_32: Location after: 4BFFFFDD.
[ 1572.589231] module_32: ie. jump to 03FFFFDC+CAE04024 = CEE04000
[ 1572.589317] module_32: Applying ADD relocate section 15 to 14
[ 1572.589386] module_32: Doing plt for call to 0xc00671a4 at 0xcadfc018
[ 1572.589457] module_32: Initialized plt for 0xc00671a4 at cadfc000
[ 1572.589529] module_32: REL24 value = CADFC000. location = CADFC018
[ 1572.589601] module_32: Location before: 48000000.
[ 1572.589661] module_32: Location after: 4BFFFFE8.
[ 1572.589723] module_32: ie. jump to 03FFFFE8+CADFC018 = CEDFC000

With the patch:

[  279.404671] module_32: Applying ADD relocate section 13 to 12
[  279.404741] module_32: REL24 value = C00671B4. location = BF808024
[  279.404814] module_32: Location before: 48000001.
[  279.404874] module_32: Location after: 4885F191.
[  279.404933] module_32: ie. jump to 0085F190+BF808024 = C00671B4
[  279.405016] module_32: Applying ADD relocate section 15 to 14
[  279.405085] module_32: REL24 value = C00671B4. location = BF800018
[  279.405156] module_32: Location before: 48000000.
[  279.405215] module_32: Location after: 4886719C.
[  279.405275] module_32: ie. jump to 0086719C+BF800018 = C00671B4

Signed-off-by: Christophe Leroy <redacted>
---
 arch/powerpc/include/asm/nohash/32/mmu-8xx.h | 3 +++
 1 file changed, 3 insertions(+)
diff --git a/arch/powerpc/include/asm/nohash/32/mmu-8xx.h b/arch/powerpc/include/asm/nohash/32/mmu-8xx.h
index 478249959baa..7902a42d6d3e 100644
--- a/arch/powerpc/include/asm/nohash/32/mmu-8xx.h
+++ b/arch/powerpc/include/asm/nohash/32/mmu-8xx.h
@@ -172,6 +172,9 @@
 
 #define mmu_linear_psize	MMU_PAGE_8M
 
+#define MODULES_VADDR	(PAGE_OFFSET - SZ_16M)
+#define MODULES_END	PAGE_OFFSET
+
 #ifndef __ASSEMBLY__
 
 #include <linux/mmdebug.h>
-- 
2.25.0

Re: [PATCH] powerpc/8xx: Load modules closer to kernel text

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2021-03-31 13:39:59

Christophe Leroy [off-list ref] writes:
On the 8xx, TASK_SIZE is 0x80000000. The space between TASK_SIZE and
PAGE_OFFSET is not used.

Use it to load modules in order to minimise the distance between
kernel text and modules and avoid trampolines in modules to access
kernel functions or other module functions.

Define a 16Mbytes area for modules, that's more than enough.
16MB seems kind of small.

At least on 64-bit we could potentially have hundreds of MBs of modules.

cheers

Re: [PATCH] powerpc/8xx: Load modules closer to kernel text

From: Christophe Leroy <hidden>
Date: 2021-03-31 14:12:54


Le 31/03/2021 à 15:39, Michael Ellerman a écrit :
Christophe Leroy [off-list ref] writes:
quoted
On the 8xx, TASK_SIZE is 0x80000000. The space between TASK_SIZE and
PAGE_OFFSET is not used.

Use it to load modules in order to minimise the distance between
kernel text and modules and avoid trampolines in modules to access
kernel functions or other module functions.

Define a 16Mbytes area for modules, that's more than enough.
16MB seems kind of small.

At least on 64-bit we could potentially have hundreds of MBs of modules.
Well, with a 16 MB kernel and 16 MB modules, my board is full :)

Even on the more recent board that has 128 MB, I don't expect more than a few MBs of modules in 
addition to the kernel which is approx 8M.


But ok, I'll do something more generic, though it will conflict with Jordan's series.

Christophe

Re: [PATCH] powerpc/8xx: Load modules closer to kernel text

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2021-04-01 04:34:57

Christophe Leroy [off-list ref] writes:
Le 31/03/2021 à 15:39, Michael Ellerman a écrit :
quoted
Christophe Leroy [off-list ref] writes:
quoted
On the 8xx, TASK_SIZE is 0x80000000. The space between TASK_SIZE and
PAGE_OFFSET is not used.

Use it to load modules in order to minimise the distance between
kernel text and modules and avoid trampolines in modules to access
kernel functions or other module functions.

Define a 16Mbytes area for modules, that's more than enough.
16MB seems kind of small.

At least on 64-bit we could potentially have hundreds of MBs of modules.
Well, with a 16 MB kernel and 16 MB modules, my board is full :)
Heh.
Even on the more recent board that has 128 MB, I don't expect more than a few MBs of modules in 
addition to the kernel which is approx 8M.

But ok, I'll do something more generic, though it will conflict with Jordan's series.
Don't feel you have to. You're the expert on 8xx, not me.

cheers

Re: [PATCH] powerpc/8xx: Load modules closer to kernel text

From: Christophe Leroy <hidden>
Date: 2021-04-01 21:20:20


Le 01/04/2021 à 06:33, Michael Ellerman a écrit :
Christophe Leroy [off-list ref] writes:
quoted
Le 31/03/2021 à 15:39, Michael Ellerman a écrit :
quoted
Christophe Leroy [off-list ref] writes:
quoted
On the 8xx, TASK_SIZE is 0x80000000. The space between TASK_SIZE and
PAGE_OFFSET is not used.

Use it to load modules in order to minimise the distance between
kernel text and modules and avoid trampolines in modules to access
kernel functions or other module functions.

Define a 16Mbytes area for modules, that's more than enough.
16MB seems kind of small.

At least on 64-bit we could potentially have hundreds of MBs of modules.
Well, with a 16 MB kernel and 16 MB modules, my board is full :)
Heh.
ARM set it to 16M or 8M.
quoted
Even on the more recent board that has 128 MB, I don't expect more than a few MBs of modules in
addition to the kernel which is approx 8M.

But ok, I'll do something more generic, though it will conflict with Jordan's series.
Don't feel you have to. You're the expert on 8xx, not me.
Doing it generic allows to also get it on book3s/32 for free.

Christophe
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help