All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: agraf@suse.de, mst@redhat.com, andreas.faerber@web.de,
	lcapitulino@redhat.com
Cc: blauwirbel@gmail.com, michael@walle.cc, qemu-ppc@nongnu.org,
	qemu-devel@nongnu.org, David Gibson <david@gibson.dropbear.id.au>
Subject: [Qemu-devel] [PATCH 2/6] Remove monitor.c dependency on CONFIG_I8259
Date: Fri,  6 Mar 2015 15:18:22 +1100	[thread overview]
Message-ID: <1425615506-1829-3-git-send-email-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <1425615506-1829-1-git-send-email-david@gibson.dropbear.id.au>

The hmp commands "irq" and "pic" are a bit of a mess.  They're implemented
on a number of targets, but not all.  On sparc32 and LM32 they do target
specific things, but on the remainder (i386, ppc and mips) they call into
the i8259 PIC code.

But really, what these commands do shouldn't be dependent on the target
arch, but on the specific machine that's in use.  On ppc, for example,
the "prep" machine usually does have an ISA bridge with an i8259, but
most of the other machine types have never had an i8259 at all.  Similarly
the sparc specific target would stop working if we ever had a sparc32
machine that wasn't sun4m.

This patch cleans things up by implementing these hmp commands on all
targets via a MachineClass callback.  If the callback is NULL, for now
we fallback to target specific defaults that match the existing behaviour.
The hope is we can remove those later with target specific cleanups.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/intc/i8259.c      |  4 ++--
 include/hw/boards.h  |  2 ++
 include/hw/i386/pc.h |  4 ++--
 monitor.c            | 57 ++++++++++++++++++++++++++++++++++++++--------------
 4 files changed, 48 insertions(+), 19 deletions(-)

diff --git a/hw/intc/i8259.c b/hw/intc/i8259.c
index 0f5c025..43e90b9 100644
--- a/hw/intc/i8259.c
+++ b/hw/intc/i8259.c
@@ -429,7 +429,7 @@ static void pic_realize(DeviceState *dev, Error **errp)
     pc->parent_realize(dev, errp);
 }
 
-void hmp_info_pic(Monitor *mon, const QDict *qdict)
+void i8259_hmp_info_pic(Monitor *mon, const QDict *qdict)
 {
     int i;
     PICCommonState *s;
@@ -447,7 +447,7 @@ void hmp_info_pic(Monitor *mon, const QDict *qdict)
     }
 }
 
-void hmp_info_irq(Monitor *mon, const QDict *qdict)
+void i8259_hmp_info_irq(Monitor *mon, const QDict *qdict)
 {
 #ifndef DEBUG_IRQ_COUNT
     monitor_printf(mon, "irq statistic code not compiled.\n");
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 3ddc449..214a778 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -111,6 +111,8 @@ struct MachineClass {
 
     HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
                                            DeviceState *dev);
+    void (*hmp_info_irq)(Monitor *mon, const QDict *qdict);
+    void (*hmp_info_pic)(Monitor *mon, const QDict *qdict);
 };
 
 /**
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 08ab67d..0f376c6 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -121,8 +121,8 @@ qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq);
 qemu_irq *kvm_i8259_init(ISABus *bus);
 int pic_read_irq(DeviceState *d);
 int pic_get_output(DeviceState *d);
-void hmp_info_pic(Monitor *mon, const QDict *qdict);
-void hmp_info_irq(Monitor *mon, const QDict *qdict);
+void i8259_hmp_info_pic(Monitor *mon, const QDict *qdict);
+void i8259_hmp_info_irq(Monitor *mon, const QDict *qdict);
 
 /* Global System Interrupts */
 
diff --git a/monitor.c b/monitor.c
index c86a89e..ca226a9 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1064,6 +1064,48 @@ static void hmp_info_history(Monitor *mon, const QDict *qdict)
     }
 }
 
+static void hmp_info_pic(Monitor *mon, const QDict *qdict)
+{
+    MachineClass *mc = MACHINE_GET_CLASS(current_machine);
+
+    if (mc->hmp_info_pic) {
+        (mc->hmp_info_pic)(mon, qdict);
+    } else {
+        /* FIXME: Backwards compat fallbacks.  These can go away once
+         * we've finished converting to natively using MachineClass,
+         * rather thatn QEMUMachine */
+#if defined(TARGET_SPARC) && !defined(TARGET_SPARC64)
+        sun4m_hmp_info_pic(mon, qdict);
+#elif defined(TARGET_LM32)
+        lm32_hmp_info_pic(mon, qdict);
+#elif defined(TARGET_i386) || defined(TARGET_PPC) || defined(TARGET_MIPS)
+        i8259_hmp_info_pic(mon, qdict);
+#endif
+    }
+}
+
+static void hmp_info_irq(Monitor *mon, const QDict *qdict)
+{
+    /* FIXME: The ifdefs can go away once the sun4m and LM32 machines
+     * are converted to use machine classes natively */
+    MachineClass *mc = MACHINE_GET_CLASS(current_machine);
+
+    if (mc->hmp_info_irq) {
+        (mc->hmp_info_irq)(mon, qdict);
+    } else {
+        /* FIXME: Backwards compat fallbacks.  These can go away once
+         * we've finished converting to natively using MachineClass,
+         * rather thatn QEMUMachine */
+#if defined(TARGET_SPARC) && !defined(TARGET_SPARC64)
+        sun4m_hmp_info_irq(mon, qdict);
+#elif defined(TARGET_LM32)
+        lm32_hmp_info_irq(mon, qdict);
+#elif defined(TARGET_i386) || defined(TARGET_PPC) || defined(TARGET_MIPS)
+        i8259_hmp_info_irq(mon, qdict);
+#endif
+    }
+}
+
 static void hmp_info_cpustats(Monitor *mon, const QDict *qdict)
 {
     CPUState *cpu;
@@ -2661,35 +2703,20 @@ static mon_cmd_t info_cmds[] = {
         .help       = "show the command line history",
         .mhandler.cmd = hmp_info_history,
     },
-#if defined(TARGET_I386) || defined(TARGET_PPC) || defined(TARGET_MIPS) || \
-    defined(TARGET_LM32) || (defined(TARGET_SPARC) && !defined(TARGET_SPARC64))
     {
         .name       = "irq",
         .args_type  = "",
         .params     = "",
         .help       = "show the interrupts statistics (if available)",
-#ifdef TARGET_SPARC
-        .mhandler.cmd = sun4m_hmp_info_irq,
-#elif defined(TARGET_LM32)
-        .mhandler.cmd = lm32_hmp_info_irq,
-#else
         .mhandler.cmd = hmp_info_irq,
-#endif
     },
     {
         .name       = "pic",
         .args_type  = "",
         .params     = "",
         .help       = "show i8259 (PIC) state",
-#ifdef TARGET_SPARC
-        .mhandler.cmd = sun4m_hmp_info_pic,
-#elif defined(TARGET_LM32)
-        .mhandler.cmd = lm32_hmp_info_pic,
-#else
         .mhandler.cmd = hmp_info_pic,
-#endif
     },
-#endif
     {
         .name       = "pci",
         .args_type  = "",
-- 
2.1.0

  parent reply	other threads:[~2015-03-06  4:17 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-06  4:18 [Qemu-devel] [PATCH 0/6] Clean up ISA dependencies so we make ISA optional to build David Gibson
2015-03-06  4:18 ` [Qemu-devel] [PATCH 1/6] Split serial-isa into its own config option David Gibson
2015-03-30  7:28   ` Markus Armbruster
2015-03-31  5:36     ` David Gibson
2015-03-06  4:18 ` David Gibson [this message]
2015-03-30  7:49   ` [Qemu-devel] [PATCH 2/6] Remove monitor.c dependency on CONFIG_I8259 Markus Armbruster
2015-03-30  8:37     ` Markus Armbruster
2015-03-31  0:05       ` David Gibson
2015-03-31  9:57         ` Markus Armbruster
2015-04-01  0:40           ` David Gibson
2015-03-30 21:41   ` Andreas Färber
2015-03-31 10:07   ` Peter Maydell
2015-03-06  4:18 ` [Qemu-devel] [PATCH 3/6] pc: Use MachineClass callbacks for "irq" and "pic" hmp commands David Gibson
2015-03-30 21:47   ` Andreas Färber
2015-03-06  4:18 ` [Qemu-devel] [PATCH 4/6] target-ppc: Convert PReP to machine class David Gibson
2015-03-30 21:33   ` Andreas Färber
2015-03-31  5:40     ` David Gibson
2015-03-06  4:18 ` [Qemu-devel] [PATCH 5/6] prep: Use MachineClass callbacks for "irq" and "pic" hmp commands David Gibson
2015-03-30 21:25   ` Andreas Färber
2015-03-06  4:18 ` [Qemu-devel] [PATCH 6/6] Allow ISA bus to be configured out David Gibson
2015-03-06 11:41 ` [Qemu-devel] [PATCH 0/6] Clean up ISA dependencies so we make ISA optional to build Alexander Graf
2015-03-10 14:20 ` Michael S. Tsirkin
2015-03-10 14:56   ` Luiz Capitulino
2015-03-30  2:41     ` David Gibson
2015-03-30  8:48       ` Markus Armbruster
2015-03-30 17:45       ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1425615506-1829-3-git-send-email-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --cc=agraf@suse.de \
    --cc=andreas.faerber@web.de \
    --cc=blauwirbel@gmail.com \
    --cc=lcapitulino@redhat.com \
    --cc=michael@walle.cc \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.