From: "Andreas Färber" <afaerber@suse.de>
To: qemu-devel@nongnu.org
Cc: "xiaoqiang zhao" <zxq_yx_007@163.com>,
"Andreas Färber" <afaerber@suse.de>,
"Anthony Liguori" <aliguori@amazon.com>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: [Qemu-devel] [PULL 23/24] ioapic: QOM'ify ioapic
Date: Tue, 24 Dec 2013 17:57:16 +0100 [thread overview]
Message-ID: <1387904237-6941-24-git-send-email-afaerber@suse.de> (raw)
In-Reply-To: <1387904237-6941-1-git-send-email-afaerber@suse.de>
From: xiaoqiang zhao <zxq_yx_007@163.com>
Convert 'init' function to QOM's 'realize' for ioapic and kvm-ioapic.
Change variable 'ioapic_no' from static to global. Then we can drop
the 'instance_no' function argument.
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/i386/kvm/ioapic.c | 6 +++---
hw/intc/ioapic.c | 11 +++++++----
hw/intc/ioapic_common.c | 11 +++++++++--
include/hw/i386/ioapic_internal.h | 3 ++-
4 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/hw/i386/kvm/ioapic.c b/hw/i386/kvm/ioapic.c
index 772a712..d2a6c4c 100644
--- a/hw/i386/kvm/ioapic.c
+++ b/hw/i386/kvm/ioapic.c
@@ -127,9 +127,9 @@ static void kvm_ioapic_set_irq(void *opaque, int irq, int level)
apic_report_irq_delivered(delivered);
}
-static void kvm_ioapic_init(IOAPICCommonState *s, int instance_no)
+static void kvm_ioapic_realize(DeviceState *dev, Error **errp)
{
- DeviceState *dev = DEVICE(s);
+ IOAPICCommonState *s = IOAPIC_COMMON(dev);
memory_region_init_reservation(&s->io_memory, NULL, "kvm-ioapic", 0x1000);
@@ -146,7 +146,7 @@ static void kvm_ioapic_class_init(ObjectClass *klass, void *data)
IOAPICCommonClass *k = IOAPIC_COMMON_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
- k->init = kvm_ioapic_init;
+ k->realize = kvm_ioapic_realize;
k->pre_save = kvm_ioapic_get;
k->post_load = kvm_ioapic_put;
dc->reset = kvm_ioapic_reset;
diff --git a/hw/intc/ioapic.c b/hw/intc/ioapic.c
index 8842845..652dd47 100644
--- a/hw/intc/ioapic.c
+++ b/hw/intc/ioapic.c
@@ -36,6 +36,9 @@
static IOAPICCommonState *ioapics[MAX_IOAPICS];
+/* global variable from ioapic_common.c */
+extern int ioapic_no;
+
static void ioapic_service(IOAPICCommonState *s)
{
uint8_t i;
@@ -225,16 +228,16 @@ static const MemoryRegionOps ioapic_io_ops = {
.endianness = DEVICE_NATIVE_ENDIAN,
};
-static void ioapic_init(IOAPICCommonState *s, int instance_no)
+static void ioapic_realize(DeviceState *dev, Error **errp)
{
- DeviceState *dev = DEVICE(s);
+ IOAPICCommonState *s = IOAPIC_COMMON(dev);
memory_region_init_io(&s->io_memory, OBJECT(s), &ioapic_io_ops, s,
"ioapic", 0x1000);
qdev_init_gpio_in(dev, ioapic_set_irq, IOAPIC_NUM_PINS);
- ioapics[instance_no] = s;
+ ioapics[ioapic_no] = s;
}
static void ioapic_class_init(ObjectClass *klass, void *data)
@@ -242,7 +245,7 @@ static void ioapic_class_init(ObjectClass *klass, void *data)
IOAPICCommonClass *k = IOAPIC_COMMON_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
- k->init = ioapic_init;
+ k->realize = ioapic_realize;
dc->reset = ioapic_reset_common;
}
diff --git a/hw/intc/ioapic_common.c b/hw/intc/ioapic_common.c
index 4611f7f..4d3d309 100644
--- a/hw/intc/ioapic_common.c
+++ b/hw/intc/ioapic_common.c
@@ -23,6 +23,14 @@
#include "hw/i386/ioapic_internal.h"
#include "hw/sysbus.h"
+/* ioapic_no count start from 0 to MAX_IOAPICS,
+ * remove as static variable from ioapic_common_init.
+ * now as a global variable, let child to increase the counter
+ * then we can drop the 'instance_no' argument
+ * and convert to our QOM's realize function
+ */
+int ioapic_no;
+
void ioapic_reset_common(DeviceState *dev)
{
IOAPICCommonState *s = IOAPIC_COMMON(dev);
@@ -61,7 +69,6 @@ static void ioapic_common_realize(DeviceState *dev, Error **errp)
{
IOAPICCommonState *s = IOAPIC_COMMON(dev);
IOAPICCommonClass *info;
- static int ioapic_no;
if (ioapic_no >= MAX_IOAPICS) {
error_setg(errp, "Only %d ioapics allowed", MAX_IOAPICS);
@@ -69,7 +76,7 @@ static void ioapic_common_realize(DeviceState *dev, Error **errp)
}
info = IOAPIC_COMMON_GET_CLASS(s);
- info->init(s, ioapic_no);
+ info->realize(dev, errp);
sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->io_memory);
ioapic_no++;
diff --git a/include/hw/i386/ioapic_internal.h b/include/hw/i386/ioapic_internal.h
index 25576c8..3be3352 100644
--- a/include/hw/i386/ioapic_internal.h
+++ b/include/hw/i386/ioapic_internal.h
@@ -83,7 +83,8 @@ typedef struct IOAPICCommonState IOAPICCommonState;
typedef struct IOAPICCommonClass {
SysBusDeviceClass parent_class;
- void (*init)(IOAPICCommonState *s, int instance_no);
+
+ DeviceRealize realize;
void (*pre_save)(IOAPICCommonState *s);
void (*post_load)(IOAPICCommonState *s);
} IOAPICCommonClass;
--
1.8.4
next prev parent reply other threads:[~2013-12-24 16:57 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-24 16:56 [Qemu-devel] [PULL 00/24] QOM devices patch queue 2013-12-24 Andreas Färber
2013-12-24 16:56 ` [Qemu-devel] [PULL 01/24] qdev: Replace no_user by cannot_instantiate_with_device_add_yet Andreas Färber
2013-12-24 16:56 ` [Qemu-devel] [PULL 02/24] sysbus: Set cannot_instantiate_with_device_add_yet Andreas Färber
2013-12-24 16:56 ` [Qemu-devel] [PULL 03/24] cpu: Document why cannot_instantiate_with_device_add_yet Andreas Färber
2013-12-24 16:56 ` [Qemu-devel] [PULL 04/24] apic: " Andreas Färber
2013-12-24 16:56 ` [Qemu-devel] [PULL 05/24] pci-host: Consistently set cannot_instantiate_with_device_add_yet Andreas Färber
2013-12-24 16:56 ` [Qemu-devel] [PULL 06/24] ich9: Document why cannot_instantiate_with_device_add_yet Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 07/24] piix3 piix4: Clean up use of cannot_instantiate_with_device_add_yet Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 08/24] vt82c686: " Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 09/24] isa: " Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 10/24] qdev: Do not let the user try to device_add when it cannot work Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 11/24] qdev-monitor: Avoid device_add crashing on non-device driver name Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 12/24] hw: cannot_instantiate_with_device_add_yet due to pointer props Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 13/24] qdev: Document that pointer properties kill device_add Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 14/24] qom: Split out object and class caches Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 15/24] qom: Do not register interface "types" in the type table and fix names Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 16/24] tests: Test QOM interface casting Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 17/24] qom: Detect bad reentrance during object_class_foreach() Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 18/24] qdev: Drop misleading qbus_free() function Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 19/24] apic: Cleanup for QOM'ification Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 20/24] apic: QOM'ify APIC Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 21/24] icc_bus: QOM'ify ICC Andreas Färber
2013-12-24 16:57 ` [Qemu-devel] [PULL 22/24] ioapic: Cleanup for QOM'ification Andreas Färber
2013-12-24 16:57 ` Andreas Färber [this message]
2013-12-24 16:57 ` [Qemu-devel] [PULL 24/24] qdev-monitor: Improve error message for -device nonexistant Andreas Färber
2013-12-24 17:01 ` [Qemu-devel] [PULL 00/24] QOM devices patch queue 2013-12-24 Andreas Färber
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=1387904237-6941-24-git-send-email-afaerber@suse.de \
--to=afaerber@suse.de \
--cc=aliguori@amazon.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=zxq_yx_007@163.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).