Message ID | db20abbecb129c49d3c663de67dac6a87501ac0b.1617001615.git.christophe.leroy@csgroup.eu (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | powerpc/8xx: Load modules closer to kernel text | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch powerpc/merge (87d76f542a24ecfa797e9bd3bb56c0f19aabff57) |
snowpatch_ozlabs/build-ppc64le | success | Build succeeded |
snowpatch_ozlabs/build-ppc64be | success | Build succeeded |
snowpatch_ozlabs/build-ppc64e | success | Build succeeded |
snowpatch_ozlabs/build-pmac32 | success | Build succeeded |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 9 lines checked |
snowpatch_ozlabs/needsstable | success | Patch has no Fixes tags |
Christophe Leroy <christophe.leroy@csgroup.eu> 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
Le 31/03/2021 à 15:39, Michael Ellerman a écrit : > Christophe Leroy <christophe.leroy@csgroup.eu> 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. > 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
Christophe Leroy <christophe.leroy@csgroup.eu> writes: > Le 31/03/2021 à 15:39, Michael Ellerman a écrit : >> Christophe Leroy <christophe.leroy@csgroup.eu> 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. >> > > 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
Le 01/04/2021 à 06:33, Michael Ellerman a écrit : > Christophe Leroy <christophe.leroy@csgroup.eu> writes: >> Le 31/03/2021 à 15:39, Michael Ellerman a écrit : >>> Christophe Leroy <christophe.leroy@csgroup.eu> 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. >>> >> >> Well, with a 16 MB kernel and 16 MB modules, my board is full :) > > Heh. ARM set it to 16M or 8M. > >> 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
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>
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 <christophe.leroy@csgroup.eu> --- arch/powerpc/include/asm/nohash/32/mmu-8xx.h | 3 +++ 1 file changed, 3 insertions(+)