qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v4 12/20] ppc/xics: Add xics to the monitor "inf


From: David Gibson
Subject: Re: [Qemu-devel] [PATCH v4 12/20] ppc/xics: Add xics to the monitor "info pic" command
Date: Fri, 14 Oct 2016 16:30:43 +1100
User-agent: Mutt/1.7.0 (2016-08-17)

On Mon, Oct 03, 2016 at 09:24:48AM +0200, Cédric Le Goater wrote:
> From: Benjamin Herrenschmidt <address@hidden>
> 
> Useful to debug interrupt problems.
> 
> Signed-off-by: Benjamin Herrenschmidt <address@hidden>
> [clg: - updated for qemu-2.7
>       - added a test on ->irqs as it is not necessarily allocated
>         (PHB3_MSI)
>       - removed static variable g_xics and replace with a loop on all
>         children to find the xics objects. ]
> Signed-off-by: Cédric Le Goater <address@hidden>

So, this is fine in principle.  However info pic has recently been
reworked to better allow different PICs to add stuff in there.  Your
patches will need to be reworked on top of that.

See 61b97833 and surrounding commits.

> ---
>  hmp-commands-info.hx  |  2 ++
>  hw/intc/xics.c        | 52 
> +++++++++++++++++++++++++++++++++++++++++++++++++++
>  hw/ppc/ppc.c          | 14 ++++++++++++++
>  include/hw/ppc/ppc.h  |  2 ++
>  include/hw/ppc/xics.h |  2 ++
>  monitor.c             |  4 ++++
>  6 files changed, 76 insertions(+)
> 
> diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
> index 19729e55aea2..ab11eaf54348 100644
> --- a/hmp-commands-info.hx
> +++ b/hmp-commands-info.hx
> @@ -203,6 +203,8 @@ ETEXI
>          .cmd        = sun4m_hmp_info_pic,
>  #elif defined(TARGET_LM32)
>          .cmd        = lm32_hmp_info_pic,
> +#elif defined(TARGET_PPC)
> +        .cmd        = ppc_hmp_info_pic,
>  #else
>          .cmd        = hmp_info_pic,
>  #endif
> diff --git a/hw/intc/xics.c b/hw/intc/xics.c
> index f40b00003a45..3bbbcc847791 100644
> --- a/hw/intc/xics.c
> +++ b/hw/intc/xics.c
> @@ -35,6 +35,7 @@
>  #include "hw/ppc/xics.h"
>  #include "qemu/error-report.h"
>  #include "qapi/visitor.h"
> +#include "monitor/monitor.h"
>  
>  int xics_get_cpu_index_by_dt_id(int cpu_dt_id)
>  {
> @@ -633,6 +634,57 @@ static int ics_simple_dispatch_post_load(void *opaque, 
> int version_id)
>      return 0;
>  }
>  
> +static int xics_hmp_info_pic_child(Object *child, void *opaque)
> +{
> +    Monitor *mon = opaque;
> +
> +    if (object_dynamic_cast(child, TYPE_XICS_COMMON)) {
> +        XICSState *xics = XICS_COMMON(child);
> +        ICSState *ics;
> +        uint32_t i;
> +
> +        for (i = 0; i < xics->nr_servers; i++) {
> +            ICPState *icp = &xics->ss[i];
> +
> +            if (!icp->output) {
> +                continue;
> +            }
> +            monitor_printf(mon, "CPU %d XIRR=%08x (%p) PP=%02x MFRR=%02x\n",
> +                           i, icp->xirr, icp->xirr_owner,
> +                           icp->pending_priority, icp->mfrr);
> +        }
> +
> +        QLIST_FOREACH(ics, &xics->ics, list) {
> +            monitor_printf(mon, "ICS %4x..%4x %p\n",
> +                           ics->offset, ics->offset + ics->nr_irqs - 1, ics);
> +
> +            if (!ics->irqs) {
> +                continue;
> +            }
> +
> +            for (i = 0; i < ics->nr_irqs; i++) {
> +                ICSIRQState *irq = ics->irqs + i;
> +
> +                if (!(irq->flags & XICS_FLAGS_IRQ_MASK)) {
> +                    continue;
> +                }
> +                monitor_printf(mon, "  %4x %s %02x %02x\n",
> +                               ics->offset + i,
> +                               (irq->flags & XICS_FLAGS_IRQ_LSI) ?
> +                               "LSI" : "MSI",
> +                               irq->priority, irq->status);
> +            }
> +        }
> +    }
> +    return 0;
> +}
> +
> +void xics_hmp_info_pic(Monitor *mon, const QDict *qdict)
> +{
> +    object_child_foreach_recursive(OBJECT(qdev_get_machine()),
> +                                   xics_hmp_info_pic_child, mon);
> +}
> +
>  static const VMStateDescription vmstate_ics_simple_irq = {
>      .name = "ics/irq",
>      .version_id = 2,
> diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c
> index 89458690097f..bc734281f509 100644
> --- a/hw/ppc/ppc.c
> +++ b/hw/ppc/ppc.c
> @@ -27,6 +27,7 @@
>  #include "hw/hw.h"
>  #include "hw/ppc/ppc.h"
>  #include "hw/ppc/ppc_e500.h"
> +#include "hw/i386/pc.h"
>  #include "qemu/timer.h"
>  #include "sysemu/sysemu.h"
>  #include "sysemu/cpus.h"
> @@ -39,6 +40,10 @@
>  #include "kvm_ppc.h"
>  #include "trace.h"
>  
> +#if defined(TARGET_PPC64)
> +#include "hw/ppc/xics.h"
> +#endif
> +
>  //#define PPC_DEBUG_IRQ
>  //#define PPC_DEBUG_TB
>  
> @@ -1376,3 +1381,12 @@ void ppc_cpu_parse_features(const char *cpu_model)
>      cc->parse_features(typename, model_pieces[1], &error_fatal);
>      g_strfreev(model_pieces);
>  }
> +
> +void ppc_hmp_info_pic(Monitor *mon, const QDict *qdict)
> +{
> +    /* Call in turn every PIC around. OpenPIC doesn't have one yet */
> +#ifdef TARGET_PPC64
> +    xics_hmp_info_pic(mon, qdict);
> +#endif
> +    hmp_info_pic(mon, qdict);
> +}
> diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h
> index 00c1fb1e720a..b36024a1213c 100644
> --- a/include/hw/ppc/ppc.h
> +++ b/include/hw/ppc/ppc.h
> @@ -3,6 +3,8 @@
>  
>  #include "target-ppc/cpu-qom.h"
>  
> +void ppc_hmp_info_pic(Monitor *mon, const QDict *qdict);
> +
>  void ppc_set_irq(PowerPCCPU *cpu, int n_IRQ, int level);
>  
>  /* PowerPC hardware exceptions management helpers */
> diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
> index 66ae55ded387..ca9f8da542e0 100644
> --- a/include/hw/ppc/xics.h
> +++ b/include/hw/ppc/xics.h
> @@ -205,4 +205,6 @@ void ics_set_irq_type(ICSState *ics, int srcno, bool lsi);
>  
>  ICSState *xics_find_source(XICSState *icp, int irq);
>  
> +void xics_hmp_info_pic(Monitor *mon, const QDict *qdict);
> +
>  #endif /* XICS_H */
> diff --git a/monitor.c b/monitor.c
> index 83c4edfce08e..70e17fa9f1fd 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -91,6 +91,10 @@
>  #include "hw/s390x/storage-keys.h"
>  #endif
>  
> +#if defined(TARGET_PPC)
> +#include "hw/ppc/ppc.h"
> +#endif
> +
>  /*
>   * Supported types:
>   *

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]