[This time from a good email address :-)]

Hi Mikey,

On Mon,  5 Aug 2013 17:28:06 +1000 Michael Neuling
<mi...@neuling.org> wrote:
>
> +++ b/arch/powerpc/kernel/traps.c
> @@ -1296,43 +1294,56 @@ void vsx_unavailable_exception(struct pt_regs *regs)
>       die("Unrecoverable VSX Unavailable Exception", regs, SIGABRT);
>  }
>  
> +#ifdef CONFIG_PPC64
>  void facility_unavailable_exception(struct pt_regs *regs)
>  {
>       static char *facility_strings[] = {
> -             "FPU",
> -             "VMX/VSX",
> -             "DSCR",
> -             "PMU SPRs",
> -             "BHRB",
> -             "TM",
> -             "AT",
> -             "EBB",
> -             "TAR",
> +             [FSCR_FP_LG] = "FPU",
> +             [FSCR_VECVSX_LG] = "VMX/VSX",
> +             [FSCR_DSCR_LG] = "DSCR",
> +             [FSCR_PM_LG] = "PMU SPRs",
> +             [FSCR_BHRB_LG] = "BHRB",
> +             [FSCR_TM_LG] = "TM",
> +             [FSCR_EBB_LG] = "EBB",
> +             [FSCR_TAR_LG] = "TAR",

I assume that you intentionally dropped "AT".

>       };
> -     char *facility, *prefix;
> +     char *facility;
>       u64 value;
> +     u8 status;
> +     bool hv;
>  
>       if (regs->trap == 0xf60) {
>               value = mfspr(SPRN_FSCR);
> -             prefix = "";
> +             hv = false;
>       } else {
>               value = mfspr(SPRN_HFSCR);
> -             prefix = "Hypervisor ";
> +             hv = true;
>       }

Maybe:
        hv = regs->trap == 0xf60;
        if (hv)
                value = mfspr(SPRN_HFSCR);
        else
                value = mfspr(SPRN_HFSCR);
or
        value = mfspr(hv ? SPRN_HFSCR : SPRN_HFSCR);

> -     value = value >> 56;
> +     status = value >> 56;
> +
> +     if (status < ARRAY_SIZE(facility_strings))
> +             facility = facility_strings[status];
> +     else
> +             facility = "unknown";

For entries in the array that are not set, this will give facility ==
NULL.  Is that what you intended?

>       pr_err("%sFacility '%s' unavailable, exception at 0x%lx, MSR=%lx\n",
> -             prefix, facility, regs->nip, regs->msr);
> +            hv ? "Hypervisor ":"", facility, regs->nip, regs->msr);

... and this may attempt to print a NULL pointer with %s.  Also please
put spaces around the : .

-- 
Cheers,
Stephen Rothwell                    s...@canb.auug.org.au

Attachment: pgptDRKEGaoa9.pgp
Description: PGP signature

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to