[PATCH v3 2/8] [booke] Rename mapping based RELOCATABLE to DYNAMIC_MEMSTART for BookE

Josh Boyer jwboyer at gmail.com
Thu Nov 24 03:47:46 EST 2011


On Mon, Nov 14, 2011 at 12:41 AM, Suzuki K. Poulose <suzuki at in.ibm.com> wrote:
> The current implementation of CONFIG_RELOCATABLE in BookE is based
> on mapping the page aligned kernel load address to KERNELBASE. This
> approach however is not enough for platforms, where the TLB page size
> is large (e.g, 256M on 44x). So we are renaming the RELOCATABLE used
> currently in BookE to DYNAMIC_MEMSTART to reflect the actual method.
>
> The CONFIG_RELOCATABLE for PPC32(BookE) based on processing of the
> dynamic relocations will be introduced in the later in the patch series.
>
> This change would allow the use of the old method of RELOCATABLE for
> platforms which can afford to enforce the page alignment (platforms with
> smaller TLB size).

I'm OK with the general direction, but this touches a lot of non-4xx
code.  I'd prefer it if Ben took this directly on whatever final
solution is done.

> I haven tested this change only on 440x. I don't have an FSL BookE to verify
> the changes there.
>
> Scott,
> Could you please test this patch on FSL and let me know the results ?

Scott, did you ever get around to testing this?  In my opinion, this
shouldn't go in without a Tested-by: from someone that tried it on an
FSL platform.

> Suggested-by: Scott Wood <scottwood at freescale.com>
>
> Signed-off-by: Suzuki K. Poulose <suzuki at in.ibm.com>
> Cc:     Scott Wood <scottwood at freescale.com>
> Cc:     Kumar Gala <galak at kernel.crashing.org>
> Cc:     Benjamin Herrenschmidt <benh at kernel.crashing.org>
> Cc:     linux ppc dev <linuxppc-dev at lists.ozlabs.org>
> ---
>
>  arch/powerpc/Kconfig                          |   50 ++++++++++++++++---------
>  arch/powerpc/configs/44x/iss476-smp_defconfig |    2 +
>  arch/powerpc/include/asm/kdump.h              |    5 ++-
>  arch/powerpc/include/asm/page.h               |    4 +-
>  arch/powerpc/kernel/crash_dump.c              |    4 +-
>  arch/powerpc/kernel/head_44x.S                |    4 ++
>  arch/powerpc/kernel/head_fsl_booke.S          |    2 +
>  arch/powerpc/kernel/machine_kexec.c           |    2 +
>  arch/powerpc/kernel/prom_init.c               |    2 +
>  arch/powerpc/mm/44x_mmu.c                     |    2 +
>  10 files changed, 47 insertions(+), 30 deletions(-)
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index d7c2d1a..8d4f789 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -363,7 +363,8 @@ config KEXEC
>  config CRASH_DUMP
>        bool "Build a kdump crash kernel"
>        depends on PPC64 || 6xx || FSL_BOOKE
> -       select RELOCATABLE if PPC64 || FSL_BOOKE
> +       select RELOCATABLE if PPC64
> +       select DYNAMIC_MEMSTART if FSL_BOOKE
>        help
>          Build a kernel suitable for use as a kdump capture kernel.
>          The same kernel binary can be used as production kernel and dump
> @@ -841,23 +842,36 @@ config LOWMEM_CAM_NUM
>        int "Number of CAMs to use to map low memory" if LOWMEM_CAM_NUM_BOOL
>        default 3
>
> -config RELOCATABLE
> -       bool "Build a relocatable kernel (EXPERIMENTAL)"
> +config DYNAMIC_MEMSTART

OK, so my one bikeshed comment here.

We add DYNAMIC_MEMSTART for 32-bit, and we have RELOCATABLE for
64-bit.  Then throughout almost the rest of the patch, all we're doing
is duplicating what RELOCATABLE already did (e.g. if ! either thing).
It works, but it is kind of ugly.

Instead, could we define a helper config variable that can be used in
place of that construct?  Something like:

config NONSTATIC_KERNEL (or whatever)
    bool
    default n

...

config DYNAMIC_MEMSTART
    <blah>
    select NONSTATIC_KERNEL

...

config RELOCATABLE
    <blah>
    select NONSTATIC_KERNEL


Then you can do this kind of thing:

       default "0x02000000" if PPC_STD_MMU && CRASH_DUMP && !(NONSTATIC_KERNEL)

#if defined(CONFIG_CRASH_DUMP) && !(defined(CONFIG_NONSTATIC_KERNEL))

instead of this:

       default "0x02000000" if PPC_STD_MMU && CRASH_DUMP &&
!(RELOCATABLE || DYNAMIC_MEMSTART)
#if defined(CONFIG_CRASH_DUMP) && !(defined(CONFIG_RELOCATABLE) || \
                                   defined(CONFIG_DYNAMIC_MEMSTART))

while still allowing for differences between RELOCATABLE and DYNAMIC_MEMSTART.

Thoughts?

josh


More information about the Linuxppc-dev mailing list