On 28/10/16 17:39, Michael Ellerman wrote:
> The ibm_pa_features array consists of structures that describe which bit
> and byte in the ibm,pa-features property toggles one or more flags in
> either the CPU, MMU, or user visible feature flags.
> 
> Each one consists of 7 values, which are all unsigned long, int or char,
> meaning the compiler gives us no warning if we assign the wrong values
> to the wrong elements. In fact we have had a bug here in the past, where
> we were setting incorrect bits, see commit 6997e57d693b ("powerpc:
> scan_features() updates incorrect bits for REAL_LE").
> 
> So switch to using named initialisers for the structure elements, to
> reduce the likelihood of future bugs, and hopefully improve readability
> also.
> 
> Signed-off-by: Michael Ellerman <m...@ellerman.id.au>
> ---
>  arch/powerpc/kernel/prom.c | 21 +++++++++++----------
>  1 file changed, 11 insertions(+), 10 deletions(-)
> 
> 
> I've tested this but I would appreciate if someone can verify I didn't typo
> anything when transcribing it.
> 
> diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
> index b0245bed6f54..a7b87b6b4ef4 100644
> --- a/arch/powerpc/kernel/prom.c
> +++ b/arch/powerpc/kernel/prom.c
> @@ -156,21 +156,22 @@ static struct ibm_pa_feature {
>       unsigned char   pabit;          /* bit number (big-endian) */
>       unsigned char   invert;         /* if 1, pa bit set => clear feature */
>  } ibm_pa_features[] __initdata = {
> -     {0, 0, PPC_FEATURE_HAS_MMU, 0,          0, 0, 0},
> -     {0, 0, PPC_FEATURE_HAS_FPU, 0,          0, 1, 0},
> -     {CPU_FTR_CTRL, 0, 0, 0,                 0, 3, 0},
> -     {CPU_FTR_NOEXECUTE, 0, 0, 0,            0, 6, 0},
> -     {CPU_FTR_NODSISRALIGN, 0, 0, 0,         1, 1, 1},
> -     {0, MMU_FTR_CI_LARGE_PAGE, 0, 0,                1, 2, 0},
> -     {CPU_FTR_REAL_LE, 0, PPC_FEATURE_TRUE_LE, 0, 5, 0, 0},
> +     { .pabyte = 0,  .pabit = 0, .cpu_user_ftrs = PPC_FEATURE_HAS_MMU },
> +     { .pabyte = 0,  .pabit = 1, .cpu_user_ftrs = PPC_FEATURE_HAS_FPU },
> +     { .pabyte = 0,  .pabit = 3, .cpu_features  = CPU_FTR_CTRL },
> +     { .pabyte = 0,  .pabit = 6, .cpu_features  = CPU_FTR_NOEXECUTE },
> +     { .pabyte = 1,  .pabit = 2, .mmu_features  = MMU_FTR_CI_LARGE_PAGE },
> +     { .pabyte = 40, .pabit = 0, .mmu_features  = MMU_FTR_TYPE_RADIX },
> +     { .pabyte = 1,  .pabit = 1, .invert = 1, .cpu_features = 
> CPU_FTR_NODSISRALIGN },
> +     { .pabyte = 5,  .pabit = 0, .cpu_features  = CPU_FTR_REAL_LE,
> +                                 .cpu_user_ftrs = PPC_FEATURE_TRUE_LE },
>       /*
>        * If the kernel doesn't support TM (ie CONFIG_PPC_TRANSACTIONAL_MEM=n),
>        * we don't want to turn on TM here, so we use the *_COMP versions
>        * which are 0 if the kernel doesn't support TM.
>        */
> -     {CPU_FTR_TM_COMP, 0, 0,
> -      PPC_FEATURE2_HTM_COMP|PPC_FEATURE2_HTM_NOSC_COMP, 22, 0, 0},
> -     {0, MMU_FTR_TYPE_RADIX, 0, 0,           40, 0, 0},
> +     { .pabyte = 22, .pabit = 0, .cpu_features = CPU_FTR_TM_COMP,
> +       .cpu_user_ftrs2 = PPC_FEATURE2_HTM_COMP | PPC_FEATURE2_HTM_NOSC_COMP 
> },
>  };
>  

The code looks easier to parse with this

Acked-by: Balbir Singh <bsinghar...@gmail.com>

Reply via email to