From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44014) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1buwWT-0002CX-NK for qemu-devel@nongnu.org; Fri, 14 Oct 2016 03:03:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1buwWQ-0005DI-Bu for qemu-devel@nongnu.org; Fri, 14 Oct 2016 03:03:17 -0400 Date: Fri, 14 Oct 2016 16:30:43 +1100 From: David Gibson Message-ID: <20161014053043.GL28562@umbus> References: <1475479496-16158-1-git-send-email-clg@kaod.org> <1475479496-16158-13-git-send-email-clg@kaod.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="cy9Nn4fUvYST66Pl" Content-Disposition: inline In-Reply-To: <1475479496-16158-13-git-send-email-clg@kaod.org> Subject: Re: [Qemu-devel] [PATCH v4 12/20] ppc/xics: Add xics to the monitor "info pic" command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?iso-8859-1?Q?C=E9dric?= Le Goater Cc: qemu-ppc@nongnu.org, Benjamin Herrenschmidt , qemu-devel@nongnu.org --cy9Nn4fUvYST66Pl Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Oct 03, 2016 at 09:24:48AM +0200, C=E9dric Le Goater wrote: > From: Benjamin Herrenschmidt >=20 > Useful to debug interrupt problems. >=20 > Signed-off-by: Benjamin Herrenschmidt > [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=E9dric Le Goater 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(+) >=20 > 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 =3D sun4m_hmp_info_pic, > #elif defined(TARGET_LM32) > .cmd =3D lm32_hmp_info_pic, > +#elif defined(TARGET_PPC) > + .cmd =3D ppc_hmp_info_pic, > #else > .cmd =3D 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" > =20 > int xics_get_cpu_index_by_dt_id(int cpu_dt_id) > { > @@ -633,6 +634,57 @@ static int ics_simple_dispatch_post_load(void *opaqu= e, int version_id) > return 0; > } > =20 > +static int xics_hmp_info_pic_child(Object *child, void *opaque) > +{ > + Monitor *mon =3D opaque; > + > + if (object_dynamic_cast(child, TYPE_XICS_COMMON)) { > + XICSState *xics =3D XICS_COMMON(child); > + ICSState *ics; > + uint32_t i; > + > + for (i =3D 0; i < xics->nr_servers; i++) { > + ICPState *icp =3D &xics->ss[i]; > + > + if (!icp->output) { > + continue; > + } > + monitor_printf(mon, "CPU %d XIRR=3D%08x (%p) PP=3D%02x MFRR= =3D%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 =3D 0; i < ics->nr_irqs; i++) { > + ICSIRQState *irq =3D 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 =3D { > .name =3D "ics/irq", > .version_id =3D 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" > =20 > +#if defined(TARGET_PPC64) > +#include "hw/ppc/xics.h" > +#endif > + > //#define PPC_DEBUG_IRQ > //#define PPC_DEBUG_TB > =20 > @@ -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 @@ > =20 > #include "target-ppc/cpu-qom.h" > =20 > +void ppc_hmp_info_pic(Monitor *mon, const QDict *qdict); > + > void ppc_set_irq(PowerPCCPU *cpu, int n_IRQ, int level); > =20 > /* 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); > =20 > ICSState *xics_find_source(XICSState *icp, int irq); > =20 > +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 > =20 > +#if defined(TARGET_PPC) > +#include "hw/ppc/ppc.h" > +#endif > + > /* > * Supported types: > * --=20 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 --cy9Nn4fUvYST66Pl Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJYAG2AAAoJEGw4ysog2bOSvysQAK9EAf2HIGLkF8W1nKY7j919 a60qZGOq+oRg6KRNSKxwUkYh2BjFNQmJP8NWU7ICgMEA9GylAef1t4Gq+E9YgI6O CSoCc5KCAYDXWWnDJrQ5IoqLUqmIYbE8CTqsonvJYzwifhCV53YyAr+E0EPmXJg5 +O5wYgSR2Cgy7hpFOmrJ88UrIBmktez2HWW/Y44x5VR9YQxgkVjkSzXkGhHA2CYC YArhqQS5++cd45/fGR+qXZh3MmB61axPQ4hcyuqdQe/nctBXrQhOydBV/UX4Ey+3 tBMK7Ita9wWfhb4BfRb4eO/ja+onOqYwZ31y+VeIhEmpnnfLc3jCygiFHaMA1qYH geVdQH9xfJNJeoy1ua160QIMJbqT3H/vXafph+/LWKdB4Ys1CTihJpupag0E611R 7x9SGTX70jfHrawbDIRz2zbfmAYgYWma6fzZrPToDr1OOrWl1h7Fg6oW++0ePo+o IrjZXinjxgqo1i9wOeXTtOZDtT4VA2Z2ZCfaB906YayLCV0O0JbvOeEfNrIKErcm t9E6P6gLZ0T3cxQ9h+UrZYwFRaQtCgOGJ1nTBDZmOXoJrjhq6cw0z34J/Vsu/F6Z jvqYle7NRBbtn5wIDkrqR3wKK8zV1AoUje45eW072okx7gf2gF3kUTmueYUGksxV JzOCtSVGCIp0JTIAeP7l =sFBL -----END PGP SIGNATURE----- --cy9Nn4fUvYST66Pl--