[Pdbg] [PATCH v2 20/39] gdbserver: enable POWER9 support

Joel Stanley joel at jms.id.au
Tue May 3 17:09:02 AEST 2022


On Wed, 20 Apr 2022 at 06:51, Nicholas Piggin <npiggin at gmail.com> wrote:
>
> POWER9 has a strange problem with attn, but otherwise gdbserver
> works well. Enable it.
>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>

Reviewed-by: Joel Stanley <joel at jms.id.au>

> ---
>  README.md       | 14 +++++++++++---
>  src/pdbgproxy.c | 29 +++++++++++++++++++++++++----
>  2 files changed, 36 insertions(+), 7 deletions(-)
>
> diff --git a/README.md b/README.md
> index 9ece33f9..ba17c613 100644
> --- a/README.md
> +++ b/README.md
> @@ -534,8 +534,9 @@ There are also low level htm commands which can also be used:
>   - `dump` will dump the trace to a file.
>
>  ### GDBSERVER
> -At the moment gdbserver is only supported on P8 while the cores are in the
> -kernel.
> +At the moment gdbserver is only supported on P8 and P9.
> +
> +Memory access can only be performed on kernel memory.
>
>  To run a gdbserver on a P8 machine from a BMC running openbmc:
>
> @@ -547,7 +548,7 @@ $ ./pdbg -d p8 -p0 -c11 -t0 gdbserver 44
>
>  On your local machine:
>  $ gdb
> -(gdb)  set architecture powerpc:common64
> +(gdb) set architecture powerpc:common64
>  (gdb) target remote palm5-bmc:44
>
>  Debugging info:
> @@ -566,6 +567,13 @@ Notes:
>  happen.
>  2. If you want to view the kernel call trace then run gdb on the vmlinux that
>  the host is running (the kernel needs to be compiled with debug symbols).
> +3. The kernel HARDLOCKUP watchdog can interact badly with GDBSERVER (and all
> +pdbg direct controls for that matter). Disabling it before debugging is a
> +good idea.
> +4. Idle states have often had problems with pdbg direct controls. If things are
> +misbehaving, booting Linux with powersave=off is the first thing to try.
> +5. attn instructions seem to cause host hangs on POWER9. gdb breakpoints should
> +not be used.
>
>  ## Submitting patches
>
> diff --git a/src/pdbgproxy.c b/src/pdbgproxy.c
> index 4c7b4a82..3028d418 100644
> --- a/src/pdbgproxy.c
> +++ b/src/pdbgproxy.c
> @@ -105,6 +105,9 @@ static void detach(uint64_t *stack, void *priv)
>
>  #define POWER8_HID_ENABLE_ATTN                 PPC_BIT(31)
>
> +#define POWER9_HID_ENABLE_ATTN                 PPC_BIT(3)
> +#define POWER9_HID_FLUSH_ICACHE                        PPC_BIT(2)
> +
>  static int set_attn(bool enable)
>  {
>         uint64_t hid;
> @@ -122,6 +125,17 @@ static int set_attn(bool enable)
>                                 return 0;
>                         hid &= ~POWER8_HID_ENABLE_ATTN;
>                 }
> +       } else if (pdbg_target_compatible(thread_target, "ibm,power9-thread")) {
> +               if (enable) {
> +                       if (hid & POWER9_HID_ENABLE_ATTN)
> +                               return 0;
> +                       hid |= POWER9_HID_ENABLE_ATTN;
> +               } else {
> +                       if (!(hid & POWER9_HID_ENABLE_ATTN))
> +                               return 0;
> +                       hid &= ~POWER9_HID_ENABLE_ATTN;
> +               }
> +               hid |= POWER9_HID_FLUSH_ICACHE;
>         } else {
>                 return -1;
>         }
> @@ -658,13 +672,20 @@ static int gdbserver(uint16_t port)
>                 return 0;
>         }
>
> -       //
> -       // Temporary until I can get this working a bit smoother on p9
> -       if (!pdbg_target_compatible(thread, "ibm,power8-thread")) {
> -               PR_ERROR("GDBSERVER is only available on POWER8\n");
> +       if (!pdbg_target_compatible(thread, "ibm,power8-thread") &&
> +           !pdbg_target_compatible(thread, "ibm,power9-thread")) {
> +               PR_ERROR("GDBSERVER is only available on POWER8 and POWER9\n");
>                 return -1;
>         }
>
> +       if (pdbg_target_compatible(thread, "ibm,power9-thread")) {
> +               /*
> +                * XXX: If we advertise no swbreak support on POWER9 does
> +                * that prevent the client using them?
> +                */
> +               PR_WARNING("Breakpoints may cause host crashes on POWER9 and should not be used\n");
> +       }
> +
>         /* Check endianess in MSR */
>         rc = thread_getmsr(thread, &msr);
>         if (rc) {
> --
> 2.35.1
>
> --
> Pdbg mailing list
> Pdbg at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/pdbg


More information about the Pdbg mailing list