All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.