* [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit()
@ 2018-01-16 13:15 Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 01/11] smbus: add a NULL check for SMBusDeviceClass::init callbacks Philippe Mathieu-Daudé
` (11 more replies)
0 siblings, 12 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé,
qemu-devel, Cornelia Huck, Christian Borntraeger,
Michael S. Tsirkin, Corey Minyard, Gerd Hoffmann, David Gibson,
Dr. David Alan Gilbert, Thomas Huth, Cédric Le Goater
Hi,
This series finalize the qdev QOMification.
We first convert the I2CSlave/SMBusDevice,
then the usb-ccid and virtio-ccw,
and finally the SysBusDevice.
At the end we get one less TODO :)
/* TODO remove, once users are converted to unrealize */
There is still one standing in SysBusDeviceClass::init().
Regards,
Phil.
Philippe Mathieu-Daudé (11):
smbus: add a NULL check for SMBusDeviceClass::init callbacks
smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset
hw/i2c: convert I2CSlaveClass::init -> realize
usb-ccid: convert CCIDCardClass::init -> realize
virtio-ccw: convert VirtIOCCWDeviceClass::init -> realize
sysbus: add realize() and unrealize()
qdev: simplify the SysBusDeviceClass::init path
qdev: remove DeviceClass::init
qdev: remove DeviceClass::exit
qdev: remove empty realize/unrealize stubs
qdev: rename typedef qdev_resetfn() -> DeviceReset()
hw/s390x/virtio-ccw.h | 2 +-
hw/usb/ccid.h | 9 +++++--
include/hw/i2c/i2c.h | 2 +-
include/hw/i2c/smbus.h | 2 +-
include/hw/qdev-core.h | 8 ++----
include/hw/sysbus.h | 4 +++
hw/audio/wm8750.c | 8 +++---
hw/core/qdev.c | 28 ---------------------
hw/core/sysbus.c | 30 +++++++++++++++++++----
hw/display/ssd0303.c | 5 ++--
hw/gpio/max7310.c | 6 ++---
hw/i2c/core.c | 10 +++-----
hw/i2c/smbus.c | 8 +++---
hw/i2c/smbus_eeprom.c | 5 ++--
hw/input/lm832x.c | 5 ++--
hw/misc/tmp105.c | 6 ++---
hw/misc/tmp421.c | 6 ++---
hw/nvram/eeprom_at24c.c | 24 +++++++++---------
hw/s390x/virtio-ccw.c | 35 +++++++++++++-------------
hw/timer/twl92230.c | 12 ++++-----
hw/usb/ccid-card-emulated.c | 42 ++++++++++++++++---------------
hw/usb/ccid-card-passthru.c | 10 ++++----
hw/usb/dev-smartcard-reader.c | 57 +++++++++++++++----------------------------
23 files changed, 145 insertions(+), 179 deletions(-)
--
2.15.1
^ permalink raw reply [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 01/11] smbus: add a NULL check for SMBusDeviceClass::init callbacks
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-19 17:58 ` Eduardo Habkost
2018-01-16 13:15 ` [Qemu-devel] [PATCH 02/11] smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset Philippe Mathieu-Daudé
` (10 subsequent siblings)
11 siblings, 1 reply; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel
ensure SMBusDeviceClass::init is set before calling it
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/i2c/smbus.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/hw/i2c/smbus.c b/hw/i2c/smbus.c
index 2d1b79a689..a90d65ef37 100644
--- a/hw/i2c/smbus.c
+++ b/hw/i2c/smbus.c
@@ -207,7 +207,11 @@ static int smbus_device_init(I2CSlave *i2c)
SMBusDevice *dev = SMBUS_DEVICE(i2c);
SMBusDeviceClass *sc = SMBUS_DEVICE_GET_CLASS(dev);
- return sc->init(dev);
+ if (sc->init) {
+ return sc->init(dev);
+ }
+
+ return 0;
}
/* Master device commands. */
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 02/11] smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 01/11] smbus: add a NULL check for SMBusDeviceClass::init callbacks Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-19 18:15 ` Eduardo Habkost
2018-01-16 13:15 ` [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize Philippe Mathieu-Daudé
` (9 subsequent siblings)
11 siblings, 1 reply; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/i2c/smbus_eeprom.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c
index b13ec0fe7a..7e81ae4fe5 100644
--- a/hw/i2c/smbus_eeprom.c
+++ b/hw/i2c/smbus_eeprom.c
@@ -97,12 +97,11 @@ static uint8_t eeprom_read_data(SMBusDevice *dev, uint8_t cmd, int n)
return eeprom_receive_byte(dev);
}
-static int smbus_eeprom_initfn(SMBusDevice *dev)
+static void smbus_eeprom_reset(DeviceState *dev)
{
SMBusEEPROMDevice *eeprom = (SMBusEEPROMDevice *)dev;
eeprom->offset = 0;
- return 0;
}
static Property smbus_eeprom_properties[] = {
@@ -115,7 +114,7 @@ static void smbus_eeprom_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
SMBusDeviceClass *sc = SMBUS_DEVICE_CLASS(klass);
- sc->init = smbus_eeprom_initfn;
+ dc->reset = smbus_eeprom_reset;
sc->quick_cmd = eeprom_quick_cmd;
sc->send_byte = eeprom_send_byte;
sc->receive_byte = eeprom_receive_byte;
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 01/11] smbus: add a NULL check for SMBusDeviceClass::init callbacks Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 02/11] smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-16 14:09 ` Philippe Mathieu-Daudé
2018-01-19 18:18 ` Eduardo Habkost
2018-01-16 13:15 ` [Qemu-devel] [PATCH 04/11] usb-ccid: convert CCIDCardClass::init " Philippe Mathieu-Daudé
` (8 subsequent siblings)
11 siblings, 2 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel, Gerd Hoffmann
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
include/hw/i2c/i2c.h | 2 +-
include/hw/i2c/smbus.h | 2 +-
hw/audio/wm8750.c | 8 +++-----
hw/display/ssd0303.c | 5 ++---
hw/gpio/max7310.c | 6 ++----
hw/i2c/core.c | 10 ++++------
hw/i2c/smbus.c | 10 ++++------
hw/input/lm832x.c | 5 ++---
hw/misc/tmp105.c | 6 ++----
hw/misc/tmp421.c | 6 ++----
hw/nvram/eeprom_at24c.c | 24 +++++++++++-------------
hw/timer/twl92230.c | 12 +++++-------
12 files changed, 39 insertions(+), 57 deletions(-)
diff --git a/include/hw/i2c/i2c.h b/include/hw/i2c/i2c.h
index 2ce611d4c8..4a9344b75c 100644
--- a/include/hw/i2c/i2c.h
+++ b/include/hw/i2c/i2c.h
@@ -30,7 +30,7 @@ typedef struct I2CSlaveClass
DeviceClass parent_class;
/* Callbacks provided by the device. */
- int (*init)(I2CSlave *dev);
+ void (*realize)(I2CSlave *slave, Error **errp);
/* Master to slave. Returns non-zero for a NAK, 0 for success. */
int (*send)(I2CSlave *s, uint8_t data);
diff --git a/include/hw/i2c/smbus.h b/include/hw/i2c/smbus.h
index 544bbc1957..da31894383 100644
--- a/include/hw/i2c/smbus.h
+++ b/include/hw/i2c/smbus.h
@@ -38,7 +38,7 @@
typedef struct SMBusDeviceClass
{
I2CSlaveClass parent_class;
- int (*init)(SMBusDevice *dev);
+ void (*realize)(SMBusDevice *dev, Error **errp);
void (*quick_cmd)(SMBusDevice *dev, uint8_t read);
void (*send_byte)(SMBusDevice *dev, uint8_t val);
uint8_t (*receive_byte)(SMBusDevice *dev);
diff --git a/hw/audio/wm8750.c b/hw/audio/wm8750.c
index 8bb44a7cc1..c209334f4e 100644
--- a/hw/audio/wm8750.c
+++ b/hw/audio/wm8750.c
@@ -618,14 +618,12 @@ static const VMStateDescription vmstate_wm8750 = {
}
};
-static int wm8750_init(I2CSlave *i2c)
+static void wm8750_realize(I2CSlave *slave, Error **errp)
{
- WM8750State *s = WM8750(i2c);
+ WM8750State *s = WM8750(slave);
AUD_register_card(CODEC, &s->card);
wm8750_reset(I2C_SLAVE(s));
-
- return 0;
}
#if 0
@@ -709,7 +707,7 @@ static void wm8750_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
I2CSlaveClass *sc = I2C_SLAVE_CLASS(klass);
- sc->init = wm8750_init;
+ sc->realize = wm8750_realize;
sc->event = wm8750_event;
sc->recv = wm8750_rx;
sc->send = wm8750_tx;
diff --git a/hw/display/ssd0303.c b/hw/display/ssd0303.c
index 68a80b9d64..c4cd059a52 100644
--- a/hw/display/ssd0303.c
+++ b/hw/display/ssd0303.c
@@ -297,13 +297,12 @@ static const GraphicHwOps ssd0303_ops = {
.gfx_update = ssd0303_update_display,
};
-static int ssd0303_init(I2CSlave *i2c)
+static void ssd0303_realize(I2CSlave *i2c, Error **errp)
{
ssd0303_state *s = SSD0303(i2c);
s->con = graphic_console_init(DEVICE(i2c), 0, &ssd0303_ops, s);
qemu_console_resize(s->con, 96 * MAGNIFY, 16 * MAGNIFY);
- return 0;
}
static void ssd0303_class_init(ObjectClass *klass, void *data)
@@ -311,7 +310,7 @@ static void ssd0303_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
- k->init = ssd0303_init;
+ k->realize = ssd0303_realize;
k->event = ssd0303_event;
k->recv = ssd0303_recv;
k->send = ssd0303_send;
diff --git a/hw/gpio/max7310.c b/hw/gpio/max7310.c
index f82e3e6555..070da0e4dc 100644
--- a/hw/gpio/max7310.c
+++ b/hw/gpio/max7310.c
@@ -182,14 +182,12 @@ static void max7310_gpio_set(void *opaque, int line, int level)
/* MAX7310 is SMBus-compatible (can be used with only SMBus protocols),
* but also accepts sequences that are not SMBus so return an I2C device. */
-static int max7310_init(I2CSlave *i2c)
+static void max7310_realize(I2CSlave *i2c, Error **errp)
{
MAX7310State *s = MAX7310(i2c);
qdev_init_gpio_in(&i2c->qdev, max7310_gpio_set, 8);
qdev_init_gpio_out(&i2c->qdev, s->handler, 8);
-
- return 0;
}
static void max7310_class_init(ObjectClass *klass, void *data)
@@ -197,7 +195,7 @@ static void max7310_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
- k->init = max7310_init;
+ k->realize = max7310_realize;
k->event = max7310_event;
k->recv = max7310_rx;
k->send = max7310_tx;
diff --git a/hw/i2c/core.c b/hw/i2c/core.c
index 59068f157e..f9f48a1666 100644
--- a/hw/i2c/core.c
+++ b/hw/i2c/core.c
@@ -276,16 +276,14 @@ const VMStateDescription vmstate_i2c_slave = {
}
};
-static int i2c_slave_qdev_init(DeviceState *dev)
+static void i2c_slave_realize(DeviceState *dev, Error **errp)
{
I2CSlave *s = I2C_SLAVE(dev);
I2CSlaveClass *sc = I2C_SLAVE_GET_CLASS(s);
- if (sc->init) {
- return sc->init(s);
+ if (sc->realize) {
+ return sc->realize(s, errp);
}
-
- return 0;
}
DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
@@ -301,7 +299,7 @@ DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
static void i2c_slave_class_init(ObjectClass *klass, void *data)
{
DeviceClass *k = DEVICE_CLASS(klass);
- k->init = i2c_slave_qdev_init;
+ k->realize = i2c_slave_realize;
set_bit(DEVICE_CATEGORY_MISC, k->categories);
k->bus_type = TYPE_I2C_BUS;
k->props = i2c_props;
diff --git a/hw/i2c/smbus.c b/hw/i2c/smbus.c
index a90d65ef37..a5293c2552 100644
--- a/hw/i2c/smbus.c
+++ b/hw/i2c/smbus.c
@@ -202,16 +202,14 @@ static int smbus_i2c_send(I2CSlave *s, uint8_t data)
return 0;
}
-static int smbus_device_init(I2CSlave *i2c)
+static void smbus_device_realize(I2CSlave *i2c, Error **errp)
{
SMBusDevice *dev = SMBUS_DEVICE(i2c);
SMBusDeviceClass *sc = SMBUS_DEVICE_GET_CLASS(dev);
- if (sc->init) {
- return sc->init(dev);
+ if (sc->realize) {
+ sc->realize(dev, errp);
}
-
- return 0;
}
/* Master device commands. */
@@ -354,7 +352,7 @@ static void smbus_device_class_init(ObjectClass *klass, void *data)
{
I2CSlaveClass *sc = I2C_SLAVE_CLASS(klass);
- sc->init = smbus_device_init;
+ sc->realize = smbus_device_realize;
sc->event = smbus_i2c_event;
sc->recv = smbus_i2c_recv;
sc->send = smbus_i2c_send;
diff --git a/hw/input/lm832x.c b/hw/input/lm832x.c
index 2340523da0..818b6af585 100644
--- a/hw/input/lm832x.c
+++ b/hw/input/lm832x.c
@@ -464,7 +464,7 @@ static const VMStateDescription vmstate_lm_kbd = {
};
-static int lm8323_init(I2CSlave *i2c)
+static void lm8323_realize(I2CSlave *i2c, Error **errp)
{
LM823KbdState *s = LM8323(i2c);
@@ -477,7 +477,6 @@ static int lm8323_init(I2CSlave *i2c)
lm_kbd_reset(s);
qemu_register_reset((void *) lm_kbd_reset, s);
- return 0;
}
void lm832x_key_event(DeviceState *dev, int key, int state)
@@ -505,7 +504,7 @@ static void lm8323_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
- k->init = lm8323_init;
+ k->realize = lm8323_realize;
k->event = lm_i2c_event;
k->recv = lm_i2c_rx;
k->send = lm_i2c_tx;
diff --git a/hw/misc/tmp105.c b/hw/misc/tmp105.c
index 04e83787d4..62f4f191e4 100644
--- a/hw/misc/tmp105.c
+++ b/hw/misc/tmp105.c
@@ -229,15 +229,13 @@ static void tmp105_reset(I2CSlave *i2c)
tmp105_interrupt_update(s);
}
-static int tmp105_init(I2CSlave *i2c)
+static void tmp105_realize(I2CSlave *i2c, Error **errp)
{
TMP105State *s = TMP105(i2c);
qdev_init_gpio_out(&i2c->qdev, &s->pin, 1);
tmp105_reset(&s->i2c);
-
- return 0;
}
static void tmp105_initfn(Object *obj)
@@ -252,7 +250,7 @@ static void tmp105_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
- k->init = tmp105_init;
+ k->realize = tmp105_realize;
k->event = tmp105_event;
k->recv = tmp105_rx;
k->send = tmp105_tx;
diff --git a/hw/misc/tmp421.c b/hw/misc/tmp421.c
index 4a505abbce..3347a53d7d 100644
--- a/hw/misc/tmp421.c
+++ b/hw/misc/tmp421.c
@@ -335,13 +335,11 @@ static void tmp421_reset(I2CSlave *i2c)
s->status = 0;
}
-static int tmp421_init(I2CSlave *i2c)
+static void tmp421_realize(I2CSlave *i2c, Error **errp)
{
TMP421State *s = TMP421(i2c);
tmp421_reset(&s->i2c);
-
- return 0;
}
static void tmp421_initfn(Object *obj)
@@ -366,7 +364,7 @@ static void tmp421_class_init(ObjectClass *klass, void *data)
I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
TMP421Class *sc = TMP421_CLASS(klass);
- k->init = tmp421_init;
+ k->realize = tmp421_realize;
k->event = tmp421_event;
k->recv = tmp421_rx;
k->send = tmp421_tx;
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
index efa3621ac6..691cadb4a8 100644
--- a/hw/nvram/eeprom_at24c.c
+++ b/hw/nvram/eeprom_at24c.c
@@ -117,31 +117,29 @@ int at24c_eeprom_send(I2CSlave *s, uint8_t data)
return 0;
}
-static
-int at24c_eeprom_init(I2CSlave *i2c)
+static void at24c_eeprom_realize(I2CSlave *slave, Error **errp)
{
- EEPROMState *ee = AT24C_EE(i2c);
-
- ee->mem = g_malloc0(ee->rsize);
+ EEPROMState *ee = AT24C_EE(slave);
if (ee->blk) {
int64_t len = blk_getlength(ee->blk);
if (len != ee->rsize) {
- ERR(TYPE_AT24C_EE " : Backing file size %lu != %u\n",
- (unsigned long)len, (unsigned)ee->rsize);
- exit(1);
+ error_setg(errp, TYPE_AT24C_EE ": Backing file size %ld != %u",
+ len, ee->rsize);
+ return;
}
if (blk_set_perm(ee->blk, BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE,
BLK_PERM_ALL, &error_fatal) < 0)
{
- ERR(TYPE_AT24C_EE
- " : Backing file incorrect permission\n");
- exit(1);
+ error_setg(errp, TYPE_AT24C_EE
+ ": Backing file incorrect permission");
+ return;
}
}
- return 0;
+
+ ee->mem = g_malloc0(ee->rsize);
}
static
@@ -179,7 +177,7 @@ void at24c_eeprom_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
- k->init = &at24c_eeprom_init;
+ k->realize = &at24c_eeprom_realize;
k->event = &at24c_eeprom_event;
k->recv = &at24c_eeprom_recv;
k->send = &at24c_eeprom_send;
diff --git a/hw/timer/twl92230.c b/hw/timer/twl92230.c
index eb58c378e0..4f18080c95 100644
--- a/hw/timer/twl92230.c
+++ b/hw/timer/twl92230.c
@@ -853,10 +853,10 @@ static const VMStateDescription vmstate_menelaus = {
}
};
-static int twl92230_init(I2CSlave *i2c)
+static void twl92230_realize(I2CSlave *slave, Error **errp)
{
- DeviceState *dev = DEVICE(i2c);
- MenelausState *s = TWL92230(i2c);
+ DeviceState *dev = DEVICE(slave);
+ MenelausState *s = TWL92230(slave);
s->rtc.hz_tm = timer_new_ms(rtc_clock, menelaus_rtc_hz, s);
/* Three output pins plus one interrupt pin. */
@@ -865,9 +865,7 @@ static int twl92230_init(I2CSlave *i2c)
/* Three input pins plus one power-button pin. */
qdev_init_gpio_in(dev, menelaus_gpio_set, 4);
- menelaus_reset(i2c);
-
- return 0;
+ menelaus_reset(slave);
}
static void twl92230_class_init(ObjectClass *klass, void *data)
@@ -875,7 +873,7 @@ static void twl92230_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
I2CSlaveClass *sc = I2C_SLAVE_CLASS(klass);
- sc->init = twl92230_init;
+ sc->realize = twl92230_realize;
sc->event = menelaus_event;
sc->recv = menelaus_rx;
sc->send = menelaus_tx;
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 04/11] usb-ccid: convert CCIDCardClass::init -> realize
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-18 17:05 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init " Philippe Mathieu-Daudé
` (7 subsequent siblings)
11 siblings, 1 reply; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel, Gerd Hoffmann
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/usb/ccid.h | 9 +++++--
hw/usb/ccid-card-emulated.c | 42 ++++++++++++++++---------------
hw/usb/ccid-card-passthru.c | 10 ++++----
hw/usb/dev-smartcard-reader.c | 57 +++++++++++++++----------------------------
4 files changed, 54 insertions(+), 64 deletions(-)
diff --git a/hw/usb/ccid.h b/hw/usb/ccid.h
index 1f070116d6..11056b91ee 100644
--- a/hw/usb/ccid.h
+++ b/hw/usb/ccid.h
@@ -28,20 +28,25 @@ typedef struct CCIDCardInfo CCIDCardInfo;
* into the smartcard device (hw/ccid-card-*.c)
*/
typedef struct CCIDCardClass {
+ /*< private >*/
DeviceClass parent_class;
+ /*< public >*/
+
+ void (*realize)(CCIDCardState *card, Error **errp);
+ void (*unrealize)(CCIDCardState *card, Error **errp);
const uint8_t *(*get_atr)(CCIDCardState *card, uint32_t *len);
void (*apdu_from_guest)(CCIDCardState *card,
const uint8_t *apdu,
uint32_t len);
- void (*exitfn)(CCIDCardState *card);
- int (*initfn)(CCIDCardState *card);
} CCIDCardClass;
/*
* state of the CCID Card device (i.e. hw/ccid-card-*.c)
*/
struct CCIDCardState {
+ /*< private >*/
DeviceState qdev;
+ /*< public >*/
uint32_t slot; /* For future use with multiple slot reader. */
};
diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
index e646eb243b..8a512e73df 100644
--- a/hw/usb/ccid-card-emulated.c
+++ b/hw/usb/ccid-card-emulated.c
@@ -27,6 +27,7 @@
*/
#include "qemu/osdep.h"
+#include "qapi/error.h"
#include <eventt.h>
#include <vevent.h>
#include <vreader.h>
@@ -480,7 +481,7 @@ static uint32_t parse_enumeration(char *str,
return ret;
}
-static int emulated_initfn(CCIDCardState *base)
+static void emulated_realize(CCIDCardState *base, Error **errp)
{
EmulatedState *card = EMULATED_CCID_CARD(base);
VCardEmulError ret;
@@ -495,7 +496,8 @@ static int emulated_initfn(CCIDCardState *base)
card->reader = NULL;
card->quit_apdu_thread = 0;
if (init_event_notifier(card) < 0) {
- return -1;
+ error_setg(errp, TYPE_EMULATED_CCID ": event notifier creation failed");
+ return;
}
card->backend = 0;
@@ -505,11 +507,12 @@ static int emulated_initfn(CCIDCardState *base)
}
if (card->backend == 0) {
- printf("backend must be one of:\n");
+ error_setg(errp, TYPE_EMULATED_CCID ": no backend specified.");
+ printf("backend must be one of:\n"); /* TODO remove */
for (ptable = backend_enum_table; ptable->name != NULL; ++ptable) {
printf("%s\n", ptable->name);
}
- return -1;
+ return;
}
/* TODO: a passthru backened that works on local machine. third card type?*/
@@ -517,37 +520,36 @@ static int emulated_initfn(CCIDCardState *base)
if (card->cert1 != NULL && card->cert2 != NULL && card->cert3 != NULL) {
ret = emulated_initialize_vcard_from_certificates(card);
} else {
- printf("%s: you must provide all three certs for"
- " certificates backend\n", TYPE_EMULATED_CCID);
- return -1;
+ error_setg(errp, TYPE_EMULATED_CCID ": you must provide all three "
+ "certs for certificates backend");
+ return;
}
} else {
if (card->backend != BACKEND_NSS_EMULATED) {
- printf("%s: bad backend specified. The options are:\n%s (default),"
- " %s.\n", TYPE_EMULATED_CCID, BACKEND_NSS_EMULATED_NAME,
- BACKEND_CERTIFICATES_NAME);
- return -1;
+ error_setg(errp, TYPE_EMULATED_CCID ": bad backend specified. "
+ "The options are: %s (default), %s.",
+ BACKEND_NSS_EMULATED_NAME, BACKEND_CERTIFICATES_NAME);
+ return;
}
if (card->cert1 != NULL || card->cert2 != NULL || card->cert3 != NULL) {
- printf("%s: unexpected cert parameters to nss emulated backend\n",
- TYPE_EMULATED_CCID);
- return -1;
+ error_setg(errp, TYPE_EMULATED_CCID ": unexpected cert parameters "
+ "to nss emulated backend");
+ return;
}
/* default to mirroring the local hardware readers */
ret = wrap_vcard_emul_init(NULL);
}
if (ret != VCARD_EMUL_OK) {
- printf("%s: failed to initialize vcard\n", TYPE_EMULATED_CCID);
- return -1;
+ error_setg(errp, TYPE_EMULATED_CCID ": failed to initialize vcard");
+ return;
}
qemu_thread_create(&card->event_thread_id, "ccid/event", event_thread,
card, QEMU_THREAD_JOINABLE);
qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread,
card, QEMU_THREAD_JOINABLE);
- return 0;
}
-static void emulated_exitfn(CCIDCardState *base)
+static void emulated_unrealize(CCIDCardState *base, Error **errp)
{
EmulatedState *card = EMULATED_CCID_CARD(base);
VEvent *vevent = vevent_new(VEVENT_LAST, NULL, NULL);
@@ -581,8 +583,8 @@ static void emulated_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
CCIDCardClass *cc = CCID_CARD_CLASS(klass);
- cc->initfn = emulated_initfn;
- cc->exitfn = emulated_exitfn;
+ cc->realize = emulated_realize;
+ cc->unrealize = emulated_unrealize;
cc->get_atr = emulated_get_atr;
cc->apdu_from_guest = emulated_apdu_from_guest;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
index 117711862e..844ad2f878 100644
--- a/hw/usb/ccid-card-passthru.c
+++ b/hw/usb/ccid-card-passthru.c
@@ -9,6 +9,7 @@
*/
#include "qemu/osdep.h"
+#include "qapi/error.h"
#include <cacard/vscard_common.h>
#include "chardev/char-fe.h"
#include "qemu/error-report.h"
@@ -337,7 +338,7 @@ static const uint8_t *passthru_get_atr(CCIDCardState *base, uint32_t *len)
return card->atr;
}
-static int passthru_initfn(CCIDCardState *base)
+static void passthru_realize(CCIDCardState *base, Error **errp)
{
PassthruState *card = PASSTHRU_CCID_CARD(base);
@@ -351,15 +352,14 @@ static int passthru_initfn(CCIDCardState *base)
ccid_card_vscard_event, NULL, card, NULL, true);
ccid_card_vscard_send_init(card);
} else {
- error_report("missing chardev");
- return -1;
+ error_setg(errp, "missing chardev");
+ return;
}
card->debug = parse_debug_env("QEMU_CCID_PASSTHRU_DEBUG", D_VERBOSE,
card->debug);
assert(sizeof(DEFAULT_ATR) <= MAX_ATR_SIZE);
memcpy(card->atr, DEFAULT_ATR, sizeof(DEFAULT_ATR));
card->atr_length = sizeof(DEFAULT_ATR);
- return 0;
}
static VMStateDescription passthru_vmstate = {
@@ -387,7 +387,7 @@ static void passthru_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
CCIDCardClass *cc = CCID_CARD_CLASS(klass);
- cc->initfn = passthru_initfn;
+ cc->realize = passthru_realize;
cc->get_atr = passthru_get_atr;
cc->apdu_from_guest = passthru_apdu_from_guest;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c
index e334d3be11..e36b190118 100644
--- a/hw/usb/dev-smartcard-reader.c
+++ b/hw/usb/dev-smartcard-reader.c
@@ -37,7 +37,6 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "qemu-common.h"
-#include "qemu/error-report.h"
#include "hw/usb.h"
#include "hw/usb/desc.h"
@@ -500,26 +499,6 @@ static void ccid_card_apdu_from_guest(CCIDCardState *card,
}
}
-static void ccid_card_exitfn(CCIDCardState *card)
-{
- CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
-
- if (cc->exitfn) {
- cc->exitfn(card);
- }
-
-}
-
-static int ccid_card_initfn(CCIDCardState *card)
-{
- CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
-
- if (cc->initfn) {
- return cc->initfn(card);
- }
- return 0;
-}
-
static bool ccid_has_pending_answers(USBCCIDState *s)
{
return s->pending_answers_num > 0;
@@ -1281,41 +1260,45 @@ void ccid_card_card_inserted(CCIDCardState *card)
ccid_on_slot_change(s, true);
}
-static int ccid_card_exit(DeviceState *qdev)
+static void ccid_card_unrealize(DeviceState *qdev, Error **errp)
{
CCIDCardState *card = CCID_CARD(qdev);
+ CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
USBDevice *dev = USB_DEVICE(qdev->parent_bus->parent);
USBCCIDState *s = USB_CCID_DEV(dev);
if (ccid_card_inserted(s)) {
ccid_card_card_removed(card);
}
- ccid_card_exitfn(card);
+ if (cc->unrealize) {
+ cc->unrealize(card, errp);
+ }
s->card = NULL;
- return 0;
}
-static int ccid_card_init(DeviceState *qdev)
+static void ccid_card_realize(DeviceState *qdev, Error **errp)
{
CCIDCardState *card = CCID_CARD(qdev);
+ CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
USBDevice *dev = USB_DEVICE(qdev->parent_bus->parent);
USBCCIDState *s = USB_CCID_DEV(dev);
- int ret = 0;
if (card->slot != 0) {
- warn_report("usb-ccid supports one slot, can't add %d",
- card->slot);
- return -1;
+ error_setg(errp, "usb-ccid supports one slot, can't add %d",
+ card->slot);
+ return;
}
if (s->card != NULL) {
- warn_report("usb-ccid card already full, not adding");
- return -1;
+ error_setg(errp, "usb-ccid card already full, not adding");
+ return;
}
- ret = ccid_card_initfn(card);
- if (ret == 0) {
- s->card = card;
+ if (cc->realize) {
+ cc->realize(card, errp);
+ if (errp && *errp) {
+ return;
+ }
}
- return ret;
+ s->card = card;
}
static void ccid_realize(USBDevice *dev, Error **errp)
@@ -1477,8 +1460,8 @@ static void ccid_card_class_init(ObjectClass *klass, void *data)
{
DeviceClass *k = DEVICE_CLASS(klass);
k->bus_type = TYPE_CCID_BUS;
- k->init = ccid_card_init;
- k->exit = ccid_card_exit;
+ k->realize = ccid_card_realize;
+ k->unrealize = ccid_card_unrealize;
k->props = ccid_props;
}
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init -> realize
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 04/11] usb-ccid: convert CCIDCardClass::init " Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-16 13:41 ` Farhan Ali
2018-01-16 16:52 ` Cornelia Huck
2018-01-16 13:15 ` [Qemu-devel] [PATCH 06/11] sysbus: add realize() and unrealize() Philippe Mathieu-Daudé
` (6 subsequent siblings)
11 siblings, 2 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé,
qemu-devel, Cornelia Huck, Christian Borntraeger,
Michael S. Tsirkin, Alexander Graf, Richard Henderson,
open list:virtio-ccw
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/s390x/virtio-ccw.h | 2 +-
hw/s390x/virtio-ccw.c | 35 +++++++++++++++++------------------
2 files changed, 18 insertions(+), 19 deletions(-)
diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h
index 3905f3a3d6..2fc513001e 100644
--- a/hw/s390x/virtio-ccw.h
+++ b/hw/s390x/virtio-ccw.h
@@ -76,7 +76,7 @@ typedef struct VirtioCcwDevice VirtioCcwDevice;
typedef struct VirtIOCCWDeviceClass {
CCWDeviceClass parent_class;
void (*realize)(VirtioCcwDevice *dev, Error **errp);
- int (*exit)(VirtioCcwDevice *dev);
+ void (*unrealize)(VirtioCcwDevice *dev, Error **errp);
} VirtIOCCWDeviceClass;
/* Performance improves when virtqueue kick processing is decoupled from the
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 38f6a8afc9..a71c3feeb5 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -751,7 +751,7 @@ out_err:
g_free(sch);
}
-static int virtio_ccw_exit(VirtioCcwDevice *dev)
+static void virtio_ccw_unrealize(VirtioCcwDevice *dev, Error **errp)
{
CcwDevice *ccw_dev = CCW_DEVICE(dev);
SubchDev *sch = ccw_dev->sch;
@@ -764,7 +764,6 @@ static int virtio_ccw_exit(VirtioCcwDevice *dev)
release_indicator(&dev->routes.adapter, dev->indicators);
dev->indicators = NULL;
}
- return 0;
}
static void virtio_ccw_net_realize(VirtioCcwDevice *ccw_dev, Error **errp)
@@ -1343,7 +1342,7 @@ static void virtio_ccw_net_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_net_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_net_properties;
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
@@ -1371,7 +1370,7 @@ static void virtio_ccw_blk_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_blk_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_blk_properties;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
@@ -1399,7 +1398,7 @@ static void virtio_ccw_serial_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_serial_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_serial_properties;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
@@ -1427,7 +1426,7 @@ static void virtio_ccw_balloon_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_balloon_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_balloon_properties;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
@@ -1455,7 +1454,7 @@ static void virtio_ccw_scsi_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_scsi_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_scsi_properties;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
@@ -1482,7 +1481,7 @@ static void vhost_ccw_scsi_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = vhost_ccw_scsi_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = vhost_ccw_scsi_properties;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
@@ -1519,7 +1518,7 @@ static void virtio_ccw_rng_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_rng_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_rng_properties;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
@@ -1557,7 +1556,7 @@ static void virtio_ccw_crypto_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_crypto_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_crypto_properties;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
@@ -1595,7 +1594,7 @@ static void virtio_ccw_gpu_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_gpu_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_gpu_properties;
dc->hotpluggable = false;
@@ -1624,7 +1623,7 @@ static void virtio_ccw_input_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_input_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_input_properties;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
@@ -1704,12 +1703,12 @@ static void virtio_ccw_busdev_realize(DeviceState *dev, Error **errp)
virtio_ccw_device_realize(_dev, errp);
}
-static int virtio_ccw_busdev_exit(DeviceState *dev)
+static void virtio_ccw_busdev_unrealize(DeviceState *dev, Error **errp)
{
VirtioCcwDevice *_dev = (VirtioCcwDevice *)dev;
- VirtIOCCWDeviceClass *_info = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
+ VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
- return _info->exit(_dev);
+ k->unrealize(_dev, errp);
}
static void virtio_ccw_busdev_unplug(HotplugHandler *hotplug_dev,
@@ -1727,7 +1726,7 @@ static void virtio_ccw_device_class_init(ObjectClass *klass, void *data)
k->unplug = virtio_ccw_busdev_unplug;
dc->realize = virtio_ccw_busdev_realize;
- dc->exit = virtio_ccw_busdev_exit;
+ dc->unrealize = virtio_ccw_busdev_unrealize;
dc->bus_type = TYPE_VIRTUAL_CSS_BUS;
}
@@ -1803,7 +1802,7 @@ static void virtio_ccw_9p_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
k->realize = virtio_ccw_9p_realize;
dc->reset = virtio_ccw_reset;
dc->props = virtio_ccw_9p_properties;
@@ -1852,7 +1851,7 @@ static void vhost_vsock_ccw_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = vhost_vsock_ccw_realize;
- k->exit = virtio_ccw_exit;
+ k->unrealize = virtio_ccw_unrealize;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
dc->props = vhost_vsock_ccw_properties;
dc->reset = virtio_ccw_reset;
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 06/11] sysbus: add realize() and unrealize()
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init " Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-19 18:03 ` Eduardo Habkost
2018-01-16 13:15 ` [Qemu-devel] [PATCH 07/11] qdev: simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
` (5 subsequent siblings)
11 siblings, 1 reply; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
include/hw/sysbus.h | 4 ++++
hw/core/sysbus.c | 23 +++++++++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h
index e88bb6dae0..c87a6df29e 100644
--- a/include/hw/sysbus.h
+++ b/include/hw/sysbus.h
@@ -40,6 +40,10 @@ typedef struct SysBusDeviceClass {
DeviceClass parent_class;
/*< public >*/
+ void (*realize)(SysBusDevice *dev, Error **errp);
+ void (*unrealize)(SysBusDevice *dev, Error **errp);
+
+ /* TODO remove, once users are converted to realize */
int (*init)(SysBusDevice *dev);
/*
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index 5d0887f499..04d6061f76 100644
--- a/hw/core/sysbus.c
+++ b/hw/core/sysbus.c
@@ -200,6 +200,7 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size)
}
}
+/* TODO remove, once users are converted to realize */
static int sysbus_device_init(DeviceState *dev)
{
SysBusDevice *sd = SYS_BUS_DEVICE(dev);
@@ -211,6 +212,26 @@ static int sysbus_device_init(DeviceState *dev)
return sbc->init(sd);
}
+static void sysbus_realize(DeviceState *dev, Error **errp)
+{
+ SysBusDevice *sd = SYS_BUS_DEVICE(dev);
+ SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
+
+ if (sbc->realize) {
+ sbc->realize(sd, errp);
+ }
+}
+
+static void sysbus_unrealize(DeviceState *dev, Error **errp)
+{
+ SysBusDevice *sd = SYS_BUS_DEVICE(dev);
+ SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
+
+ if (sbc->unrealize) {
+ sbc->unrealize(sd, errp);
+ }
+}
+
DeviceState *sysbus_create_varargs(const char *name,
hwaddr addr, ...)
{
@@ -325,6 +346,8 @@ static void sysbus_device_class_init(ObjectClass *klass, void *data)
{
DeviceClass *k = DEVICE_CLASS(klass);
k->init = sysbus_device_init;
+ k->realize = sysbus_realize;
+ k->unrealize = sysbus_unrealize;
k->bus_type = TYPE_SYSTEM_BUS;
/*
* device_add plugs devices into a suitable bus. For "real" buses,
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 07/11] qdev: simplify the SysBusDeviceClass::init path
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 06/11] sysbus: add realize() and unrealize() Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-19 18:24 ` Eduardo Habkost
2018-01-16 13:15 ` [Qemu-devel] [PATCH 08/11] qdev: remove DeviceClass::init Philippe Mathieu-Daudé
` (4 subsequent siblings)
11 siblings, 1 reply; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel
The SysBusDevice is the last DeviceClass::init user.
Instead of using
SysBusDeviceClass::realize
-> DeviceClass::realize
-> DeviceClass::init
-> sysbus_device_init
-> SysBusDeviceClass::init
Simplify the path by directly calling SysBusDeviceClass::init
in SysBusDeviceClass::realize:
SysBusDeviceClass::realize
-> SysBusDeviceClass::init
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/core/qdev.c | 9 ---------
hw/core/sysbus.c | 21 +++++++++------------
2 files changed, 9 insertions(+), 21 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 11112951a5..a4f76c8f5d 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -221,15 +221,6 @@ void device_listener_unregister(DeviceListener *listener)
static void device_realize(DeviceState *dev, Error **errp)
{
- DeviceClass *dc = DEVICE_GET_CLASS(dev);
-
- if (dc->init) {
- int rc = dc->init(dev);
- if (rc < 0) {
- error_setg(errp, "Device initialization failed.");
- return;
- }
- }
}
static void device_unrealize(DeviceState *dev, Error **errp)
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index 04d6061f76..9edf43bc27 100644
--- a/hw/core/sysbus.c
+++ b/hw/core/sysbus.c
@@ -18,6 +18,7 @@
*/
#include "qemu/osdep.h"
+#include "qapi/error.h"
#include "hw/sysbus.h"
#include "monitor/monitor.h"
#include "exec/address-spaces.h"
@@ -200,22 +201,19 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size)
}
}
-/* TODO remove, once users are converted to realize */
-static int sysbus_device_init(DeviceState *dev)
+static void sysbus_realize(DeviceState *dev, Error **errp)
{
SysBusDevice *sd = SYS_BUS_DEVICE(dev);
SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
- if (!sbc->init) {
- return 0;
+ /* TODO remove, once users are converted to realize */
+ if (sbc->init) {
+ int rc = sbc->init(sd);
+ if (rc < 0) {
+ error_setg(errp, "Device initialization failed.");
+ return;
+ }
}
- return sbc->init(sd);
-}
-
-static void sysbus_realize(DeviceState *dev, Error **errp)
-{
- SysBusDevice *sd = SYS_BUS_DEVICE(dev);
- SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
if (sbc->realize) {
sbc->realize(sd, errp);
@@ -345,7 +343,6 @@ MemoryRegion *sysbus_address_space(SysBusDevice *dev)
static void sysbus_device_class_init(ObjectClass *klass, void *data)
{
DeviceClass *k = DEVICE_CLASS(klass);
- k->init = sysbus_device_init;
k->realize = sysbus_realize;
k->unrealize = sysbus_unrealize;
k->bus_type = TYPE_SYSTEM_BUS;
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 08/11] qdev: remove DeviceClass::init
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 07/11] qdev: simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 09/11] qdev: remove DeviceClass::exit Philippe Mathieu-Daudé
` (3 subsequent siblings)
11 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel
it has no more users.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
include/hw/qdev-core.h | 2 --
1 file changed, 2 deletions(-)
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 0a71bf83f0..de063b232f 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -30,7 +30,6 @@ typedef enum DeviceCategory {
DEVICE_CATEGORY_MAX
} DeviceCategory;
-typedef int (*qdev_initfn)(DeviceState *dev);
typedef int (*qdev_event)(DeviceState *dev);
typedef void (*qdev_resetfn)(DeviceState *dev);
typedef void (*DeviceRealize)(DeviceState *dev, Error **errp);
@@ -125,7 +124,6 @@ typedef struct DeviceClass {
const struct VMStateDescription *vmsd;
/* Private to qdev / bus. */
- qdev_initfn init; /* TODO remove, once users are converted to realize */
qdev_event exit; /* TODO remove, once users are converted to unrealize */
const char *bus_type;
} DeviceClass;
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 09/11] qdev: remove DeviceClass::exit
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (7 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 08/11] qdev: remove DeviceClass::init Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 10/11] qdev: remove empty realize/unrealize stubs Philippe Mathieu-Daudé
` (2 subsequent siblings)
11 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel
it has no users.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
include/hw/qdev-core.h | 2 --
hw/core/qdev.c | 9 ---------
2 files changed, 11 deletions(-)
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index de063b232f..de7fe2e6e0 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -30,7 +30,6 @@ typedef enum DeviceCategory {
DEVICE_CATEGORY_MAX
} DeviceCategory;
-typedef int (*qdev_event)(DeviceState *dev);
typedef void (*qdev_resetfn)(DeviceState *dev);
typedef void (*DeviceRealize)(DeviceState *dev, Error **errp);
typedef void (*DeviceUnrealize)(DeviceState *dev, Error **errp);
@@ -124,7 +123,6 @@ typedef struct DeviceClass {
const struct VMStateDescription *vmsd;
/* Private to qdev / bus. */
- qdev_event exit; /* TODO remove, once users are converted to unrealize */
const char *bus_type;
} DeviceClass;
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index a4f76c8f5d..985f890a74 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -225,15 +225,6 @@ static void device_realize(DeviceState *dev, Error **errp)
static void device_unrealize(DeviceState *dev, Error **errp)
{
- DeviceClass *dc = DEVICE_GET_CLASS(dev);
-
- if (dc->exit) {
- int rc = dc->exit(dev);
- if (rc < 0) {
- error_setg(errp, "Device exit failed.");
- return;
- }
- }
}
void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 10/11] qdev: remove empty realize/unrealize stubs
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (8 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 09/11] qdev: remove DeviceClass::exit Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 11/11] qdev: rename typedef qdev_resetfn() -> DeviceReset() Philippe Mathieu-Daudé
2018-01-17 5:45 ` [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() no-reply
11 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel
they are not useful, keep the code clean.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/core/qdev.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 985f890a74..91ddbfa5f3 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -219,14 +219,6 @@ void device_listener_unregister(DeviceListener *listener)
QTAILQ_REMOVE(&device_listeners, listener, link);
}
-static void device_realize(DeviceState *dev, Error **errp)
-{
-}
-
-static void device_unrealize(DeviceState *dev, Error **errp)
-{
-}
-
void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
int required_for_version)
{
@@ -1109,8 +1101,6 @@ static void device_class_init(ObjectClass *class, void *data)
DeviceClass *dc = DEVICE_CLASS(class);
class->unparent = device_unparent;
- dc->realize = device_realize;
- dc->unrealize = device_unrealize;
/* by default all devices were considered as hotpluggable,
* so with intent to check it in generic qdev_unplug() /
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PATCH 11/11] qdev: rename typedef qdev_resetfn() -> DeviceReset()
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (9 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 10/11] qdev: remove empty realize/unrealize stubs Philippe Mathieu-Daudé
@ 2018-01-16 13:15 ` Philippe Mathieu-Daudé
2018-01-17 5:45 ` [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() no-reply
11 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 13:15 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Philippe Mathieu-Daudé, qemu-devel
following the DeviceRealize and DeviceUnrealize typedefs,
this unify a bit the QOM API.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
include/hw/qdev-core.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index de7fe2e6e0..8d15da1c52 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -30,9 +30,9 @@ typedef enum DeviceCategory {
DEVICE_CATEGORY_MAX
} DeviceCategory;
-typedef void (*qdev_resetfn)(DeviceState *dev);
typedef void (*DeviceRealize)(DeviceState *dev, Error **errp);
typedef void (*DeviceUnrealize)(DeviceState *dev, Error **errp);
+typedef void (*DeviceReset)(DeviceState *dev);
typedef void (*BusRealize)(BusState *bus, Error **errp);
typedef void (*BusUnrealize)(BusState *bus, Error **errp);
@@ -115,7 +115,7 @@ typedef struct DeviceClass {
bool hotpluggable;
/* callbacks */
- void (*reset)(DeviceState *dev);
+ DeviceReset reset;
DeviceRealize realize;
DeviceUnrealize unrealize;
--
2.15.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init -> realize
2018-01-16 13:15 ` [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init " Philippe Mathieu-Daudé
@ 2018-01-16 13:41 ` Farhan Ali
2018-01-16 14:07 ` Philippe Mathieu-Daudé
2018-01-16 16:52 ` Cornelia Huck
1 sibling, 1 reply; 28+ messages in thread
From: Farhan Ali @ 2018-01-16 13:41 UTC (permalink / raw)
To: Philippe Mathieu-Daudé,
Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Michael S. Tsirkin, qemu-devel, Cornelia Huck, Alexander Graf,
Christian Borntraeger, open list:virtio-ccw, Richard Henderson
shouldn't the commit message say exit -> unrealize?
Thanks
Farhan
On 01/16/2018 08:15 AM, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> hw/s390x/virtio-ccw.h | 2 +-
> hw/s390x/virtio-ccw.c | 35 +++++++++++++++++------------------
> 2 files changed, 18 insertions(+), 19 deletions(-)
>
> diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h
> index 3905f3a3d6..2fc513001e 100644
> --- a/hw/s390x/virtio-ccw.h
> +++ b/hw/s390x/virtio-ccw.h
> @@ -76,7 +76,7 @@ typedef struct VirtioCcwDevice VirtioCcwDevice;
> typedef struct VirtIOCCWDeviceClass {
> CCWDeviceClass parent_class;
> void (*realize)(VirtioCcwDevice *dev, Error **errp);
> - int (*exit)(VirtioCcwDevice *dev);
> + void (*unrealize)(VirtioCcwDevice *dev, Error **errp);
> } VirtIOCCWDeviceClass;
>
> /* Performance improves when virtqueue kick processing is decoupled from the
> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
> index 38f6a8afc9..a71c3feeb5 100644
> --- a/hw/s390x/virtio-ccw.c
> +++ b/hw/s390x/virtio-ccw.c
> @@ -751,7 +751,7 @@ out_err:
> g_free(sch);
> }
>
> -static int virtio_ccw_exit(VirtioCcwDevice *dev)
> +static void virtio_ccw_unrealize(VirtioCcwDevice *dev, Error **errp)
> {
> CcwDevice *ccw_dev = CCW_DEVICE(dev);
> SubchDev *sch = ccw_dev->sch;
> @@ -764,7 +764,6 @@ static int virtio_ccw_exit(VirtioCcwDevice *dev)
> release_indicator(&dev->routes.adapter, dev->indicators);
> dev->indicators = NULL;
> }
> - return 0;
> }
>
> static void virtio_ccw_net_realize(VirtioCcwDevice *ccw_dev, Error **errp)
> @@ -1343,7 +1342,7 @@ static void virtio_ccw_net_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_net_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_net_properties;
> set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
> @@ -1371,7 +1370,7 @@ static void virtio_ccw_blk_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_blk_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_blk_properties;
> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> @@ -1399,7 +1398,7 @@ static void virtio_ccw_serial_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_serial_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_serial_properties;
> set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
> @@ -1427,7 +1426,7 @@ static void virtio_ccw_balloon_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_balloon_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_balloon_properties;
> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
> @@ -1455,7 +1454,7 @@ static void virtio_ccw_scsi_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_scsi_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_scsi_properties;
> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> @@ -1482,7 +1481,7 @@ static void vhost_ccw_scsi_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = vhost_ccw_scsi_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = vhost_ccw_scsi_properties;
> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> @@ -1519,7 +1518,7 @@ static void virtio_ccw_rng_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_rng_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_rng_properties;
> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
> @@ -1557,7 +1556,7 @@ static void virtio_ccw_crypto_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_crypto_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_crypto_properties;
> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
> @@ -1595,7 +1594,7 @@ static void virtio_ccw_gpu_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_gpu_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_gpu_properties;
> dc->hotpluggable = false;
> @@ -1624,7 +1623,7 @@ static void virtio_ccw_input_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = virtio_ccw_input_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_input_properties;
> set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
> @@ -1704,12 +1703,12 @@ static void virtio_ccw_busdev_realize(DeviceState *dev, Error **errp)
> virtio_ccw_device_realize(_dev, errp);
> }
>
> -static int virtio_ccw_busdev_exit(DeviceState *dev)
> +static void virtio_ccw_busdev_unrealize(DeviceState *dev, Error **errp)
> {
> VirtioCcwDevice *_dev = (VirtioCcwDevice *)dev;
> - VirtIOCCWDeviceClass *_info = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
> + VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
>
> - return _info->exit(_dev);
> + k->unrealize(_dev, errp);
> }
>
> static void virtio_ccw_busdev_unplug(HotplugHandler *hotplug_dev,
> @@ -1727,7 +1726,7 @@ static void virtio_ccw_device_class_init(ObjectClass *klass, void *data)
>
> k->unplug = virtio_ccw_busdev_unplug;
> dc->realize = virtio_ccw_busdev_realize;
> - dc->exit = virtio_ccw_busdev_exit;
> + dc->unrealize = virtio_ccw_busdev_unrealize;
> dc->bus_type = TYPE_VIRTUAL_CSS_BUS;
> }
>
> @@ -1803,7 +1802,7 @@ static void virtio_ccw_9p_class_init(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> k->realize = virtio_ccw_9p_realize;
> dc->reset = virtio_ccw_reset;
> dc->props = virtio_ccw_9p_properties;
> @@ -1852,7 +1851,7 @@ static void vhost_vsock_ccw_class_init(ObjectClass *klass, void *data)
> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>
> k->realize = vhost_vsock_ccw_realize;
> - k->exit = virtio_ccw_exit;
> + k->unrealize = virtio_ccw_unrealize;
> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
> dc->props = vhost_vsock_ccw_properties;
> dc->reset = virtio_ccw_reset;
>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init -> realize
2018-01-16 13:41 ` Farhan Ali
@ 2018-01-16 14:07 ` Philippe Mathieu-Daudé
2018-01-16 16:11 ` Farhan Ali
0 siblings, 1 reply; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 14:07 UTC (permalink / raw)
To: Farhan Ali, Eduardo Habkost, Markus Armbruster, Peter Maydell,
Paolo Bonzini, Eric Blake, Marcel Apfelbaum
Cc: Michael S. Tsirkin, qemu-devel, Cornelia Huck, Alexander Graf,
Christian Borntraeger, open list:virtio-ccw, Richard Henderson
On 01/16/2018 10:41 AM, Farhan Ali wrote:
> shouldn't the commit message say exit -> unrealize?
Oops, indeed :|
Thanks :)
Phil.
>
>
> Thanks
> Farhan
>
> On 01/16/2018 08:15 AM, Philippe Mathieu-Daudé wrote:
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> hw/s390x/virtio-ccw.h | 2 +-
>> hw/s390x/virtio-ccw.c | 35 +++++++++++++++++------------------
>> 2 files changed, 18 insertions(+), 19 deletions(-)
>>
>> diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h
>> index 3905f3a3d6..2fc513001e 100644
>> --- a/hw/s390x/virtio-ccw.h
>> +++ b/hw/s390x/virtio-ccw.h
>> @@ -76,7 +76,7 @@ typedef struct VirtioCcwDevice VirtioCcwDevice;
>> typedef struct VirtIOCCWDeviceClass {
>> CCWDeviceClass parent_class;
>> void (*realize)(VirtioCcwDevice *dev, Error **errp);
>> - int (*exit)(VirtioCcwDevice *dev);
>> + void (*unrealize)(VirtioCcwDevice *dev, Error **errp);
>> } VirtIOCCWDeviceClass;
>>
>> /* Performance improves when virtqueue kick processing is decoupled
>> from the
>> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
>> index 38f6a8afc9..a71c3feeb5 100644
>> --- a/hw/s390x/virtio-ccw.c
>> +++ b/hw/s390x/virtio-ccw.c
>> @@ -751,7 +751,7 @@ out_err:
>> g_free(sch);
>> }
>>
>> -static int virtio_ccw_exit(VirtioCcwDevice *dev)
>> +static void virtio_ccw_unrealize(VirtioCcwDevice *dev, Error **errp)
>> {
>> CcwDevice *ccw_dev = CCW_DEVICE(dev);
>> SubchDev *sch = ccw_dev->sch;
>> @@ -764,7 +764,6 @@ static int virtio_ccw_exit(VirtioCcwDevice *dev)
>> release_indicator(&dev->routes.adapter, dev->indicators);
>> dev->indicators = NULL;
>> }
>> - return 0;
>> }
>>
>> static void virtio_ccw_net_realize(VirtioCcwDevice *ccw_dev, Error
>> **errp)
>> @@ -1343,7 +1342,7 @@ static void
>> virtio_ccw_net_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_net_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_net_properties;
>> set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
>> @@ -1371,7 +1370,7 @@ static void
>> virtio_ccw_blk_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_blk_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_blk_properties;
>> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
>> @@ -1399,7 +1398,7 @@ static void
>> virtio_ccw_serial_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_serial_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_serial_properties;
>> set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>> @@ -1427,7 +1426,7 @@ static void
>> virtio_ccw_balloon_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_balloon_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_balloon_properties;
>> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>> @@ -1455,7 +1454,7 @@ static void
>> virtio_ccw_scsi_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_scsi_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_scsi_properties;
>> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
>> @@ -1482,7 +1481,7 @@ static void
>> vhost_ccw_scsi_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = vhost_ccw_scsi_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = vhost_ccw_scsi_properties;
>> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
>> @@ -1519,7 +1518,7 @@ static void
>> virtio_ccw_rng_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_rng_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_rng_properties;
>> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>> @@ -1557,7 +1556,7 @@ static void
>> virtio_ccw_crypto_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_crypto_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_crypto_properties;
>> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>> @@ -1595,7 +1594,7 @@ static void
>> virtio_ccw_gpu_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_gpu_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_gpu_properties;
>> dc->hotpluggable = false;
>> @@ -1624,7 +1623,7 @@ static void
>> virtio_ccw_input_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = virtio_ccw_input_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_input_properties;
>> set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>> @@ -1704,12 +1703,12 @@ static void
>> virtio_ccw_busdev_realize(DeviceState *dev, Error **errp)
>> virtio_ccw_device_realize(_dev, errp);
>> }
>>
>> -static int virtio_ccw_busdev_exit(DeviceState *dev)
>> +static void virtio_ccw_busdev_unrealize(DeviceState *dev, Error **errp)
>> {
>> VirtioCcwDevice *_dev = (VirtioCcwDevice *)dev;
>> - VirtIOCCWDeviceClass *_info = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
>> + VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
>>
>> - return _info->exit(_dev);
>> + k->unrealize(_dev, errp);
>> }
>>
>> static void virtio_ccw_busdev_unplug(HotplugHandler *hotplug_dev,
>> @@ -1727,7 +1726,7 @@ static void
>> virtio_ccw_device_class_init(ObjectClass *klass, void *data)
>>
>> k->unplug = virtio_ccw_busdev_unplug;
>> dc->realize = virtio_ccw_busdev_realize;
>> - dc->exit = virtio_ccw_busdev_exit;
>> + dc->unrealize = virtio_ccw_busdev_unrealize;
>> dc->bus_type = TYPE_VIRTUAL_CSS_BUS;
>> }
>>
>> @@ -1803,7 +1802,7 @@ static void virtio_ccw_9p_class_init(ObjectClass
>> *klass, void *data)
>> DeviceClass *dc = DEVICE_CLASS(klass);
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> k->realize = virtio_ccw_9p_realize;
>> dc->reset = virtio_ccw_reset;
>> dc->props = virtio_ccw_9p_properties;
>> @@ -1852,7 +1851,7 @@ static void
>> vhost_vsock_ccw_class_init(ObjectClass *klass, void *data)
>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>
>> k->realize = vhost_vsock_ccw_realize;
>> - k->exit = virtio_ccw_exit;
>> + k->unrealize = virtio_ccw_unrealize;
>> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>> dc->props = vhost_vsock_ccw_properties;
>> dc->reset = virtio_ccw_reset;
>>
>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize
2018-01-16 13:15 ` [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize Philippe Mathieu-Daudé
@ 2018-01-16 14:09 ` Philippe Mathieu-Daudé
2018-01-19 18:18 ` Eduardo Habkost
1 sibling, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-16 14:09 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: qemu-devel, Gerd Hoffmann
On 01/16/2018 10:15 AM, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> include/hw/i2c/i2c.h | 2 +-
> include/hw/i2c/smbus.h | 2 +-
> hw/audio/wm8750.c | 8 +++-----
> hw/display/ssd0303.c | 5 ++---
> hw/gpio/max7310.c | 6 ++----
> hw/i2c/core.c | 10 ++++------
> hw/i2c/smbus.c | 10 ++++------
> hw/input/lm832x.c | 5 ++---
> hw/misc/tmp105.c | 6 ++----
> hw/misc/tmp421.c | 6 ++----
> hw/nvram/eeprom_at24c.c | 24 +++++++++++-------------
> hw/timer/twl92230.c | 12 +++++-------
> 12 files changed, 39 insertions(+), 57 deletions(-)
>
> diff --git a/include/hw/i2c/i2c.h b/include/hw/i2c/i2c.h
> index 2ce611d4c8..4a9344b75c 100644
> --- a/include/hw/i2c/i2c.h
> +++ b/include/hw/i2c/i2c.h
> @@ -30,7 +30,7 @@ typedef struct I2CSlaveClass
> DeviceClass parent_class;
>
> /* Callbacks provided by the device. */
> - int (*init)(I2CSlave *dev);
> + void (*realize)(I2CSlave *slave, Error **errp);
>
> /* Master to slave. Returns non-zero for a NAK, 0 for success. */
> int (*send)(I2CSlave *s, uint8_t data);
> diff --git a/include/hw/i2c/smbus.h b/include/hw/i2c/smbus.h
> index 544bbc1957..da31894383 100644
> --- a/include/hw/i2c/smbus.h
> +++ b/include/hw/i2c/smbus.h
> @@ -38,7 +38,7 @@
> typedef struct SMBusDeviceClass
> {
> I2CSlaveClass parent_class;
> - int (*init)(SMBusDevice *dev);
> + void (*realize)(SMBusDevice *dev, Error **errp);
> void (*quick_cmd)(SMBusDevice *dev, uint8_t read);
> void (*send_byte)(SMBusDevice *dev, uint8_t val);
> uint8_t (*receive_byte)(SMBusDevice *dev);
> diff --git a/hw/audio/wm8750.c b/hw/audio/wm8750.c
> index 8bb44a7cc1..c209334f4e 100644
> --- a/hw/audio/wm8750.c
> +++ b/hw/audio/wm8750.c
> @@ -618,14 +618,12 @@ static const VMStateDescription vmstate_wm8750 = {
> }
> };
>
> -static int wm8750_init(I2CSlave *i2c)
> +static void wm8750_realize(I2CSlave *slave, Error **errp)
> {
> - WM8750State *s = WM8750(i2c);
> + WM8750State *s = WM8750(slave);
>
> AUD_register_card(CODEC, &s->card);
> wm8750_reset(I2C_SLAVE(s));
> -
> - return 0;
> }
>
> #if 0
> @@ -709,7 +707,7 @@ static void wm8750_class_init(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> I2CSlaveClass *sc = I2C_SLAVE_CLASS(klass);
>
> - sc->init = wm8750_init;
> + sc->realize = wm8750_realize;
> sc->event = wm8750_event;
> sc->recv = wm8750_rx;
> sc->send = wm8750_tx;
> diff --git a/hw/display/ssd0303.c b/hw/display/ssd0303.c
> index 68a80b9d64..c4cd059a52 100644
> --- a/hw/display/ssd0303.c
> +++ b/hw/display/ssd0303.c
> @@ -297,13 +297,12 @@ static const GraphicHwOps ssd0303_ops = {
> .gfx_update = ssd0303_update_display,
> };
>
> -static int ssd0303_init(I2CSlave *i2c)
> +static void ssd0303_realize(I2CSlave *i2c, Error **errp)
> {
> ssd0303_state *s = SSD0303(i2c);
>
> s->con = graphic_console_init(DEVICE(i2c), 0, &ssd0303_ops, s);
> qemu_console_resize(s->con, 96 * MAGNIFY, 16 * MAGNIFY);
> - return 0;
> }
>
> static void ssd0303_class_init(ObjectClass *klass, void *data)
> @@ -311,7 +310,7 @@ static void ssd0303_class_init(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
>
> - k->init = ssd0303_init;
> + k->realize = ssd0303_realize;
> k->event = ssd0303_event;
> k->recv = ssd0303_recv;
> k->send = ssd0303_send;
> diff --git a/hw/gpio/max7310.c b/hw/gpio/max7310.c
> index f82e3e6555..070da0e4dc 100644
> --- a/hw/gpio/max7310.c
> +++ b/hw/gpio/max7310.c
> @@ -182,14 +182,12 @@ static void max7310_gpio_set(void *opaque, int line, int level)
>
> /* MAX7310 is SMBus-compatible (can be used with only SMBus protocols),
> * but also accepts sequences that are not SMBus so return an I2C device. */
> -static int max7310_init(I2CSlave *i2c)
> +static void max7310_realize(I2CSlave *i2c, Error **errp)
> {
> MAX7310State *s = MAX7310(i2c);
>
> qdev_init_gpio_in(&i2c->qdev, max7310_gpio_set, 8);
> qdev_init_gpio_out(&i2c->qdev, s->handler, 8);
> -
> - return 0;
> }
>
> static void max7310_class_init(ObjectClass *klass, void *data)
> @@ -197,7 +195,7 @@ static void max7310_class_init(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
>
> - k->init = max7310_init;
> + k->realize = max7310_realize;
> k->event = max7310_event;
> k->recv = max7310_rx;
> k->send = max7310_tx;
> diff --git a/hw/i2c/core.c b/hw/i2c/core.c
> index 59068f157e..f9f48a1666 100644
> --- a/hw/i2c/core.c
> +++ b/hw/i2c/core.c
> @@ -276,16 +276,14 @@ const VMStateDescription vmstate_i2c_slave = {
> }
> };
>
> -static int i2c_slave_qdev_init(DeviceState *dev)
> +static void i2c_slave_realize(DeviceState *dev, Error **errp)
> {
> I2CSlave *s = I2C_SLAVE(dev);
> I2CSlaveClass *sc = I2C_SLAVE_GET_CLASS(s);
>
> - if (sc->init) {
> - return sc->init(s);
> + if (sc->realize) {
> + return sc->realize(s, errp);
> }
> -
> - return 0;
> }
>
> DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
> @@ -301,7 +299,7 @@ DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
> static void i2c_slave_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *k = DEVICE_CLASS(klass);
> - k->init = i2c_slave_qdev_init;
> + k->realize = i2c_slave_realize;
> set_bit(DEVICE_CATEGORY_MISC, k->categories);
> k->bus_type = TYPE_I2C_BUS;
> k->props = i2c_props;
> diff --git a/hw/i2c/smbus.c b/hw/i2c/smbus.c
> index a90d65ef37..a5293c2552 100644
> --- a/hw/i2c/smbus.c
> +++ b/hw/i2c/smbus.c
> @@ -202,16 +202,14 @@ static int smbus_i2c_send(I2CSlave *s, uint8_t data)
> return 0;
> }
>
> -static int smbus_device_init(I2CSlave *i2c)
> +static void smbus_device_realize(I2CSlave *i2c, Error **errp)
> {
> SMBusDevice *dev = SMBUS_DEVICE(i2c);
> SMBusDeviceClass *sc = SMBUS_DEVICE_GET_CLASS(dev);
>
> - if (sc->init) {
> - return sc->init(dev);
> + if (sc->realize) {
> + sc->realize(dev, errp);
> }
> -
> - return 0;
> }
>
> /* Master device commands. */
> @@ -354,7 +352,7 @@ static void smbus_device_class_init(ObjectClass *klass, void *data)
> {
> I2CSlaveClass *sc = I2C_SLAVE_CLASS(klass);
>
> - sc->init = smbus_device_init;
> + sc->realize = smbus_device_realize;
> sc->event = smbus_i2c_event;
> sc->recv = smbus_i2c_recv;
> sc->send = smbus_i2c_send;
> diff --git a/hw/input/lm832x.c b/hw/input/lm832x.c
> index 2340523da0..818b6af585 100644
> --- a/hw/input/lm832x.c
> +++ b/hw/input/lm832x.c
> @@ -464,7 +464,7 @@ static const VMStateDescription vmstate_lm_kbd = {
> };
>
>
> -static int lm8323_init(I2CSlave *i2c)
> +static void lm8323_realize(I2CSlave *i2c, Error **errp)
> {
> LM823KbdState *s = LM8323(i2c);
>
> @@ -477,7 +477,6 @@ static int lm8323_init(I2CSlave *i2c)
> lm_kbd_reset(s);
>
> qemu_register_reset((void *) lm_kbd_reset, s);
> - return 0;
> }
>
> void lm832x_key_event(DeviceState *dev, int key, int state)
> @@ -505,7 +504,7 @@ static void lm8323_class_init(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
>
> - k->init = lm8323_init;
> + k->realize = lm8323_realize;
> k->event = lm_i2c_event;
> k->recv = lm_i2c_rx;
> k->send = lm_i2c_tx;
> diff --git a/hw/misc/tmp105.c b/hw/misc/tmp105.c
> index 04e83787d4..62f4f191e4 100644
> --- a/hw/misc/tmp105.c
> +++ b/hw/misc/tmp105.c
> @@ -229,15 +229,13 @@ static void tmp105_reset(I2CSlave *i2c)
> tmp105_interrupt_update(s);
> }
>
> -static int tmp105_init(I2CSlave *i2c)
> +static void tmp105_realize(I2CSlave *i2c, Error **errp)
> {
> TMP105State *s = TMP105(i2c);
>
> qdev_init_gpio_out(&i2c->qdev, &s->pin, 1);
>
> tmp105_reset(&s->i2c);
> -
> - return 0;
> }
>
> static void tmp105_initfn(Object *obj)
> @@ -252,7 +250,7 @@ static void tmp105_class_init(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
>
> - k->init = tmp105_init;
> + k->realize = tmp105_realize;
> k->event = tmp105_event;
> k->recv = tmp105_rx;
> k->send = tmp105_tx;
> diff --git a/hw/misc/tmp421.c b/hw/misc/tmp421.c
> index 4a505abbce..3347a53d7d 100644
> --- a/hw/misc/tmp421.c
> +++ b/hw/misc/tmp421.c
> @@ -335,13 +335,11 @@ static void tmp421_reset(I2CSlave *i2c)
> s->status = 0;
> }
>
> -static int tmp421_init(I2CSlave *i2c)
> +static void tmp421_realize(I2CSlave *i2c, Error **errp)
> {
> TMP421State *s = TMP421(i2c);
>
> tmp421_reset(&s->i2c);
> -
> - return 0;
> }
>
> static void tmp421_initfn(Object *obj)
> @@ -366,7 +364,7 @@ static void tmp421_class_init(ObjectClass *klass, void *data)
> I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
> TMP421Class *sc = TMP421_CLASS(klass);
>
> - k->init = tmp421_init;
> + k->realize = tmp421_realize;
> k->event = tmp421_event;
> k->recv = tmp421_rx;
> k->send = tmp421_tx;
> diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
> index efa3621ac6..691cadb4a8 100644
> --- a/hw/nvram/eeprom_at24c.c
> +++ b/hw/nvram/eeprom_at24c.c
> @@ -117,31 +117,29 @@ int at24c_eeprom_send(I2CSlave *s, uint8_t data)
> return 0;
> }
>
> -static
> -int at24c_eeprom_init(I2CSlave *i2c)
> +static void at24c_eeprom_realize(I2CSlave *slave, Error **errp)
> {
> - EEPROMState *ee = AT24C_EE(i2c);
> -
> - ee->mem = g_malloc0(ee->rsize);
> + EEPROMState *ee = AT24C_EE(slave);
>
> if (ee->blk) {
> int64_t len = blk_getlength(ee->blk);
>
> if (len != ee->rsize) {
> - ERR(TYPE_AT24C_EE " : Backing file size %lu != %u\n",
> - (unsigned long)len, (unsigned)ee->rsize);
> - exit(1);
> + error_setg(errp, TYPE_AT24C_EE ": Backing file size %ld != %u",
> + len, ee->rsize);
> + return;
And this fails on 32bit hosts...
hw/nvram/eeprom_at24c.c: In function 'at24c_eeprom_realize':
include/qapi/error.h:162:25: error: format '%ld' expects argument of
type 'long int', but argument 6 has type 'int64_t {aka long long int}'
[-Werror=format=]
hw/nvram/eeprom_at24c.c:128:13: note: in expansion of macro 'error_setg'
error_setg(errp, TYPE_AT24C_EE ": Backing file size %ld != %u",
^~~~~~~~~~
cc1: all warnings being treated as errors
> }
>
> if (blk_set_perm(ee->blk, BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE,
> BLK_PERM_ALL, &error_fatal) < 0)
> {
> - ERR(TYPE_AT24C_EE
> - " : Backing file incorrect permission\n");
> - exit(1);
> + error_setg(errp, TYPE_AT24C_EE
> + ": Backing file incorrect permission");
> + return;
> }
> }
> - return 0;
> +
> + ee->mem = g_malloc0(ee->rsize);
> }
>
> static
> @@ -179,7 +177,7 @@ void at24c_eeprom_class_init(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> I2CSlaveClass *k = I2C_SLAVE_CLASS(klass);
>
> - k->init = &at24c_eeprom_init;
> + k->realize = &at24c_eeprom_realize;
> k->event = &at24c_eeprom_event;
> k->recv = &at24c_eeprom_recv;
> k->send = &at24c_eeprom_send;
> diff --git a/hw/timer/twl92230.c b/hw/timer/twl92230.c
> index eb58c378e0..4f18080c95 100644
> --- a/hw/timer/twl92230.c
> +++ b/hw/timer/twl92230.c
> @@ -853,10 +853,10 @@ static const VMStateDescription vmstate_menelaus = {
> }
> };
>
> -static int twl92230_init(I2CSlave *i2c)
> +static void twl92230_realize(I2CSlave *slave, Error **errp)
> {
> - DeviceState *dev = DEVICE(i2c);
> - MenelausState *s = TWL92230(i2c);
> + DeviceState *dev = DEVICE(slave);
> + MenelausState *s = TWL92230(slave);
>
> s->rtc.hz_tm = timer_new_ms(rtc_clock, menelaus_rtc_hz, s);
> /* Three output pins plus one interrupt pin. */
> @@ -865,9 +865,7 @@ static int twl92230_init(I2CSlave *i2c)
> /* Three input pins plus one power-button pin. */
> qdev_init_gpio_in(dev, menelaus_gpio_set, 4);
>
> - menelaus_reset(i2c);
> -
> - return 0;
> + menelaus_reset(slave);
> }
>
> static void twl92230_class_init(ObjectClass *klass, void *data)
> @@ -875,7 +873,7 @@ static void twl92230_class_init(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> I2CSlaveClass *sc = I2C_SLAVE_CLASS(klass);
>
> - sc->init = twl92230_init;
> + sc->realize = twl92230_realize;
> sc->event = menelaus_event;
> sc->recv = menelaus_rx;
> sc->send = menelaus_tx;
>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init -> realize
2018-01-16 14:07 ` Philippe Mathieu-Daudé
@ 2018-01-16 16:11 ` Farhan Ali
0 siblings, 0 replies; 28+ messages in thread
From: Farhan Ali @ 2018-01-16 16:11 UTC (permalink / raw)
To: Philippe Mathieu-Daudé,
Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: Michael S. Tsirkin, Cornelia Huck, Alexander Graf, qemu-devel,
Christian Borntraeger, open list:virtio-ccw, Richard Henderson
On 01/16/2018 09:07 AM, Philippe Mathieu-Daudé wrote:
> On 01/16/2018 10:41 AM, Farhan Ali wrote:
>> shouldn't the commit message say exit -> unrealize?
>
> Oops, indeed :|
>
> Thanks :)
>
> Phil.
Sure, you are welcome :)
With the change in commit message, the patch looks good to me:
Reviewed-by: Farhan Ali <alifm@linux.vnet.ibm.com>
>
>>
>>
>> Thanks
>> Farhan
>>
>> On 01/16/2018 08:15 AM, Philippe Mathieu-Daudé wrote:
>>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>> ---
>>> hw/s390x/virtio-ccw.h | 2 +-
>>> hw/s390x/virtio-ccw.c | 35 +++++++++++++++++------------------
>>> 2 files changed, 18 insertions(+), 19 deletions(-)
>>>
>>> diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h
>>> index 3905f3a3d6..2fc513001e 100644
>>> --- a/hw/s390x/virtio-ccw.h
>>> +++ b/hw/s390x/virtio-ccw.h
>>> @@ -76,7 +76,7 @@ typedef struct VirtioCcwDevice VirtioCcwDevice;
>>> typedef struct VirtIOCCWDeviceClass {
>>> CCWDeviceClass parent_class;
>>> void (*realize)(VirtioCcwDevice *dev, Error **errp);
>>> - int (*exit)(VirtioCcwDevice *dev);
>>> + void (*unrealize)(VirtioCcwDevice *dev, Error **errp);
>>> } VirtIOCCWDeviceClass;
>>>
>>> /* Performance improves when virtqueue kick processing is decoupled
>>> from the
>>> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
>>> index 38f6a8afc9..a71c3feeb5 100644
>>> --- a/hw/s390x/virtio-ccw.c
>>> +++ b/hw/s390x/virtio-ccw.c
>>> @@ -751,7 +751,7 @@ out_err:
>>> g_free(sch);
>>> }
>>>
>>> -static int virtio_ccw_exit(VirtioCcwDevice *dev)
>>> +static void virtio_ccw_unrealize(VirtioCcwDevice *dev, Error **errp)
>>> {
>>> CcwDevice *ccw_dev = CCW_DEVICE(dev);
>>> SubchDev *sch = ccw_dev->sch;
>>> @@ -764,7 +764,6 @@ static int virtio_ccw_exit(VirtioCcwDevice *dev)
>>> release_indicator(&dev->routes.adapter, dev->indicators);
>>> dev->indicators = NULL;
>>> }
>>> - return 0;
>>> }
>>>
>>> static void virtio_ccw_net_realize(VirtioCcwDevice *ccw_dev, Error
>>> **errp)
>>> @@ -1343,7 +1342,7 @@ static void
>>> virtio_ccw_net_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_net_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_net_properties;
>>> set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
>>> @@ -1371,7 +1370,7 @@ static void
>>> virtio_ccw_blk_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_blk_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_blk_properties;
>>> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
>>> @@ -1399,7 +1398,7 @@ static void
>>> virtio_ccw_serial_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_serial_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_serial_properties;
>>> set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>>> @@ -1427,7 +1426,7 @@ static void
>>> virtio_ccw_balloon_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_balloon_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_balloon_properties;
>>> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>>> @@ -1455,7 +1454,7 @@ static void
>>> virtio_ccw_scsi_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_scsi_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_scsi_properties;
>>> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
>>> @@ -1482,7 +1481,7 @@ static void
>>> vhost_ccw_scsi_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = vhost_ccw_scsi_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = vhost_ccw_scsi_properties;
>>> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
>>> @@ -1519,7 +1518,7 @@ static void
>>> virtio_ccw_rng_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_rng_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_rng_properties;
>>> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>>> @@ -1557,7 +1556,7 @@ static void
>>> virtio_ccw_crypto_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_crypto_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_crypto_properties;
>>> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>>> @@ -1595,7 +1594,7 @@ static void
>>> virtio_ccw_gpu_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_gpu_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_gpu_properties;
>>> dc->hotpluggable = false;
>>> @@ -1624,7 +1623,7 @@ static void
>>> virtio_ccw_input_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = virtio_ccw_input_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_input_properties;
>>> set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>>> @@ -1704,12 +1703,12 @@ static void
>>> virtio_ccw_busdev_realize(DeviceState *dev, Error **errp)
>>> virtio_ccw_device_realize(_dev, errp);
>>> }
>>>
>>> -static int virtio_ccw_busdev_exit(DeviceState *dev)
>>> +static void virtio_ccw_busdev_unrealize(DeviceState *dev, Error **errp)
>>> {
>>> VirtioCcwDevice *_dev = (VirtioCcwDevice *)dev;
>>> - VirtIOCCWDeviceClass *_info = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
>>> + VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
>>>
>>> - return _info->exit(_dev);
>>> + k->unrealize(_dev, errp);
>>> }
>>>
>>> static void virtio_ccw_busdev_unplug(HotplugHandler *hotplug_dev,
>>> @@ -1727,7 +1726,7 @@ static void
>>> virtio_ccw_device_class_init(ObjectClass *klass, void *data)
>>>
>>> k->unplug = virtio_ccw_busdev_unplug;
>>> dc->realize = virtio_ccw_busdev_realize;
>>> - dc->exit = virtio_ccw_busdev_exit;
>>> + dc->unrealize = virtio_ccw_busdev_unrealize;
>>> dc->bus_type = TYPE_VIRTUAL_CSS_BUS;
>>> }
>>>
>>> @@ -1803,7 +1802,7 @@ static void virtio_ccw_9p_class_init(ObjectClass
>>> *klass, void *data)
>>> DeviceClass *dc = DEVICE_CLASS(klass);
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> k->realize = virtio_ccw_9p_realize;
>>> dc->reset = virtio_ccw_reset;
>>> dc->props = virtio_ccw_9p_properties;
>>> @@ -1852,7 +1851,7 @@ static void
>>> vhost_vsock_ccw_class_init(ObjectClass *klass, void *data)
>>> VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
>>>
>>> k->realize = vhost_vsock_ccw_realize;
>>> - k->exit = virtio_ccw_exit;
>>> + k->unrealize = virtio_ccw_unrealize;
>>> set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>>> dc->props = vhost_vsock_ccw_properties;
>>> dc->reset = virtio_ccw_reset;
>>>
>>
>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init -> realize
2018-01-16 13:15 ` [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init " Philippe Mathieu-Daudé
2018-01-16 13:41 ` Farhan Ali
@ 2018-01-16 16:52 ` Cornelia Huck
2018-01-17 12:30 ` Philippe Mathieu-Daudé
1 sibling, 1 reply; 28+ messages in thread
From: Cornelia Huck @ 2018-01-16 16:52 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum, qemu-devel, Christian Borntraeger,
Michael S. Tsirkin, Alexander Graf, Richard Henderson,
open list:virtio-ccw
On Tue, 16 Jan 2018 10:15:49 -0300
Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> hw/s390x/virtio-ccw.h | 2 +-
> hw/s390x/virtio-ccw.c | 35 +++++++++++++++++------------------
> 2 files changed, 18 insertions(+), 19 deletions(-)
I assume someone(tm) will merge that series as a whole?
If so (and with the commit message fixed),
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit()
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
` (10 preceding siblings ...)
2018-01-16 13:15 ` [Qemu-devel] [PATCH 11/11] qdev: rename typedef qdev_resetfn() -> DeviceReset() Philippe Mathieu-Daudé
@ 2018-01-17 5:45 ` no-reply
11 siblings, 0 replies; 28+ messages in thread
From: no-reply @ 2018-01-17 5:45 UTC (permalink / raw)
To: f4bug
Cc: famz, ehabkost, armbru, peter.maydell, pbonzini, eblake, marcel,
cminyard, thuth, mst, cohuck, qemu-devel, borntraeger, clg,
kraxel, dgilbert, david
Hi,
This series failed docker-mingw@fedora build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
Type: series
Message-id: 20180116131555.14242-1-f4bug@amsat.org
Subject: [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit()
=== TEST SCRIPT BEGIN ===
#!/bin/bash
set -e
git submodule update --init dtc
# Let docker tests dump environment info
export SHOW_ENV=1
export J=8
time make docker-test-mingw@fedora
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
t [tag update] patchew/20180115170243.24578-1-berrange@redhat.com -> patchew/20180115170243.24578-1-berrange@redhat.com
Switched to a new branch 'test'
8a511044fd qdev: rename typedef qdev_resetfn() -> DeviceReset()
7b8b539cc2 qdev: remove empty realize/unrealize stubs
8eb472976f qdev: remove DeviceClass::exit
0f4697db59 qdev: remove DeviceClass::init
a2de037067 qdev: simplify the SysBusDeviceClass::init path
d84d6882ed sysbus: add realize() and unrealize()
dae9ccfb44 virtio-ccw: convert VirtIOCCWDeviceClass::init -> realize
2c474c1777 usb-ccid: convert CCIDCardClass::init -> realize
bc93b82615 hw/i2c: convert I2CSlaveClass::init -> realize
515a5a9b11 smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset
224b669cd4 smbus: add a NULL check for SMBusDeviceClass::init callbacks
=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-t68avrnp/src/dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
BUILD fedora
make[1]: Entering directory '/var/tmp/patchew-tester-tmp-t68avrnp/src'
GEN /var/tmp/patchew-tester-tmp-t68avrnp/src/docker-src.2018-01-17-00.43.41.32609/qemu.tar
Cloning into '/var/tmp/patchew-tester-tmp-t68avrnp/src/docker-src.2018-01-17-00.43.41.32609/qemu.tar.vroot'...
done.
Checking out files: 44% (2547/5723)
Checking out files: 45% (2576/5723)
Checking out files: 46% (2633/5723)
Checking out files: 47% (2690/5723)
Checking out files: 48% (2748/5723)
Checking out files: 49% (2805/5723)
Checking out files: 50% (2862/5723)
Checking out files: 51% (2919/5723)
Checking out files: 52% (2976/5723)
Checking out files: 53% (3034/5723)
Checking out files: 54% (3091/5723)
Checking out files: 55% (3148/5723)
Checking out files: 56% (3205/5723)
Checking out files: 57% (3263/5723)
Checking out files: 58% (3320/5723)
Checking out files: 59% (3377/5723)
Checking out files: 60% (3434/5723)
Checking out files: 61% (3492/5723)
Checking out files: 62% (3549/5723)
Checking out files: 63% (3606/5723)
Checking out files: 64% (3663/5723)
Checking out files: 65% (3720/5723)
Checking out files: 66% (3778/5723)
Checking out files: 67% (3835/5723)
Checking out files: 68% (3892/5723)
Checking out files: 69% (3949/5723)
Checking out files: 70% (4007/5723)
Checking out files: 71% (4064/5723)
Checking out files: 72% (4121/5723)
Checking out files: 73% (4178/5723)
Checking out files: 74% (4236/5723)
Checking out files: 75% (4293/5723)
Checking out files: 76% (4350/5723)
Checking out files: 77% (4407/5723)
Checking out files: 78% (4464/5723)
Checking out files: 79% (4522/5723)
Checking out files: 80% (4579/5723)
Checking out files: 81% (4636/5723)
Checking out files: 82% (4693/5723)
Checking out files: 83% (4751/5723)
Checking out files: 84% (4808/5723)
Checking out files: 85% (4865/5723)
Checking out files: 86% (4922/5723)
Checking out files: 87% (4980/5723)
Checking out files: 88% (5037/5723)
Checking out files: 89% (5094/5723)
Checking out files: 90% (5151/5723)
Checking out files: 91% (5208/5723)
Checking out files: 92% (5266/5723)
Checking out files: 93% (5323/5723)
Checking out files: 94% (5380/5723)
Checking out files: 95% (5437/5723)
Checking out files: 96% (5495/5723)
Checking out files: 97% (5552/5723)
Checking out files: 98% (5609/5723)
Checking out files: 99% (5666/5723)
Checking out files: 100% (5723/5723)
Checking out files: 100% (5723/5723), done.
Your branch is up-to-date with 'origin/test'.
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-t68avrnp/src/docker-src.2018-01-17-00.43.41.32609/qemu.tar.vroot/dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb'
Cloning into '/var/tmp/patchew-tester-tmp-t68avrnp/src/docker-src.2018-01-17-00.43.41.32609/qemu.tar.vroot/ui/keycodemapdb'...
Submodule path 'ui/keycodemapdb': checked out '10739aa26051a5d49d88132604539d3ed085e72e'
COPY RUNNER
RUN test-mingw in qemu:fedora
Packages installed:
PyYAML-3.11-13.fc25.x86_64
SDL-devel-1.2.15-21.fc24.x86_64
bc-1.06.95-16.fc24.x86_64
bison-3.0.4-4.fc24.x86_64
bzip2-1.0.6-21.fc25.x86_64
ccache-3.3.4-1.fc25.x86_64
clang-3.9.1-2.fc25.x86_64
findutils-4.6.0-8.fc25.x86_64
flex-2.6.0-3.fc25.x86_64
gcc-6.4.1-1.fc25.x86_64
gcc-c++-6.4.1-1.fc25.x86_64
gettext-0.19.8.1-3.fc25.x86_64
git-2.9.5-1.fc25.x86_64
glib2-devel-2.50.3-1.fc25.x86_64
hostname-3.15-8.fc25.x86_64
libaio-devel-0.3.110-6.fc24.x86_64
libfdt-devel-1.4.2-1.fc25.x86_64
make-4.1-6.fc25.x86_64
mingw32-SDL-1.2.15-7.fc24.noarch
mingw32-bzip2-1.0.6-7.fc24.noarch
mingw32-curl-7.47.0-1.fc24.noarch
mingw32-glib2-2.50.3-1.fc25.noarch
mingw32-gmp-6.1.1-1.fc25.noarch
mingw32-gnutls-3.5.5-2.fc25.noarch
mingw32-gtk2-2.24.31-2.fc25.noarch
mingw32-gtk3-3.22.17-1.fc25.noarch
mingw32-libjpeg-turbo-1.5.1-1.fc25.noarch
mingw32-libpng-1.6.27-1.fc25.noarch
mingw32-libssh2-1.4.3-5.fc24.noarch
mingw32-libtasn1-4.9-1.fc25.noarch
mingw32-nettle-3.3-1.fc25.noarch
mingw32-pixman-0.34.0-1.fc25.noarch
mingw32-pkg-config-0.28-6.fc24.x86_64
mingw64-SDL-1.2.15-7.fc24.noarch
mingw64-bzip2-1.0.6-7.fc24.noarch
mingw64-curl-7.47.0-1.fc24.noarch
mingw64-glib2-2.50.3-1.fc25.noarch
mingw64-gmp-6.1.1-1.fc25.noarch
mingw64-gnutls-3.5.5-2.fc25.noarch
mingw64-gtk2-2.24.31-2.fc25.noarch
mingw64-gtk3-3.22.17-1.fc25.noarch
mingw64-libjpeg-turbo-1.5.1-1.fc25.noarch
mingw64-libpng-1.6.27-1.fc25.noarch
mingw64-libssh2-1.4.3-5.fc24.noarch
mingw64-libtasn1-4.9-1.fc25.noarch
mingw64-nettle-3.3-1.fc25.noarch
mingw64-pixman-0.34.0-1.fc25.noarch
mingw64-pkg-config-0.28-6.fc24.x86_64
nettle-devel-3.3-1.fc25.x86_64
package python2 is not installed
perl-5.24.2-387.fc25.x86_64
pixman-devel-0.34.0-2.fc24.x86_64
sparse-0.5.0-10.fc25.x86_64
tar-1.29-3.fc25.x86_64
which-2.21-1.fc25.x86_64
zlib-devel-1.2.8-10.fc24.x86_64
Environment variables:
PACKAGES=ccache gettext git tar PyYAML sparse flex bison python2 bzip2 hostname glib2-devel pixman-devel zlib-devel SDL-devel libfdt-devel gcc gcc-c++ clang make perl which bc findutils libaio-devel nettle-devel mingw32-pixman mingw32-glib2 mingw32-gmp mingw32-SDL mingw32-pkg-config mingw32-gtk2 mingw32-gtk3 mingw32-gnutls mingw32-nettle mingw32-libtasn1 mingw32-libjpeg-turbo mingw32-libpng mingw32-curl mingw32-libssh2 mingw32-bzip2 mingw64-pixman mingw64-glib2 mingw64-gmp mingw64-SDL mingw64-pkg-config mingw64-gtk2 mingw64-gtk3 mingw64-gnutls mingw64-nettle mingw64-libtasn1 mingw64-libjpeg-turbo mingw64-libpng mingw64-curl mingw64-libssh2 mingw64-bzip2
HOSTNAME=58e3f0e6ac93
MAKEFLAGS= -j8
J=8
CCACHE_DIR=/var/tmp/ccache
EXTRA_CONFIGURE_OPTS=
V=
SHOW_ENV=1
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
TARGET_LIST=
FGC=f25
SHLVL=1
HOME=/root
TEST_DIR=/tmp/qemu-test
DISTTAG=f25container
FEATURES=mingw clang pyyaml dtc
DEBUG=
_=/usr/bin/env
Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/tmp/qemu-test/install --cross-prefix=x86_64-w64-mingw32- --enable-trace-backends=simple --enable-debug --enable-gnutls --enable-nettle --enable-curl --enable-vnc --enable-bzip2 --enable-guest-agent --with-sdlabi=1.2 --with-gtkabi=2.0
Install prefix /tmp/qemu-test/install
BIOS directory /tmp/qemu-test/install
firmware path /tmp/qemu-test/install/share/qemu-firmware
binary directory /tmp/qemu-test/install
library directory /tmp/qemu-test/install/lib
module directory /tmp/qemu-test/install/lib
libexec directory /tmp/qemu-test/install/libexec
include directory /tmp/qemu-test/install/include
config directory /tmp/qemu-test/install
local state directory queried at runtime
Windows SDK no
Source path /tmp/qemu-test/src
GIT binary git
GIT submodules
C compiler x86_64-w64-mingw32-gcc
Host C compiler cc
C++ compiler x86_64-w64-mingw32-g++
Objective-C compiler clang
ARFLAGS rv
CFLAGS -g
QEMU_CFLAGS -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/pixman-1 -I$(SRC_PATH)/dtc/libfdt -Werror -mms-bitfields -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/x86_64-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -m64 -mcx16 -mthreads -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/p11-kit-1 -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/libpng16
LDFLAGS -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase -Wl,--warn-common -m64 -g
make make
install install
python python -B
smbd /usr/sbin/smbd
module support no
host CPU x86_64
host big endian no
target list x86_64-softmmu aarch64-softmmu
gprof enabled no
sparse enabled no
strip binaries no
profiler no
static build no
SDL support yes (1.2.15)
GTK support yes (2.24.31)
GTK GL support no
VTE support no
TLS priority NORMAL
GNUTLS support yes
GNUTLS rnd yes
libgcrypt no
libgcrypt kdf no
nettle yes (3.3)
nettle kdf yes
libtasn1 yes
curses support no
virgl support no
curl support yes
mingw32 support yes
Audio drivers dsound
Block whitelist (rw)
Block whitelist (ro)
VirtFS support no
Multipath support no
VNC support yes
VNC SASL support no
VNC JPEG support yes
VNC PNG support yes
xen support no
brlapi support no
bluez support no
Documentation no
PIE no
vde support no
netmap support no
Linux AIO support no
ATTR/XATTR support no
Install blobs yes
KVM support no
HAX support yes
HVF support no
TCG support yes
TCG debug enabled yes
TCG interpreter no
malloc trim support no
RDMA support no
fdt support yes
preadv support no
fdatasync no
madvise no
posix_madvise no
libcap-ng support no
vhost-net support no
vhost-scsi support no
vhost-vsock support no
vhost-user support no
Trace backends simple
Trace output file trace-<pid>
spice support no
rbd support no
xfsctl support no
smartcard support no
libusb no
usb net redir no
OpenGL support no
OpenGL dmabufs no
libiscsi support no
libnfs support no
build guest agent yes
QGA VSS support no
QGA w32 disk info yes
QGA MSI support no
seccomp support no
coroutine backend win32
coroutine pool yes
debug stack usage no
crypto afalg no
GlusterFS support no
gcov gcov
gcov enabled no
TPM support yes
libssh2 support yes
TPM passthrough no
TPM emulator no
QOM debugging yes
Live block migration yes
lzo support no
snappy support no
bzip2 support yes
NUMA host support no
tcmalloc support no
jemalloc support no
avx2 optimization yes
replication support yes
VxHS block device no
capstone no
WARNING: Use of GTK 2.0 is deprecated and will be removed in
WARNING: future releases. Please switch to using GTK 3.0
mkdir -p dtc/libfdt
GEN x86_64-softmmu/config-devices.mak.tmp
mkdir -p dtc/tests
GEN config-host.h
GEN qemu-options.def
GEN aarch64-softmmu/config-devices.mak.tmp
GEN qmp-commands.h
GEN qapi-visit.h
GEN qapi-types.h
GEN qapi-event.h
GEN x86_64-softmmu/config-devices.mak
GEN qmp-marshal.c
GEN qapi-types.c
GEN aarch64-softmmu/config-devices.mak
GEN qapi-visit.c
GEN qapi-event.c
GEN qmp-introspect.h
GEN qmp-introspect.c
GEN trace/generated-tcg-tracers.h
GEN trace/generated-helpers-wrappers.h
GEN trace/generated-helpers.h
GEN trace/generated-helpers.c
GEN module_block.h
GEN ui/input-keymap-linux-to-qcode.c
GEN ui/input-keymap-qcode-to-qnum.c
GEN ui/input-keymap-qnum-to-qcode.c
GEN ui/input-keymap-qcode-to-linux.c
GEN tests/test-qapi-types.h
GEN tests/test-qapi-visit.h
GEN tests/test-qmp-commands.h
GEN tests/test-qapi-event.h
GEN tests/test-qmp-introspect.h
GEN trace-root.h
GEN util/trace.h
GEN crypto/trace.h
GEN io/trace.h
GEN migration/trace.h
GEN block/trace.h
GEN chardev/trace.h
GEN hw/block/trace.h
GEN hw/block/dataplane/trace.h
GEN hw/char/trace.h
GEN hw/intc/trace.h
GEN hw/net/trace.h
GEN hw/virtio/trace.h
GEN hw/audio/trace.h
GEN hw/misc/trace.h
GEN hw/usb/trace.h
GEN hw/scsi/trace.h
GEN hw/nvram/trace.h
GEN hw/display/trace.h
GEN hw/input/trace.h
GEN hw/timer/trace.h
GEN hw/dma/trace.h
GEN hw/sparc/trace.h
GEN hw/sparc64/trace.h
GEN hw/sd/trace.h
GEN hw/isa/trace.h
GEN hw/mem/trace.h
GEN hw/i386/trace.h
GEN hw/i386/xen/trace.h
GEN hw/9pfs/trace.h
GEN hw/ppc/trace.h
GEN hw/pci/trace.h
GEN hw/s390x/trace.h
GEN hw/vfio/trace.h
GEN hw/acpi/trace.h
GEN hw/arm/trace.h
GEN hw/alpha/trace.h
GEN hw/xen/trace.h
GEN hw/ide/trace.h
GEN ui/trace.h
GEN audio/trace.h
GEN net/trace.h
GEN target/arm/trace.h
GEN target/i386/trace.h
GEN target/mips/trace.h
GEN target/sparc/trace.h
GEN target/s390x/trace.h
GEN target/ppc/trace.h
GEN qom/trace.h
GEN linux-user/trace.h
GEN qapi/trace.h
GEN accel/tcg/trace.h
GEN accel/kvm/trace.h
GEN nbd/trace.h
GEN scsi/trace.h
GEN trace-root.c
GEN util/trace.c
GEN crypto/trace.c
GEN io/trace.c
GEN migration/trace.c
GEN block/trace.c
GEN chardev/trace.c
GEN hw/block/trace.c
GEN hw/block/dataplane/trace.c
GEN hw/char/trace.c
GEN hw/intc/trace.c
GEN hw/net/trace.c
GEN hw/virtio/trace.c
GEN hw/audio/trace.c
GEN hw/misc/trace.c
GEN hw/usb/trace.c
GEN hw/scsi/trace.c
GEN hw/nvram/trace.c
GEN hw/display/trace.c
GEN hw/input/trace.c
GEN hw/timer/trace.c
GEN hw/dma/trace.c
GEN hw/sparc/trace.c
GEN hw/sparc64/trace.c
GEN hw/sd/trace.c
GEN hw/isa/trace.c
GEN hw/mem/trace.c
GEN hw/i386/trace.c
GEN hw/i386/xen/trace.c
GEN hw/9pfs/trace.c
GEN hw/ppc/trace.c
GEN hw/pci/trace.c
GEN hw/s390x/trace.c
GEN hw/vfio/trace.c
GEN hw/acpi/trace.c
GEN hw/arm/trace.c
GEN hw/alpha/trace.c
GEN hw/xen/trace.c
GEN hw/ide/trace.c
GEN ui/trace.c
GEN audio/trace.c
GEN net/trace.c
GEN target/arm/trace.c
GEN target/i386/trace.c
GEN target/mips/trace.c
GEN target/sparc/trace.c
GEN target/s390x/trace.c
GEN target/ppc/trace.c
GEN qom/trace.c
GEN linux-user/trace.c
GEN qapi/trace.c
GEN accel/tcg/trace.c
GEN accel/kvm/trace.c
GEN nbd/trace.c
GEN scsi/trace.c
GEN config-all-devices.mak
DEP /tmp/qemu-test/src/dtc/tests/trees.S
DEP /tmp/qemu-test/src/dtc/tests/dumptrees.c
DEP /tmp/qemu-test/src/dtc/tests/testutils.c
DEP /tmp/qemu-test/src/dtc/tests/value-labels.c
DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c
DEP /tmp/qemu-test/src/dtc/tests/truncated_property.c
DEP /tmp/qemu-test/src/dtc/tests/check_path.c
DEP /tmp/qemu-test/src/dtc/tests/overlay.c
DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c
DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c
DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c
DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c
DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c
DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c
DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c
DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c
DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c
DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c
DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c
DEP /tmp/qemu-test/src/dtc/tests/incbin.c
DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c
DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c
DEP /tmp/qemu-test/src/dtc/tests/path-references.c
DEP /tmp/qemu-test/src/dtc/tests/references.c
DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c
DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c
DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c
DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c
DEP /tmp/qemu-test/src/dtc/tests/del_node.c
DEP /tmp/qemu-test/src/dtc/tests/del_property.c
DEP /tmp/qemu-test/src/dtc/tests/setprop.c
DEP /tmp/qemu-test/src/dtc/tests/set_name.c
DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c
DEP /tmp/qemu-test/src/dtc/tests/open_pack.c
DEP /tmp/qemu-test/src/dtc/tests/nopulate.c
DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c
DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c
DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c
DEP /tmp/qemu-test/src/dtc/tests/nop_node.c
DEP /tmp/qemu-test/src/dtc/tests/nop_property.c
DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c
DEP /tmp/qemu-test/src/dtc/tests/stringlist.c
DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c
DEP /tmp/qemu-test/src/dtc/tests/notfound.c
DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c
DEP /tmp/qemu-test/src/dtc/tests/char_literal.c
DEP /tmp/qemu-test/src/dtc/tests/get_alias.c
DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c
DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c
DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c
DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c
DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c
DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c
DEP /tmp/qemu-test/src/dtc/tests/get_path.c
DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c
DEP /tmp/qemu-test/src/dtc/tests/getprop.c
DEP /tmp/qemu-test/src/dtc/tests/get_name.c
DEP /tmp/qemu-test/src/dtc/tests/path_offset.c
DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c
DEP /tmp/qemu-test/src/dtc/tests/find_property.c
DEP /tmp/qemu-test/src/dtc/tests/root_node.c
DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c
DEP /tmp/qemu-test/src/dtc/util.c
DEP /tmp/qemu-test/src/dtc/fdtoverlay.c
DEP /tmp/qemu-test/src/dtc/fdtput.c
DEP /tmp/qemu-test/src/dtc/fdtget.c
LEX convert-dtsv0-lexer.lex.c
DEP /tmp/qemu-test/src/dtc/fdtdump.c
DEP /tmp/qemu-test/src/dtc/srcpos.c
BISON dtc-parser.tab.c
LEX dtc-lexer.lex.c
DEP /tmp/qemu-test/src/dtc/treesource.c
DEP /tmp/qemu-test/src/dtc/livetree.c
DEP /tmp/qemu-test/src/dtc/fstree.c
DEP /tmp/qemu-test/src/dtc/dtc.c
DEP /tmp/qemu-test/src/dtc/flattree.c
DEP /tmp/qemu-test/src/dtc/checks.c
DEP /tmp/qemu-test/src/dtc/data.c
DEP convert-dtsv0-lexer.lex.c
DEP dtc-lexer.lex.c
DEP dtc-parser.tab.c
CHK version_gen.h
UPD version_gen.h
DEP /tmp/qemu-test/src/dtc/util.c
CC libfdt/fdt.o
CC libfdt/fdt_ro.o
CC libfdt/fdt_sw.o
CC libfdt/fdt_wip.o
CC libfdt/fdt_rw.o
CC libfdt/fdt_strerror.o
CC libfdt/fdt_empty_tree.o
CC libfdt/fdt_addresses.o
CC libfdt/fdt_overlay.o
AR libfdt/libfdt.a
x86_64-w64-mingw32-ar: creating libfdt/libfdt.a
a - libfdt/fdt.o
a - libfdt/fdt_ro.o
a - libfdt/fdt_wip.o
a - libfdt/fdt_sw.o
a - libfdt/fdt_rw.o
a - libfdt/fdt_strerror.o
a - libfdt/fdt_empty_tree.o
a - libfdt/fdt_addresses.o
a - libfdt/fdt_overlay.o
RC version.o
mkdir -p dtc/libfdt
mkdir -p dtc/tests
GEN qga/qapi-generated/qga-qapi-types.h
GEN qga/qapi-generated/qga-qapi-visit.h
GEN qga/qapi-generated/qga-qmp-commands.h
GEN qga/qapi-generated/qga-qapi-types.c
CC qmp-introspect.o
CC qapi-types.o
GEN qga/qapi-generated/qga-qmp-marshal.c
GEN qga/qapi-generated/qga-qapi-visit.c
CC qapi-visit.o
CC qapi-event.o
CC qapi/qapi-visit-core.o
CC qapi/qapi-dealloc-visitor.o
CC qapi/qobject-input-visitor.o
CC qapi/qobject-output-visitor.o
CC qapi/qmp-registry.o
CC qapi/qmp-dispatch.o
CC qapi/string-input-visitor.o
CC qapi/string-output-visitor.o
CC qapi/opts-visitor.o
CC qapi/qapi-clone-visitor.o
CC qapi/qmp-event.o
CC qapi/qapi-util.o
CC qobject/qnum.o
CC qobject/qnull.o
CC qobject/qstring.o
CC qobject/qdict.o
CC qobject/qlist.o
CC qobject/qbool.o
CC qobject/qlit.o
CC qobject/qjson.o
CC qobject/qobject.o
CC qobject/json-lexer.o
CC qobject/json-streamer.o
CC qobject/json-parser.o
CC trace/simple.o
CC trace/control.o
CC trace/qmp.o
CC util/osdep.o
CC util/cutils.o
CC util/unicode.o
CC util/qemu-timer-common.o
CC util/bufferiszero.o
CC util/lockcnt.o
CC util/aiocb.o
CC util/async.o
CC util/thread-pool.o
CC util/qemu-timer.o
CC util/main-loop.o
CC util/iohandler.o
CC util/aio-win32.o
CC util/event_notifier-win32.o
CC util/oslib-win32.o
CC util/qemu-thread-win32.o
CC util/envlist.o
CC util/path.o
CC util/module.o
CC util/host-utils.o
CC util/bitmap.o
CC util/bitops.o
CC util/hbitmap.o
CC util/fifo8.o
CC util/acl.o
CC util/cacheinfo.o
CC util/error.o
CC util/qemu-error.o
CC util/id.o
CC util/iov.o
CC util/qemu-config.o
CC util/qemu-sockets.o
CC util/uri.o
CC util/notify.o
CC util/qemu-option.o
CC util/qemu-progress.o
CC util/keyval.o
CC util/hexdump.o
CC util/crc32c.o
CC util/uuid.o
CC util/throttle.o
CC util/getauxval.o
CC util/readline.o
CC util/rcu.o
CC util/qemu-coroutine.o
CC util/qemu-coroutine-lock.o
CC util/qemu-coroutine-io.o
CC util/qemu-coroutine-sleep.o
CC util/coroutine-win32.o
CC util/buffer.o
CC util/timed-average.o
CC util/base64.o
CC util/log.o
CC util/pagesize.o
CC util/qdist.o
CC util/qht.o
CC util/stats64.o
CC util/range.o
CC util/systemd.o
CC trace-root.o
CC util/trace.o
CC crypto/trace.o
CC io/trace.o
CC migration/trace.o
CC block/trace.o
CC chardev/trace.o
CC hw/block/trace.o
CC hw/block/dataplane/trace.o
CC hw/char/trace.o
CC hw/intc/trace.o
CC hw/net/trace.o
CC hw/virtio/trace.o
CC hw/audio/trace.o
CC hw/misc/trace.o
CC hw/usb/trace.o
CC hw/scsi/trace.o
CC hw/nvram/trace.o
CC hw/display/trace.o
CC hw/input/trace.o
CC hw/timer/trace.o
CC hw/dma/trace.o
CC hw/sparc/trace.o
CC hw/sparc64/trace.o
CC hw/sd/trace.o
CC hw/isa/trace.o
CC hw/mem/trace.o
CC hw/i386/trace.o
CC hw/i386/xen/trace.o
CC hw/9pfs/trace.o
CC hw/ppc/trace.o
CC hw/pci/trace.o
CC hw/s390x/trace.o
CC hw/vfio/trace.o
CC hw/acpi/trace.o
CC hw/arm/trace.o
CC hw/alpha/trace.o
CC hw/xen/trace.o
CC hw/ide/trace.o
CC ui/trace.o
CC audio/trace.o
CC net/trace.o
CC target/arm/trace.o
CC target/i386/trace.o
CC target/mips/trace.o
CC target/sparc/trace.o
CC target/s390x/trace.o
CC qom/trace.o
CC target/ppc/trace.o
CC linux-user/trace.o
CC qapi/trace.o
CC accel/tcg/trace.o
CC accel/kvm/trace.o
CC nbd/trace.o
CC scsi/trace.o
CC crypto/pbkdf-stub.o
CC stubs/arch-query-cpu-def.o
CC stubs/arch-query-cpu-model-expansion.o
CC stubs/arch-query-cpu-model-comparison.o
CC stubs/arch-query-cpu-model-baseline.o
CC stubs/bdrv-next-monitor-owned.o
CC stubs/blk-commit-all.o
CC stubs/blockdev-close-all-bdrv-states.o
CC stubs/cpu-get-clock.o
CC stubs/clock-warp.o
CC stubs/cpu-get-icount.o
CC stubs/dump.o
CC stubs/error-printf.o
CC stubs/fdset.o
CC stubs/gdbstub.o
CC stubs/get-vm-name.o
CC stubs/iothread.o
CC stubs/iothread-lock.o
CC stubs/is-daemonized.o
CC stubs/machine-init-done.o
CC stubs/migr-blocker.o
CC stubs/change-state-handler.o
CC stubs/monitor.o
CC stubs/notify-event.o
CC stubs/qtest.o
CC stubs/replay.o
CC stubs/runstate-check.o
CC stubs/set-fd-handler.o
CC stubs/slirp.o
CC stubs/sysbus.o
CC stubs/tpm.o
CC stubs/trace-control.o
CC stubs/uuid.o
CC stubs/vm-stop.o
CC stubs/vmstate.o
CC stubs/fd-register.o
CC stubs/qmp_pc_dimm.o
CC stubs/target-monitor-defs.o
CC stubs/target-get-monitor-def.o
CC stubs/pc_madt_cpu_entry.o
CC stubs/vmgenid.o
CC stubs/xen-common.o
CC stubs/xen-hvm.o
CC stubs/pci-host-piix.o
GEN qemu-img-cmds.h
CC block.o
CC blockjob.o
CC qemu-io-cmds.o
CC replication.o
CC block/raw-format.o
CC block/qcow.o
CC block/vdi.o
CC block/vmdk.o
CC block/cloop.o
CC block/bochs.o
CC block/vpc.o
CC block/vvfat.o
CC block/dmg.o
CC block/qcow2.o
CC block/qcow2-refcount.o
CC block/qcow2-cluster.o
CC block/qcow2-snapshot.o
CC block/qcow2-cache.o
CC block/qcow2-bitmap.o
CC block/qed.o
CC block/qed-l2-cache.o
CC block/qed-table.o
CC block/qed-cluster.o
CC block/qed-check.o
CC block/vhdx.o
CC block/vhdx-endian.o
CC block/vhdx-log.o
CC block/quorum.o
CC block/parallels.o
CC block/blkdebug.o
CC block/blkverify.o
CC block/blkreplay.o
CC block/block-backend.o
CC block/snapshot.o
CC block/qapi.o
CC block/file-win32.o
CC block/win32-aio.o
CC block/null.o
CC block/mirror.o
CC block/commit.o
CC block/io.o
CC block/throttle-groups.o
CC block/nbd.o
CC block/nbd-client.o
CC block/sheepdog.o
CC block/accounting.o
CC block/dirty-bitmap.o
CC block/backup.o
CC block/replication.o
CC block/write-threshold.o
CC block/throttle.o
CC block/crypto.o
CC nbd/server.o
CC nbd/client.o
CC nbd/common.o
CC scsi/utils.o
CC block/curl.o
CC block/ssh.o
CC block/dmg-bz2.o
CC crypto/init.o
CC crypto/hash.o
CC crypto/hash-nettle.o
CC crypto/hmac.o
CC crypto/hmac-nettle.o
CC crypto/aes.o
CC crypto/desrfb.o
CC crypto/cipher.o
CC crypto/tlscreds.o
CC crypto/tlscredsanon.o
CC crypto/tlscredsx509.o
CC crypto/tlssession.o
CC crypto/secret.o
CC crypto/random-gnutls.o
CC crypto/pbkdf.o
CC crypto/pbkdf-nettle.o
CC crypto/ivgen.o
CC crypto/ivgen-essiv.o
CC crypto/ivgen-plain.o
CC crypto/afsplit.o
CC crypto/ivgen-plain64.o
CC crypto/xts.o
CC crypto/block.o
CC crypto/block-qcow.o
CC crypto/block-luks.o
CC io/channel.o
CC io/channel-buffer.o
CC io/channel-command.o
CC io/channel-file.o
CC io/channel-socket.o
CC io/channel-tls.o
CC io/channel-watch.o
CC io/channel-websock.o
CC io/channel-util.o
CC io/dns-resolver.o
CC io/net-listener.o
CC io/task.o
CC qom/object.o
CC qom/container.o
CC qom/qom-qobject.o
CC qom/object_interfaces.o
CC qemu-io.o
CC blockdev.o
CC blockdev-nbd.o
CC bootdevice.o
CC iothread.o
CC qdev-monitor.o
CC device-hotplug.o
CC os-win32.o
CC bt-host.o
CC bt-vhci.o
CC dma-helpers.o
CC vl.o
CC tpm.o
CC device_tree.o
CC qmp-marshal.o
CC qmp.o
CC hmp.o
CC cpus-common.o
CC audio/audio.o
CC audio/noaudio.o
CC audio/wavaudio.o
CC audio/mixeng.o
CC audio/sdlaudio.o
CC audio/dsoundaudio.o
CC audio/audio_win_int.o
CC audio/wavcapture.o
CC backends/rng.o
CC backends/rng-egd.o
CC backends/tpm.o
CC backends/hostmem.o
CC backends/hostmem-ram.o
CC backends/cryptodev.o
CC backends/cryptodev-builtin.o
CC block/stream.o
CC chardev/msmouse.o
CC chardev/wctablet.o
CC chardev/testdev.o
CC disas/arm.o
CXX disas/arm-a64.o
CC disas/i386.o
CXX disas/libvixl/vixl/utils.o
CXX disas/libvixl/vixl/compiler-intrinsics.o
CXX disas/libvixl/vixl/a64/instructions-a64.o
CXX disas/libvixl/vixl/a64/decoder-a64.o
CXX disas/libvixl/vixl/a64/disasm-a64.o
CC hw/acpi/core.o
CC hw/acpi/piix4.o
CC hw/acpi/pcihp.o
CC hw/acpi/ich9.o
CC hw/acpi/tco.o
CC hw/acpi/cpu_hotplug.o
CC hw/acpi/memory_hotplug.o
CC hw/acpi/cpu.o
CC hw/acpi/nvdimm.o
CC hw/acpi/vmgenid.o
CC hw/acpi/acpi_interface.o
CC hw/acpi/bios-linker-loader.o
CC hw/acpi/aml-build.o
CC hw/acpi/ipmi.o
CC hw/acpi/acpi-stub.o
CC hw/acpi/ipmi-stub.o
CC hw/audio/sb16.o
CC hw/audio/es1370.o
CC hw/audio/ac97.o
CC hw/audio/fmopl.o
CC hw/audio/adlib.o
CC hw/audio/gus.o
CC hw/audio/gusemu_hal.o
CC hw/audio/gusemu_mixer.o
CC hw/audio/cs4231a.o
CC hw/audio/intel-hda.o
CC hw/audio/hda-codec.o
CC hw/audio/pcspk.o
CC hw/audio/wm8750.o
CC hw/audio/pl041.o
CC hw/audio/lm4549.o
CC hw/audio/marvell_88w8618.o
CC hw/audio/soundhw.o
CC hw/block/block.o
CC hw/block/cdrom.o
CC hw/block/hd-geometry.o
CC hw/block/fdc.o
CC hw/block/m25p80.o
CC hw/block/nand.o
CC hw/block/pflash_cfi01.o
CC hw/block/pflash_cfi02.o
CC hw/block/ecc.o
CC hw/block/onenand.o
CC hw/block/nvme.o
CC hw/bt/core.o
CC hw/bt/l2cap.o
CC hw/bt/sdp.o
CC hw/bt/hci.o
CC hw/bt/hid.o
CC hw/bt/hci-csr.o
CC hw/char/ipoctal232.o
CC hw/char/parallel.o
CC hw/char/pl011.o
CC hw/char/serial.o
CC hw/char/serial-isa.o
CC hw/char/serial-pci.o
CC hw/char/virtio-console.o
CC hw/char/cadence_uart.o
CC hw/char/cmsdk-apb-uart.o
CC hw/char/debugcon.o
CC hw/char/imx_serial.o
CC hw/core/qdev.o
CC hw/core/qdev-properties.o
CC hw/core/bus.o
CC hw/core/reset.o
CC hw/core/fw-path-provider.o
CC hw/core/irq.o
CC hw/core/hotplug.o
CC hw/core/nmi.o
CC hw/core/stream.o
CC hw/core/ptimer.o
CC hw/core/sysbus.o
CC hw/core/machine.o
CC hw/core/loader.o
CC hw/core/qdev-properties-system.o
CC hw/core/register.o
CC hw/core/or-irq.o
CC hw/core/platform-bus.o
CC hw/cpu/core.o
CC hw/display/ads7846.o
CC hw/display/cirrus_vga.o
CC hw/display/pl110.o
CC hw/display/ssd0303.o
CC hw/display/ssd0323.o
CC hw/display/vga-pci.o
CC hw/display/vga-isa.o
CC hw/display/vmware_vga.o
CC hw/display/blizzard.o
CC hw/display/exynos4210_fimd.o
CC hw/display/framebuffer.o
CC hw/display/tc6393xb.o
CC hw/dma/pl080.o
CC hw/dma/pl330.o
CC hw/dma/i8257.o
CC hw/dma/xilinx_axidma.o
CC hw/dma/xlnx-zynq-devcfg.o
CC hw/gpio/max7310.o
CC hw/gpio/pl061.o
CC hw/gpio/zaurus.o
CC hw/gpio/gpio_key.o
CC hw/i2c/core.o
CC hw/i2c/smbus.o
CC hw/i2c/smbus_eeprom.o
CC hw/i2c/i2c-ddc.o
CC hw/i2c/versatile_i2c.o
CC hw/i2c/smbus_ich9.o
CC hw/i2c/pm_smbus.o
CC hw/i2c/exynos4210_i2c.o
CC hw/i2c/bitbang_i2c.o
CC hw/i2c/imx_i2c.o
CC hw/i2c/aspeed_i2c.o
CC hw/ide/core.o
CC hw/ide/atapi.o
CC hw/ide/qdev.o
CC hw/ide/pci.o
CC hw/ide/isa.o
CC hw/ide/piix.o
CC hw/ide/microdrive.o
CC hw/ide/ahci.o
CC hw/ide/ich.o
CC hw/ide/ahci-allwinner.o
CC hw/input/hid.o
CC hw/input/lm832x.o
CC hw/input/pckbd.o
CC hw/input/pl050.o
CC hw/input/ps2.o
CC hw/input/stellaris_input.o
CC hw/input/tsc2005.o
CC hw/input/virtio-input.o
CC hw/input/virtio-input-hid.o
CC hw/intc/i8259_common.o
CC hw/intc/i8259.o
CC hw/intc/pl190.o
CC hw/intc/realview_gic.o
CC hw/intc/imx_avic.o
CC hw/intc/ioapic_common.o
CC hw/intc/arm_gic_common.o
CC hw/intc/arm_gic.o
CC hw/intc/arm_gicv2m.o
CC hw/intc/arm_gicv3_common.o
CC hw/intc/arm_gicv3.o
CC hw/intc/arm_gicv3_dist.o
CC hw/intc/arm_gicv3_redist.o
CC hw/intc/arm_gicv3_its_common.o
CC hw/intc/intc.o
CC hw/ipack/ipack.o
CC hw/ipack/tpci200.o
CC hw/ipmi/ipmi.o
CC hw/ipmi/ipmi_bmc_sim.o
CC hw/ipmi/ipmi_bmc_extern.o
CC hw/ipmi/isa_ipmi_kcs.o
CC hw/ipmi/isa_ipmi_bt.o
CC hw/isa/isa-bus.o
CC hw/isa/apm.o
CC hw/mem/pc-dimm.o
CC hw/mem/nvdimm.o
CC hw/misc/applesmc.o
CC hw/misc/max111x.o
CC hw/misc/tmp105.o
CC hw/misc/tmp421.o
CC hw/misc/debugexit.o
CC hw/misc/sga.o
CC hw/misc/pc-testdev.o
CC hw/misc/pci-testdev.o
CC hw/misc/edu.o
CC hw/misc/unimp.o
CC hw/misc/arm_l2x0.o
CC hw/misc/vmcoreinfo.o
CC hw/misc/arm_integrator_debug.o
CC hw/misc/a9scu.o
CC hw/misc/arm11scu.o
CC hw/net/ne2000.o
CC hw/net/eepro100.o
CC hw/net/pcnet-pci.o
CC hw/net/pcnet.o
CC hw/net/e1000.o
CC hw/net/e1000x_common.o
CC hw/net/net_tx_pkt.o
CC hw/net/net_rx_pkt.o
CC hw/net/e1000e.o
CC hw/net/e1000e_core.o
CC hw/net/rtl8139.o
CC hw/net/vmxnet3.o
CC hw/net/smc91c111.o
CC hw/net/lan9118.o
CC hw/net/ne2000-isa.o
CC hw/net/xgmac.o
CC hw/net/xilinx_axienet.o
CC hw/net/allwinner_emac.o
CC hw/net/imx_fec.o
CC hw/net/cadence_gem.o
CC hw/net/stellaris_enet.o
CC hw/net/ftgmac100.o
CC hw/net/rocker/rocker.o
CC hw/net/rocker/rocker_fp.o
CC hw/net/rocker/rocker_desc.o
CC hw/net/rocker/rocker_world.o
CC hw/net/rocker/rocker_of_dpa.o
CC hw/nvram/eeprom93xx.o
CC hw/nvram/eeprom_at24c.o
CC hw/nvram/fw_cfg.o
CC hw/nvram/chrp_nvram.o
CC hw/pci-bridge/pci_bridge_dev.o
CC hw/pci-bridge/pcie_root_port.o
CC hw/pci-bridge/gen_pcie_root_port.o
CC hw/pci-bridge/pcie_pci_bridge.o
CC hw/pci-bridge/pci_expander_bridge.o
CC hw/pci-bridge/xio3130_upstream.o
CC hw/pci-bridge/xio3130_downstream.o
CC hw/pci-bridge/ioh3420.o
CC hw/pci-bridge/i82801b11.o
In file included from /tmp/qemu-test/src/hw/nvram/eeprom_at24c.c:13:0:
/tmp/qemu-test/src/hw/nvram/eeprom_at24c.c: In function 'at24c_eeprom_realize':
/tmp/qemu-test/src/include/qapi/error.h:162:25: error: format '%ld' expects argument of type 'long int', but argument 6 has type 'int64_t {aka long long int}' [-Werror=format=]
(fmt), ## __VA_ARGS__)
^
/tmp/qemu-test/src/hw/nvram/eeprom_at24c.c:128:13: note: in expansion of macro 'error_setg'
error_setg(errp, TYPE_AT24C_EE ": Backing file size %ld != %u",
^~~~~~~~~~
cc1: all warnings being treated as errors
make: *** [hw/nvram/eeprom_at24c.o] Error 1
make: *** Waiting for unfinished jobs....
/tmp/qemu-test/src/rules.mak:66: recipe for target 'hw/nvram/eeprom_at24c.o' failed
Traceback (most recent call last):
File "./tests/docker/docker.py", line 407, in <module>
sys.exit(main())
File "./tests/docker/docker.py", line 404, in main
return args.cmdobj.run(args, argv)
File "./tests/docker/docker.py", line 261, in run
return Docker().run(argv, args.keep, quiet=args.quiet)
File "./tests/docker/docker.py", line 229, in run
quiet=quiet)
File "./tests/docker/docker.py", line 147, in _do_check
return subprocess.check_call(self._command + cmd, **kwargs)
File "/usr/lib64/python2.7/subprocess.py", line 186, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['docker', 'run', '--label', 'com.qemu.instance.uuid=670b4eacfb4911e7ac0c52540069c830', '-u', '0', '--security-opt', 'seccomp=unconfined', '--rm', '--net=none', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=8', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/root/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-t68avrnp/src/docker-src.2018-01-17-00.43.41.32609:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-mingw']' returned non-zero exit status 2
make[1]: *** [tests/docker/Makefile.include:129: docker-run] Error 1
make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-t68avrnp/src'
make: *** [tests/docker/Makefile.include:163: docker-run-test-mingw@fedora] Error 2
real 2m1.454s
user 0m3.793s
sys 0m2.891s
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init -> realize
2018-01-16 16:52 ` Cornelia Huck
@ 2018-01-17 12:30 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-17 12:30 UTC (permalink / raw)
To: Cornelia Huck, Paolo Bonzini
Cc: Eduardo Habkost, Markus Armbruster, Peter Maydell, Eric Blake,
Marcel Apfelbaum, qemu-devel, Christian Borntraeger,
Michael S. Tsirkin, Alexander Graf, Richard Henderson,
open list:virtio-ccw
On 01/16/2018 01:52 PM, Cornelia Huck wrote:
> On Tue, 16 Jan 2018 10:15:49 -0300
> Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:
>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> hw/s390x/virtio-ccw.h | 2 +-
>> hw/s390x/virtio-ccw.c | 35 +++++++++++++++++------------------
>> 2 files changed, 18 insertions(+), 19 deletions(-)
>
> I assume someone(tm) will merge that series as a whole?
I suppose this series is candidate for Paolo's "ninja^H^H^H^H^Hmisc" tree.
>
> If so (and with the commit message fixed),
>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Sure, thanks!
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 04/11] usb-ccid: convert CCIDCardClass::init -> realize
2018-01-16 13:15 ` [Qemu-devel] [PATCH 04/11] usb-ccid: convert CCIDCardClass::init " Philippe Mathieu-Daudé
@ 2018-01-18 17:05 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-18 17:05 UTC (permalink / raw)
To: Eduardo Habkost, Markus Armbruster, Peter Maydell, Paolo Bonzini,
Eric Blake, Marcel Apfelbaum
Cc: qemu-devel, Gerd Hoffmann
On 01/16/2018 10:15 AM, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> hw/usb/ccid.h | 9 +++++--
> hw/usb/ccid-card-emulated.c | 42 ++++++++++++++++---------------
> hw/usb/ccid-card-passthru.c | 10 ++++----
> hw/usb/dev-smartcard-reader.c | 57 +++++++++++++++----------------------------
> 4 files changed, 54 insertions(+), 64 deletions(-)
>
> diff --git a/hw/usb/ccid.h b/hw/usb/ccid.h
> index 1f070116d6..11056b91ee 100644
> --- a/hw/usb/ccid.h
> +++ b/hw/usb/ccid.h
> @@ -28,20 +28,25 @@ typedef struct CCIDCardInfo CCIDCardInfo;
> * into the smartcard device (hw/ccid-card-*.c)
> */
> typedef struct CCIDCardClass {
> + /*< private >*/
> DeviceClass parent_class;
> + /*< public >*/
> +
> + void (*realize)(CCIDCardState *card, Error **errp);
> + void (*unrealize)(CCIDCardState *card, Error **errp);
> const uint8_t *(*get_atr)(CCIDCardState *card, uint32_t *len);
> void (*apdu_from_guest)(CCIDCardState *card,
> const uint8_t *apdu,
> uint32_t len);
> - void (*exitfn)(CCIDCardState *card);
> - int (*initfn)(CCIDCardState *card);
> } CCIDCardClass;
>
> /*
> * state of the CCID Card device (i.e. hw/ccid-card-*.c)
> */
> struct CCIDCardState {
> + /*< private >*/
> DeviceState qdev;
> + /*< public >*/
> uint32_t slot; /* For future use with multiple slot reader. */
> };
>
> diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
> index e646eb243b..8a512e73df 100644
> --- a/hw/usb/ccid-card-emulated.c
> +++ b/hw/usb/ccid-card-emulated.c
> @@ -27,6 +27,7 @@
> */
>
> #include "qemu/osdep.h"
> +#include "qapi/error.h"
> #include <eventt.h>
> #include <vevent.h>
> #include <vreader.h>
> @@ -480,7 +481,7 @@ static uint32_t parse_enumeration(char *str,
> return ret;
> }
>
> -static int emulated_initfn(CCIDCardState *base)
> +static void emulated_realize(CCIDCardState *base, Error **errp)
> {
> EmulatedState *card = EMULATED_CCID_CARD(base);
> VCardEmulError ret;
> @@ -495,7 +496,8 @@ static int emulated_initfn(CCIDCardState *base)
> card->reader = NULL;
> card->quit_apdu_thread = 0;
> if (init_event_notifier(card) < 0) {
> - return -1;
> + error_setg(errp, TYPE_EMULATED_CCID ": event notifier creation failed");
> + return;
> }
>
> card->backend = 0;
> @@ -505,11 +507,12 @@ static int emulated_initfn(CCIDCardState *base)
> }
>
> if (card->backend == 0) {
> - printf("backend must be one of:\n");
> + error_setg(errp, TYPE_EMULATED_CCID ": no backend specified.");
> + printf("backend must be one of:\n"); /* TODO remove */
> for (ptable = backend_enum_table; ptable->name != NULL; ++ptable) {
> printf("%s\n", ptable->name);
Oops I missed this printf(), now reading "qapi/error.h" I guess I have
to use error_append_hint() here.
> }
> - return -1;
> + return;
> }
>
> /* TODO: a passthru backened that works on local machine. third card type?*/
> @@ -517,37 +520,36 @@ static int emulated_initfn(CCIDCardState *base)
> if (card->cert1 != NULL && card->cert2 != NULL && card->cert3 != NULL) {
> ret = emulated_initialize_vcard_from_certificates(card);
> } else {
> - printf("%s: you must provide all three certs for"
> - " certificates backend\n", TYPE_EMULATED_CCID);
> - return -1;
> + error_setg(errp, TYPE_EMULATED_CCID ": you must provide all three "
> + "certs for certificates backend");
> + return;
> }
> } else {
> if (card->backend != BACKEND_NSS_EMULATED) {
> - printf("%s: bad backend specified. The options are:\n%s (default),"
> - " %s.\n", TYPE_EMULATED_CCID, BACKEND_NSS_EMULATED_NAME,
> - BACKEND_CERTIFICATES_NAME);
> - return -1;
> + error_setg(errp, TYPE_EMULATED_CCID ": bad backend specified. "
> + "The options are: %s (default), %s.",
> + BACKEND_NSS_EMULATED_NAME, BACKEND_CERTIFICATES_NAME);
same here.
> + return;
> }
> if (card->cert1 != NULL || card->cert2 != NULL || card->cert3 != NULL) {
> - printf("%s: unexpected cert parameters to nss emulated backend\n",
> - TYPE_EMULATED_CCID);
> - return -1;
> + error_setg(errp, TYPE_EMULATED_CCID ": unexpected cert parameters "
> + "to nss emulated backend");
> + return;
> }
> /* default to mirroring the local hardware readers */
> ret = wrap_vcard_emul_init(NULL);
> }
> if (ret != VCARD_EMUL_OK) {
> - printf("%s: failed to initialize vcard\n", TYPE_EMULATED_CCID);
> - return -1;
> + error_setg(errp, TYPE_EMULATED_CCID ": failed to initialize vcard");
> + return;
> }
> qemu_thread_create(&card->event_thread_id, "ccid/event", event_thread,
> card, QEMU_THREAD_JOINABLE);
> qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread,
> card, QEMU_THREAD_JOINABLE);
> - return 0;
> }
>
> -static void emulated_exitfn(CCIDCardState *base)
> +static void emulated_unrealize(CCIDCardState *base, Error **errp)
> {
> EmulatedState *card = EMULATED_CCID_CARD(base);
> VEvent *vevent = vevent_new(VEVENT_LAST, NULL, NULL);
> @@ -581,8 +583,8 @@ static void emulated_class_initfn(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> CCIDCardClass *cc = CCID_CARD_CLASS(klass);
>
> - cc->initfn = emulated_initfn;
> - cc->exitfn = emulated_exitfn;
> + cc->realize = emulated_realize;
> + cc->unrealize = emulated_unrealize;
> cc->get_atr = emulated_get_atr;
> cc->apdu_from_guest = emulated_apdu_from_guest;
> set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
> diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
> index 117711862e..844ad2f878 100644
> --- a/hw/usb/ccid-card-passthru.c
> +++ b/hw/usb/ccid-card-passthru.c
> @@ -9,6 +9,7 @@
> */
>
> #include "qemu/osdep.h"
> +#include "qapi/error.h"
> #include <cacard/vscard_common.h>
> #include "chardev/char-fe.h"
> #include "qemu/error-report.h"
> @@ -337,7 +338,7 @@ static const uint8_t *passthru_get_atr(CCIDCardState *base, uint32_t *len)
> return card->atr;
> }
>
> -static int passthru_initfn(CCIDCardState *base)
> +static void passthru_realize(CCIDCardState *base, Error **errp)
> {
> PassthruState *card = PASSTHRU_CCID_CARD(base);
>
> @@ -351,15 +352,14 @@ static int passthru_initfn(CCIDCardState *base)
> ccid_card_vscard_event, NULL, card, NULL, true);
> ccid_card_vscard_send_init(card);
> } else {
> - error_report("missing chardev");
> - return -1;
> + error_setg(errp, "missing chardev");
> + return;
> }
> card->debug = parse_debug_env("QEMU_CCID_PASSTHRU_DEBUG", D_VERBOSE,
> card->debug);
> assert(sizeof(DEFAULT_ATR) <= MAX_ATR_SIZE);
> memcpy(card->atr, DEFAULT_ATR, sizeof(DEFAULT_ATR));
> card->atr_length = sizeof(DEFAULT_ATR);
> - return 0;
> }
>
> static VMStateDescription passthru_vmstate = {
> @@ -387,7 +387,7 @@ static void passthru_class_initfn(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> CCIDCardClass *cc = CCID_CARD_CLASS(klass);
>
> - cc->initfn = passthru_initfn;
> + cc->realize = passthru_realize;
> cc->get_atr = passthru_get_atr;
> cc->apdu_from_guest = passthru_apdu_from_guest;
> set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
> diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c
> index e334d3be11..e36b190118 100644
> --- a/hw/usb/dev-smartcard-reader.c
> +++ b/hw/usb/dev-smartcard-reader.c
> @@ -37,7 +37,6 @@
> #include "qemu/osdep.h"
> #include "qapi/error.h"
> #include "qemu-common.h"
> -#include "qemu/error-report.h"
> #include "hw/usb.h"
> #include "hw/usb/desc.h"
>
> @@ -500,26 +499,6 @@ static void ccid_card_apdu_from_guest(CCIDCardState *card,
> }
> }
>
> -static void ccid_card_exitfn(CCIDCardState *card)
> -{
> - CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
> -
> - if (cc->exitfn) {
> - cc->exitfn(card);
> - }
> -
> -}
> -
> -static int ccid_card_initfn(CCIDCardState *card)
> -{
> - CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
> -
> - if (cc->initfn) {
> - return cc->initfn(card);
> - }
> - return 0;
> -}
> -
> static bool ccid_has_pending_answers(USBCCIDState *s)
> {
> return s->pending_answers_num > 0;
> @@ -1281,41 +1260,45 @@ void ccid_card_card_inserted(CCIDCardState *card)
> ccid_on_slot_change(s, true);
> }
>
> -static int ccid_card_exit(DeviceState *qdev)
> +static void ccid_card_unrealize(DeviceState *qdev, Error **errp)
> {
> CCIDCardState *card = CCID_CARD(qdev);
> + CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
> USBDevice *dev = USB_DEVICE(qdev->parent_bus->parent);
> USBCCIDState *s = USB_CCID_DEV(dev);
>
> if (ccid_card_inserted(s)) {
> ccid_card_card_removed(card);
> }
> - ccid_card_exitfn(card);
> + if (cc->unrealize) {
> + cc->unrealize(card, errp);
> + }
> s->card = NULL;
> - return 0;
> }
>
> -static int ccid_card_init(DeviceState *qdev)
> +static void ccid_card_realize(DeviceState *qdev, Error **errp)
> {
> CCIDCardState *card = CCID_CARD(qdev);
> + CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
> USBDevice *dev = USB_DEVICE(qdev->parent_bus->parent);
> USBCCIDState *s = USB_CCID_DEV(dev);
> - int ret = 0;
>
> if (card->slot != 0) {
> - warn_report("usb-ccid supports one slot, can't add %d",
> - card->slot);
> - return -1;
> + error_setg(errp, "usb-ccid supports one slot, can't add %d",
> + card->slot);
> + return;
> }
> if (s->card != NULL) {
> - warn_report("usb-ccid card already full, not adding");
> - return -1;
> + error_setg(errp, "usb-ccid card already full, not adding");
> + return;
> }
> - ret = ccid_card_initfn(card);
> - if (ret == 0) {
> - s->card = card;
> + if (cc->realize) {
> + cc->realize(card, errp);
> + if (errp && *errp) {
> + return;
> + }
> }
> - return ret;
> + s->card = card;
> }
>
> static void ccid_realize(USBDevice *dev, Error **errp)
> @@ -1477,8 +1460,8 @@ static void ccid_card_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *k = DEVICE_CLASS(klass);
> k->bus_type = TYPE_CCID_BUS;
> - k->init = ccid_card_init;
> - k->exit = ccid_card_exit;
> + k->realize = ccid_card_realize;
> + k->unrealize = ccid_card_unrealize;
> k->props = ccid_props;
> }
>
>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 01/11] smbus: add a NULL check for SMBusDeviceClass::init callbacks
2018-01-16 13:15 ` [Qemu-devel] [PATCH 01/11] smbus: add a NULL check for SMBusDeviceClass::init callbacks Philippe Mathieu-Daudé
@ 2018-01-19 17:58 ` Eduardo Habkost
0 siblings, 0 replies; 28+ messages in thread
From: Eduardo Habkost @ 2018-01-19 17:58 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini, Eric Blake,
Marcel Apfelbaum, qemu-devel
On Tue, Jan 16, 2018 at 10:15:45AM -0300, Philippe Mathieu-Daudé wrote:
> ensure SMBusDeviceClass::init is set before calling it
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
--
Eduardo
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 06/11] sysbus: add realize() and unrealize()
2018-01-16 13:15 ` [Qemu-devel] [PATCH 06/11] sysbus: add realize() and unrealize() Philippe Mathieu-Daudé
@ 2018-01-19 18:03 ` Eduardo Habkost
2018-01-19 19:03 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 28+ messages in thread
From: Eduardo Habkost @ 2018-01-19 18:03 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini, Eric Blake,
Marcel Apfelbaum, qemu-devel
On Tue, Jan 16, 2018 at 10:15:50AM -0300, Philippe Mathieu-Daudé wrote:
[...]
> +static void sysbus_realize(DeviceState *dev, Error **errp)
> +{
> + SysBusDevice *sd = SYS_BUS_DEVICE(dev);
> + SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
> +
> + if (sbc->realize) {
> + sbc->realize(sd, errp);
> + }
> +}
> +
> +static void sysbus_unrealize(DeviceState *dev, Error **errp)
> +{
> + SysBusDevice *sd = SYS_BUS_DEVICE(dev);
> + SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
> +
> + if (sbc->unrealize) {
> + sbc->unrealize(sd, errp);
> + }
> +}
Why not just let the subclasses set DeviceClass::realize and
DeviceClass::unrealize directly?
> +
> DeviceState *sysbus_create_varargs(const char *name,
> hwaddr addr, ...)
> {
> @@ -325,6 +346,8 @@ static void sysbus_device_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *k = DEVICE_CLASS(klass);
> k->init = sysbus_device_init;
> + k->realize = sysbus_realize;
> + k->unrealize = sysbus_unrealize;
> k->bus_type = TYPE_SYSTEM_BUS;
> /*
> * device_add plugs devices into a suitable bus. For "real" buses,
> --
> 2.15.1
>
>
--
Eduardo
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 02/11] smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset
2018-01-16 13:15 ` [Qemu-devel] [PATCH 02/11] smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset Philippe Mathieu-Daudé
@ 2018-01-19 18:15 ` Eduardo Habkost
2018-01-19 21:41 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 28+ messages in thread
From: Eduardo Habkost @ 2018-01-19 18:15 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini, Eric Blake,
Marcel Apfelbaum, qemu-devel
On Tue, Jan 16, 2018 at 10:15:46AM -0300, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> hw/i2c/smbus_eeprom.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c
> index b13ec0fe7a..7e81ae4fe5 100644
> --- a/hw/i2c/smbus_eeprom.c
> +++ b/hw/i2c/smbus_eeprom.c
> @@ -97,12 +97,11 @@ static uint8_t eeprom_read_data(SMBusDevice *dev, uint8_t cmd, int n)
> return eeprom_receive_byte(dev);
> }
>
> -static int smbus_eeprom_initfn(SMBusDevice *dev)
> +static void smbus_eeprom_reset(DeviceState *dev)
> {
> SMBusEEPROMDevice *eeprom = (SMBusEEPROMDevice *)dev;
>
> eeprom->offset = 0;
> - return 0;
> }
>
> static Property smbus_eeprom_properties[] = {
> @@ -115,7 +114,7 @@ static void smbus_eeprom_class_initfn(ObjectClass *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> SMBusDeviceClass *sc = SMBUS_DEVICE_CLASS(klass);
>
> - sc->init = smbus_eeprom_initfn;
> + dc->reset = smbus_eeprom_reset;
Trying to track down when each of these methods is called:
sc->init (SMBusDeviceClass::init)
-> called by i2c_slave_qdev_init() (DeviceClass:init)
-> called by device_realize() (DeviceClass::realize)
-> called by device_set_realized()
-> QOM setter for "realized" property
-> (multiple callers)
(eww, so many indirections)
dc->reset (DeviceClass::reset)
-> called by device_reset()
-> (multiple callers)
(much better!)
It looks like this changes how the device behaves. Is this
fixing a device emulation bug? If not, why should the device set
offset=0 on DeviceClass::reset, and not DeviceClass::realize?
> sc->quick_cmd = eeprom_quick_cmd;
> sc->send_byte = eeprom_send_byte;
> sc->receive_byte = eeprom_receive_byte;
> --
> 2.15.1
>
>
--
Eduardo
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize
2018-01-16 13:15 ` [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize Philippe Mathieu-Daudé
2018-01-16 14:09 ` Philippe Mathieu-Daudé
@ 2018-01-19 18:18 ` Eduardo Habkost
2018-01-19 18:53 ` Philippe Mathieu-Daudé
1 sibling, 1 reply; 28+ messages in thread
From: Eduardo Habkost @ 2018-01-19 18:18 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini, Eric Blake,
Marcel Apfelbaum, Gerd Hoffmann, qemu-devel
On Tue, Jan 16, 2018 at 10:15:47AM -0300, Philippe Mathieu-Daudé wrote:
[...]
> -static int i2c_slave_qdev_init(DeviceState *dev)
> +static void i2c_slave_realize(DeviceState *dev, Error **errp)
> {
> I2CSlave *s = I2C_SLAVE(dev);
> I2CSlaveClass *sc = I2C_SLAVE_GET_CLASS(s);
>
> - if (sc->init) {
> - return sc->init(s);
> + if (sc->realize) {
> + return sc->realize(s, errp);
> }
Do you think i2c_slave_realize() will perform additional actions
in the future? If not, why not let subclasses set
DeviceClass::realize directly?
> -
> - return 0;
> }
>
> DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
> @@ -301,7 +299,7 @@ DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
> static void i2c_slave_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *k = DEVICE_CLASS(klass);
> - k->init = i2c_slave_qdev_init;
> + k->realize = i2c_slave_realize;
> set_bit(DEVICE_CATEGORY_MISC, k->categories);
> k->bus_type = TYPE_I2C_BUS;
> k->props = i2c_props;
[...]
--
Eduardo
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 07/11] qdev: simplify the SysBusDeviceClass::init path
2018-01-16 13:15 ` [Qemu-devel] [PATCH 07/11] qdev: simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
@ 2018-01-19 18:24 ` Eduardo Habkost
0 siblings, 0 replies; 28+ messages in thread
From: Eduardo Habkost @ 2018-01-19 18:24 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini, Eric Blake,
Marcel Apfelbaum, qemu-devel
On Tue, Jan 16, 2018 at 10:15:51AM -0300, Philippe Mathieu-Daudé wrote:
> The SysBusDevice is the last DeviceClass::init user.
>
> Instead of using
> SysBusDeviceClass::realize
> -> DeviceClass::realize
> -> DeviceClass::init
> -> sysbus_device_init
> -> SysBusDeviceClass::init
>
> Simplify the path by directly calling SysBusDeviceClass::init
> in SysBusDeviceClass::realize:
>
> SysBusDeviceClass::realize
> -> SysBusDeviceClass::init
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> hw/core/qdev.c | 9 ---------
> hw/core/sysbus.c | 21 +++++++++------------
> 2 files changed, 9 insertions(+), 21 deletions(-)
>
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 11112951a5..a4f76c8f5d 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -221,15 +221,6 @@ void device_listener_unregister(DeviceListener *listener)
>
> static void device_realize(DeviceState *dev, Error **errp)
> {
> - DeviceClass *dc = DEVICE_GET_CLASS(dev);
> -
> - if (dc->init) {
> - int rc = dc->init(dev);
> - if (rc < 0) {
> - error_setg(errp, "Device initialization failed.");
> - return;
> - }
> - }
> }
If you are removing the code that makes DeviceClass::init work,
you could remove the struct field as well. I suggest either
squashing patches 07/11 and 08/11 together, or moving this hunk
to patch 08/11.
>
> static void device_unrealize(DeviceState *dev, Error **errp)
> diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
> index 04d6061f76..9edf43bc27 100644
> --- a/hw/core/sysbus.c
> +++ b/hw/core/sysbus.c
> @@ -18,6 +18,7 @@
> */
>
> #include "qemu/osdep.h"
> +#include "qapi/error.h"
> #include "hw/sysbus.h"
> #include "monitor/monitor.h"
> #include "exec/address-spaces.h"
> @@ -200,22 +201,19 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size)
> }
> }
>
> -/* TODO remove, once users are converted to realize */
> -static int sysbus_device_init(DeviceState *dev)
> +static void sysbus_realize(DeviceState *dev, Error **errp)
> {
> SysBusDevice *sd = SYS_BUS_DEVICE(dev);
> SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
>
> - if (!sbc->init) {
> - return 0;
> + /* TODO remove, once users are converted to realize */
> + if (sbc->init) {
> + int rc = sbc->init(sd);
> + if (rc < 0) {
> + error_setg(errp, "Device initialization failed.");
> + return;
> + }
> }
> - return sbc->init(sd);
> -}
> -
> -static void sysbus_realize(DeviceState *dev, Error **errp)
> -{
> - SysBusDevice *sd = SYS_BUS_DEVICE(dev);
> - SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
>
> if (sbc->realize) {
> sbc->realize(sd, errp);
> @@ -345,7 +343,6 @@ MemoryRegion *sysbus_address_space(SysBusDevice *dev)
> static void sysbus_device_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *k = DEVICE_CLASS(klass);
> - k->init = sysbus_device_init;
> k->realize = sysbus_realize;
> k->unrealize = sysbus_unrealize;
> k->bus_type = TYPE_SYSTEM_BUS;
> --
> 2.15.1
>
>
--
Eduardo
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize
2018-01-19 18:18 ` Eduardo Habkost
@ 2018-01-19 18:53 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-19 18:53 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini, Eric Blake,
Marcel Apfelbaum, Gerd Hoffmann, qemu-devel
On 01/19/2018 03:18 PM, Eduardo Habkost wrote:
> On Tue, Jan 16, 2018 at 10:15:47AM -0300, Philippe Mathieu-Daudé wrote:
> [...]
>> -static int i2c_slave_qdev_init(DeviceState *dev)
>> +static void i2c_slave_realize(DeviceState *dev, Error **errp)
>> {
>> I2CSlave *s = I2C_SLAVE(dev);
>> I2CSlaveClass *sc = I2C_SLAVE_GET_CLASS(s);
>>
>> - if (sc->init) {
>> - return sc->init(s);
>> + if (sc->realize) {
>> + return sc->realize(s, errp);
>> }
>
> Do you think i2c_slave_realize() will perform additional actions
> in the future? If not, why not let subclasses set
> DeviceClass::realize directly?
Good idea, also with SMBusDeviceClass::realize.
>> -
>> - return 0;
>> }
>>
>> DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
>> @@ -301,7 +299,7 @@ DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
>> static void i2c_slave_class_init(ObjectClass *klass, void *data)
>> {
>> DeviceClass *k = DEVICE_CLASS(klass);
>> - k->init = i2c_slave_qdev_init;
>> + k->realize = i2c_slave_realize;
>> set_bit(DEVICE_CATEGORY_MISC, k->categories);
>> k->bus_type = TYPE_I2C_BUS;
>> k->props = i2c_props;
> [...]
>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 06/11] sysbus: add realize() and unrealize()
2018-01-19 18:03 ` Eduardo Habkost
@ 2018-01-19 19:03 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-19 19:03 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini, Eric Blake,
Marcel Apfelbaum, qemu-devel
On 01/19/2018 03:03 PM, Eduardo Habkost wrote:
> On Tue, Jan 16, 2018 at 10:15:50AM -0300, Philippe Mathieu-Daudé wrote:
> [...]
>> +static void sysbus_realize(DeviceState *dev, Error **errp)
>> +{
>> + SysBusDevice *sd = SYS_BUS_DEVICE(dev);
>> + SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
>> +
>> + if (sbc->realize) {
>> + sbc->realize(sd, errp);
>> + }
>> +}
>> +
>> +static void sysbus_unrealize(DeviceState *dev, Error **errp)
>> +{
>> + SysBusDevice *sd = SYS_BUS_DEVICE(dev);
>> + SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd);
>> +
>> + if (sbc->unrealize) {
>> + sbc->unrealize(sd, errp);
>> + }
>> +}
>
> Why not just let the subclasses set DeviceClass::realize and
> DeviceClass::unrealize directly?
yes, clever :)
>
>> +
>> DeviceState *sysbus_create_varargs(const char *name,
>> hwaddr addr, ...)
>> {
>> @@ -325,6 +346,8 @@ static void sysbus_device_class_init(ObjectClass *klass, void *data)
>> {
>> DeviceClass *k = DEVICE_CLASS(klass);
>> k->init = sysbus_device_init;
>> + k->realize = sysbus_realize;
>> + k->unrealize = sysbus_unrealize;
>> k->bus_type = TYPE_SYSTEM_BUS;
>> /*
>> * device_add plugs devices into a suitable bus. For "real" buses,
>> --
>> 2.15.1
>>
>>
>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PATCH 02/11] smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset
2018-01-19 18:15 ` Eduardo Habkost
@ 2018-01-19 21:41 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-01-19 21:41 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Markus Armbruster, Peter Maydell, Paolo Bonzini, Eric Blake,
Marcel Apfelbaum, qemu-devel
On 01/19/2018 03:15 PM, Eduardo Habkost wrote:
> On Tue, Jan 16, 2018 at 10:15:46AM -0300, Philippe Mathieu-Daudé wrote:
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> hw/i2c/smbus_eeprom.c | 5 ++---
>> 1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c
>> index b13ec0fe7a..7e81ae4fe5 100644
>> --- a/hw/i2c/smbus_eeprom.c
>> +++ b/hw/i2c/smbus_eeprom.c
>> @@ -97,12 +97,11 @@ static uint8_t eeprom_read_data(SMBusDevice *dev, uint8_t cmd, int n)
>> return eeprom_receive_byte(dev);
>> }
>>
>> -static int smbus_eeprom_initfn(SMBusDevice *dev)
>> +static void smbus_eeprom_reset(DeviceState *dev)
>> {
>> SMBusEEPROMDevice *eeprom = (SMBusEEPROMDevice *)dev;
>>
>> eeprom->offset = 0;
>> - return 0;
>> }
>>
>> static Property smbus_eeprom_properties[] = {
>> @@ -115,7 +114,7 @@ static void smbus_eeprom_class_initfn(ObjectClass *klass, void *data)
>> DeviceClass *dc = DEVICE_CLASS(klass);
>> SMBusDeviceClass *sc = SMBUS_DEVICE_CLASS(klass);
>>
>> - sc->init = smbus_eeprom_initfn;
>> + dc->reset = smbus_eeprom_reset;
>
> Trying to track down when each of these methods is called:
>
> sc->init (SMBusDeviceClass::init)
> -> called by i2c_slave_qdev_init() (DeviceClass:init)
> -> called by device_realize() (DeviceClass::realize)
> -> called by device_set_realized()
> -> QOM setter for "realized" property
> -> (multiple callers)
>
> (eww, so many indirections)
>
> dc->reset (DeviceClass::reset)
> -> called by device_reset()
> -> (multiple callers)
>
> (much better!)
>
>
> It looks like this changes how the device behaves. Is this
> fixing a device emulation bug? If not, why should the device set
> offset=0 on DeviceClass::reset, and not DeviceClass::realize?
You right, if this is a device bugfix (which I'm not sure) this is
unrelated to this series, so I'll just drop it.
>
>
>> sc->quick_cmd = eeprom_quick_cmd;
>> sc->send_byte = eeprom_send_byte;
>> sc->receive_byte = eeprom_receive_byte;
>> --
>> 2.15.1
>>
>>
>
^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2018-01-19 21:41 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-16 13:15 [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 01/11] smbus: add a NULL check for SMBusDeviceClass::init callbacks Philippe Mathieu-Daudé
2018-01-19 17:58 ` Eduardo Habkost
2018-01-16 13:15 ` [Qemu-devel] [PATCH 02/11] smbus_eeprom: replace SMBusDeviceClass::init by DeviceClass::reset Philippe Mathieu-Daudé
2018-01-19 18:15 ` Eduardo Habkost
2018-01-19 21:41 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 03/11] hw/i2c: convert I2CSlaveClass::init -> realize Philippe Mathieu-Daudé
2018-01-16 14:09 ` Philippe Mathieu-Daudé
2018-01-19 18:18 ` Eduardo Habkost
2018-01-19 18:53 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 04/11] usb-ccid: convert CCIDCardClass::init " Philippe Mathieu-Daudé
2018-01-18 17:05 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 05/11] virtio-ccw: convert VirtIOCCWDeviceClass::init " Philippe Mathieu-Daudé
2018-01-16 13:41 ` Farhan Ali
2018-01-16 14:07 ` Philippe Mathieu-Daudé
2018-01-16 16:11 ` Farhan Ali
2018-01-16 16:52 ` Cornelia Huck
2018-01-17 12:30 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 06/11] sysbus: add realize() and unrealize() Philippe Mathieu-Daudé
2018-01-19 18:03 ` Eduardo Habkost
2018-01-19 19:03 ` Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 07/11] qdev: simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
2018-01-19 18:24 ` Eduardo Habkost
2018-01-16 13:15 ` [Qemu-devel] [PATCH 08/11] qdev: remove DeviceClass::init Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 09/11] qdev: remove DeviceClass::exit Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 10/11] qdev: remove empty realize/unrealize stubs Philippe Mathieu-Daudé
2018-01-16 13:15 ` [Qemu-devel] [PATCH 11/11] qdev: rename typedef qdev_resetfn() -> DeviceReset() Philippe Mathieu-Daudé
2018-01-17 5:45 ` [Qemu-devel] [PATCH 00/11] qdev: remove DeviceClass::init/exit() no-reply
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.