All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit()
@ 2018-04-19 21:27 Philippe Mathieu-Daudé
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 1/4] hw/i2c/smbus: Use DeviceClass::realize instead of SMBusDeviceClass::init Philippe Mathieu-Daudé
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-04-19 21:27 UTC (permalink / raw)
  To: Eduardo Habkost, Markus Armbruster
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, Paolo Bonzini, Peter Maydell, Thomas Huth

Since v2:
  - rebased for 2.13 (Markus)
  - dropped 2 patches already merged (Gerd)
  - start sentences with a capital letter and end with a full stop (Peter)

since v1:
  - fix format string on 32-bit host (patchew)
  - do not add smbus_eeprom_reset() (Eduardo)
  - directly use DeviceClass::realize (Eduardo)
  - squashed 2 patches (Eduardo)

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 removed *TWO* TODO :)

    /* TODO remove, once users are converted to realize */
    /* TODO remove, once users are converted to unrealize */

Regards,

Phil.

Philippe Mathieu-Daudé (4):
  hw/i2c/smbus: Use DeviceClass::realize instead of SMBusDeviceClass::init
  hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init
  qdev: Simplify the SysBusDeviceClass::init path
  qdev: Remove DeviceClass::exit

 include/hw/i2c/i2c.h    |  3 ---
 include/hw/i2c/smbus.h  |  1 -
 include/hw/qdev-core.h  |  4 ----
 hw/audio/wm8750.c       |  8 +++-----
 hw/core/qdev.c          | 28 ----------------------------
 hw/core/sysbus.c        | 15 ++++++++++-----
 hw/display/ssd0303.c    |  9 ++++-----
 hw/gpio/max7310.c       |  9 ++++-----
 hw/i2c/core.c           | 13 -------------
 hw/i2c/smbus.c          |  9 ---------
 hw/i2c/smbus_eeprom.c   |  5 ++---
 hw/input/lm832x.c       |  9 ++++-----
 hw/misc/tmp105.c        |  7 +++----
 hw/misc/tmp421.c        |  8 +++-----
 hw/nvram/eeprom_at24c.c | 24 +++++++++++-------------
 hw/timer/twl92230.c     | 11 ++++-------
 16 files changed, 48 insertions(+), 115 deletions(-)

-- 
2.17.0

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH v3 1/4] hw/i2c/smbus: Use DeviceClass::realize instead of SMBusDeviceClass::init
  2018-04-19 21:27 [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
@ 2018-04-19 21:27 ` Philippe Mathieu-Daudé
  2018-04-20  7:24   ` Markus Armbruster
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 2/4] hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init Philippe Mathieu-Daudé
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-04-19 21:27 UTC (permalink / raw)
  To: Eduardo Habkost, Markus Armbruster
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, Paolo Bonzini, Peter Maydell, Thomas Huth

SMBusDeviceClass::init is no more used, remove it.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/hw/i2c/smbus.h | 1 -
 hw/i2c/smbus.c         | 9 ---------
 hw/i2c/smbus_eeprom.c  | 5 ++---
 3 files changed, 2 insertions(+), 13 deletions(-)

diff --git a/include/hw/i2c/smbus.h b/include/hw/i2c/smbus.h
index 544bbc1957..cfe3fa69f3 100644
--- a/include/hw/i2c/smbus.h
+++ b/include/hw/i2c/smbus.h
@@ -38,7 +38,6 @@
 typedef struct SMBusDeviceClass
 {
     I2CSlaveClass parent_class;
-    int (*init)(SMBusDevice *dev);
     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/i2c/smbus.c b/hw/i2c/smbus.c
index 2d1b79a689..587ce1ab7f 100644
--- a/hw/i2c/smbus.c
+++ b/hw/i2c/smbus.c
@@ -202,14 +202,6 @@ static int smbus_i2c_send(I2CSlave *s, uint8_t data)
     return 0;
 }
 
-static int smbus_device_init(I2CSlave *i2c)
-{
-    SMBusDevice *dev = SMBUS_DEVICE(i2c);
-    SMBusDeviceClass *sc = SMBUS_DEVICE_GET_CLASS(dev);
-
-    return sc->init(dev);
-}
-
 /* Master device commands.  */
 int smbus_quick_command(I2CBus *bus, uint8_t addr, int read)
 {
@@ -350,7 +342,6 @@ static void smbus_device_class_init(ObjectClass *klass, void *data)
 {
     I2CSlaveClass *sc = I2C_SLAVE_CLASS(klass);
 
-    sc->init = smbus_device_init;
     sc->event = smbus_i2c_event;
     sc->recv = smbus_i2c_recv;
     sc->send = smbus_i2c_send;
diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c
index b13ec0fe7a..125c887d1f 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_realize(DeviceState *dev, Error **errp)
 {
     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->realize = smbus_eeprom_realize;
     sc->quick_cmd = eeprom_quick_cmd;
     sc->send_byte = eeprom_send_byte;
     sc->receive_byte = eeprom_receive_byte;
-- 
2.17.0

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH v3 2/4] hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init
  2018-04-19 21:27 [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 1/4] hw/i2c/smbus: Use DeviceClass::realize instead of SMBusDeviceClass::init Philippe Mathieu-Daudé
@ 2018-04-19 21:27 ` Philippe Mathieu-Daudé
  2018-04-20  7:24   ` Markus Armbruster
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-04-19 21:27 UTC (permalink / raw)
  To: Eduardo Habkost, Markus Armbruster
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, Paolo Bonzini, Peter Maydell, Thomas Huth,
	Gerd Hoffmann

I2CSlaveClass::init is no more used, remove it.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/hw/i2c/i2c.h    |  3 ---
 hw/audio/wm8750.c       |  8 +++-----
 hw/display/ssd0303.c    |  9 ++++-----
 hw/gpio/max7310.c       |  9 ++++-----
 hw/i2c/core.c           | 13 -------------
 hw/input/lm832x.c       |  9 ++++-----
 hw/misc/tmp105.c        |  7 +++----
 hw/misc/tmp421.c        |  8 +++-----
 hw/nvram/eeprom_at24c.c | 24 +++++++++++-------------
 hw/timer/twl92230.c     | 11 ++++-------
 10 files changed, 36 insertions(+), 65 deletions(-)

diff --git a/include/hw/i2c/i2c.h b/include/hw/i2c/i2c.h
index d727379b48..5dc166158b 100644
--- a/include/hw/i2c/i2c.h
+++ b/include/hw/i2c/i2c.h
@@ -28,9 +28,6 @@ typedef struct I2CSlave I2CSlave;
 typedef struct I2CSlaveClass {
     DeviceClass parent_class;
 
-    /* Callbacks provided by the device.  */
-    int (*init)(I2CSlave *dev);
-
     /* Master to slave. Returns non-zero for a NAK, 0 for success. */
     int (*send)(I2CSlave *s, uint8_t data);
 
diff --git a/hw/audio/wm8750.c b/hw/audio/wm8750.c
index 416a78e869..f4aa838f62 100644
--- a/hw/audio/wm8750.c
+++ b/hw/audio/wm8750.c
@@ -617,14 +617,12 @@ static const VMStateDescription vmstate_wm8750 = {
     }
 };
 
-static int wm8750_init(I2CSlave *i2c)
+static void wm8750_realize(DeviceState *dev, Error **errp)
 {
-    WM8750State *s = WM8750(i2c);
+    WM8750State *s = WM8750(dev);
 
     AUD_register_card(CODEC, &s->card);
     wm8750_reset(I2C_SLAVE(s));
-
-    return 0;
 }
 
 #if 0
@@ -707,7 +705,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;
+    dc->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..eb90ba26be 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(DeviceState *dev, Error **errp)
 {
-    ssd0303_state *s = SSD0303(i2c);
+    ssd0303_state *s = SSD0303(dev);
 
-    s->con = graphic_console_init(DEVICE(i2c), 0, &ssd0303_ops, s);
+    s->con = graphic_console_init(dev, 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;
+    dc->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 4c203ef5c6..a560e3afd2 100644
--- a/hw/gpio/max7310.c
+++ b/hw/gpio/max7310.c
@@ -182,14 +182,13 @@ 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(DeviceState *dev, Error **errp)
 {
-    MAX7310State *s = MAX7310(i2c);
+    I2CSlave *i2c = I2C_SLAVE(dev);
+    MAX7310State *s = MAX7310(dev);
 
     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 +196,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;
+    dc->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 cfccefca3d..ab72d5bf2b 100644
--- a/hw/i2c/core.c
+++ b/hw/i2c/core.c
@@ -258,18 +258,6 @@ const VMStateDescription vmstate_i2c_slave = {
     }
 };
 
-static int i2c_slave_qdev_init(DeviceState *dev)
-{
-    I2CSlave *s = I2C_SLAVE(dev);
-    I2CSlaveClass *sc = I2C_SLAVE_GET_CLASS(s);
-
-    if (sc->init) {
-        return sc->init(s);
-    }
-
-    return 0;
-}
-
 DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr)
 {
     DeviceState *dev;
@@ -283,7 +271,6 @@ 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;
     set_bit(DEVICE_CATEGORY_MISC, k->categories);
     k->bus_type = TYPE_I2C_BUS;
     k->props = i2c_props;
diff --git a/hw/input/lm832x.c b/hw/input/lm832x.c
index d39953126b..74da30d9ca 100644
--- a/hw/input/lm832x.c
+++ b/hw/input/lm832x.c
@@ -464,20 +464,19 @@ static const VMStateDescription vmstate_lm_kbd = {
 };
 
 
-static int lm8323_init(I2CSlave *i2c)
+static void lm8323_realize(DeviceState *dev, Error **errp)
 {
-    LM823KbdState *s = LM8323(i2c);
+    LM823KbdState *s = LM8323(dev);
 
     s->model = 0x8323;
     s->pwm.tm[0] = timer_new_ns(QEMU_CLOCK_VIRTUAL, lm_kbd_pwm0_tick, s);
     s->pwm.tm[1] = timer_new_ns(QEMU_CLOCK_VIRTUAL, lm_kbd_pwm1_tick, s);
     s->pwm.tm[2] = timer_new_ns(QEMU_CLOCK_VIRTUAL, lm_kbd_pwm2_tick, s);
-    qdev_init_gpio_out(DEVICE(i2c), &s->nirq, 1);
+    qdev_init_gpio_out(dev, &s->nirq, 1);
 
     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;
+    dc->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 9e22d64e36..0918f3a6ea 100644
--- a/hw/misc/tmp105.c
+++ b/hw/misc/tmp105.c
@@ -229,15 +229,14 @@ static void tmp105_reset(I2CSlave *i2c)
     tmp105_interrupt_update(s);
 }
 
-static int tmp105_init(I2CSlave *i2c)
+static void tmp105_realize(DeviceState *dev, Error **errp)
 {
+    I2CSlave *i2c = I2C_SLAVE(dev);
     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 +251,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;
+    dc->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..c234044305 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(DeviceState *dev, Error **errp)
 {
-    TMP421State *s = TMP421(i2c);
+    TMP421State *s = TMP421(dev);
 
     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;
+    dc->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 22183f5360..27cd01e615 100644
--- a/hw/nvram/eeprom_at24c.c
+++ b/hw/nvram/eeprom_at24c.c
@@ -116,31 +116,29 @@ int at24c_eeprom_send(I2CSlave *s, uint8_t data)
     return 0;
 }
 
-static
-int at24c_eeprom_init(I2CSlave *i2c)
+static void at24c_eeprom_realize(DeviceState *dev, Error **errp)
 {
-    EEPROMState *ee = AT24C_EE(i2c);
-
-    ee->mem = g_malloc0(ee->rsize);
+    EEPROMState *ee = AT24C_EE(dev);
 
     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, "%s: Backing file size %" PRId64 " != %u",
+                       TYPE_AT24C_EE, 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, "%s: Backing file incorrect permission",
+                       TYPE_AT24C_EE);
+            return;
         }
     }
-    return 0;
+
+    ee->mem = g_malloc0(ee->rsize);
 }
 
 static
@@ -178,7 +176,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;
+    dc->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 ef116c636c..3b43b46199 100644
--- a/hw/timer/twl92230.c
+++ b/hw/timer/twl92230.c
@@ -853,10 +853,9 @@ static const VMStateDescription vmstate_menelaus = {
     }
 };
 
-static int twl92230_init(I2CSlave *i2c)
+static void twl92230_realize(DeviceState *dev, Error **errp)
 {
-    DeviceState *dev = DEVICE(i2c);
-    MenelausState *s = TWL92230(i2c);
+    MenelausState *s = TWL92230(dev);
 
     s->rtc.hz_tm = timer_new_ms(rtc_clock, menelaus_rtc_hz, s);
     /* Three output pins plus one interrupt pin.  */
@@ -865,9 +864,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(I2C_SLAVE(dev));
 }
 
 static void twl92230_class_init(ObjectClass *klass, void *data)
@@ -875,7 +872,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;
+    dc->realize = twl92230_realize;
     sc->event = menelaus_event;
     sc->recv = menelaus_rx;
     sc->send = menelaus_tx;
-- 
2.17.0

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path
  2018-04-19 21:27 [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 1/4] hw/i2c/smbus: Use DeviceClass::realize instead of SMBusDeviceClass::init Philippe Mathieu-Daudé
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 2/4] hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init Philippe Mathieu-Daudé
@ 2018-04-19 21:27 ` Philippe Mathieu-Daudé
  2018-04-19 21:38   ` Philippe Mathieu-Daudé
  2018-04-25  6:45   ` Yoni Bettan
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 4/4] qdev: Remove DeviceClass::exit Philippe Mathieu-Daudé
  2018-04-19 21:31 ` [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
  4 siblings, 2 replies; 13+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-04-19 21:27 UTC (permalink / raw)
  To: Eduardo Habkost, Markus Armbruster
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, Paolo Bonzini, Peter Maydell, Thomas Huth

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

Finally, remove the DeviceClass::init, there are no more users.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/hw/qdev-core.h |  2 --
 hw/core/qdev.c         | 14 --------------
 hw/core/sysbus.c       | 15 ++++++++++-----
 3 files changed, 10 insertions(+), 21 deletions(-)

diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 9453588160..6f60748043 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -29,7 +29,6 @@ typedef enum DeviceCategory {
     DEVICE_CATEGORY_MAX
 } DeviceCategory;
 
-typedef int (*qdev_initfn)(DeviceState *dev);
 typedef int (*qdev_event)(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_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;
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index f6f92473b8..4153b733c8 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -208,19 +208,6 @@ void device_listener_unregister(DeviceListener *listener)
     QTAILQ_REMOVE(&device_listeners, listener, link);
 }
 
-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)
 {
     DeviceClass *dc = DEVICE_GET_CLASS(dev);
@@ -1065,7 +1052,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,
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index 5d0887f499..11f6d14b84 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,15 +201,19 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size)
     }
 }
 
-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);
 }
 
 DeviceState *sysbus_create_varargs(const char *name,
@@ -324,7 +329,7 @@ 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->bus_type = TYPE_SYSTEM_BUS;
     /*
      * device_add plugs devices into a suitable bus.  For "real" buses,
-- 
2.17.0

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH v3 4/4] qdev: Remove DeviceClass::exit
  2018-04-19 21:27 [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
                   ` (2 preceding siblings ...)
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
@ 2018-04-19 21:27 ` Philippe Mathieu-Daudé
  2018-04-20  7:25   ` Markus Armbruster
  2018-04-19 21:31 ` [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
  4 siblings, 1 reply; 13+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-04-19 21:27 UTC (permalink / raw)
  To: Eduardo Habkost, Markus Armbruster
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, Paolo Bonzini, Peter Maydell, Thomas Huth

Since no devices use it, we can safely remove it.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/hw/qdev-core.h |  2 --
 hw/core/qdev.c         | 14 --------------
 2 files changed, 16 deletions(-)

diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 6f60748043..88b52be8fb 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -29,7 +29,6 @@ typedef enum DeviceCategory {
     DEVICE_CATEGORY_MAX
 } DeviceCategory;
 
-typedef int (*qdev_event)(DeviceState *dev);
 typedef void (*DeviceRealize)(DeviceState *dev, Error **errp);
 typedef void (*DeviceUnrealize)(DeviceState *dev, Error **errp);
 typedef void (*DeviceReset)(DeviceState *dev);
@@ -123,7 +122,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 4153b733c8..ffec461791 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -208,19 +208,6 @@ void device_listener_unregister(DeviceListener *listener)
     QTAILQ_REMOVE(&device_listeners, listener, link);
 }
 
-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,
                                  int required_for_version)
 {
@@ -1052,7 +1039,6 @@ static void device_class_init(ObjectClass *class, void *data)
     DeviceClass *dc = DEVICE_CLASS(class);
 
     class->unparent = device_unparent;
-    dc->unrealize = device_unrealize;
 
     /* by default all devices were considered as hotpluggable,
      * so with intent to check it in generic qdev_unplug() /
-- 
2.17.0

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit()
  2018-04-19 21:27 [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
                   ` (3 preceding siblings ...)
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 4/4] qdev: Remove DeviceClass::exit Philippe Mathieu-Daudé
@ 2018-04-19 21:31 ` Philippe Mathieu-Daudé
  4 siblings, 0 replies; 13+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-04-19 21:31 UTC (permalink / raw)
  To: Eduardo Habkost, Markus Armbruster
  Cc: qemu-devel, Paolo Bonzini, Peter Maydell, Thomas Huth

On 04/19/2018 06:27 PM, Philippe Mathieu-Daudé wrote:
> Since v2:
>   - rebased for 2.13 (Markus)
>   - dropped 2 patches already merged (Gerd)
>   - start sentences with a capital letter and end with a full stop (Peter)

I forgot to put the backport-diff, in case someone already reviewed v2:

[----] : patches are identical
The flags [FC] indicate (F)unctional and (C)ontextual differences,
respectively

001/4:[----] [--] 'hw/i2c/smbus: use DeviceClass::realize instead of
SMBusDeviceClass::init'
002/4:[----] [-C] 'hw/i2c: use DeviceClass::realize instead of
I2CSlaveClass::init'
003/4:[----] [-C] 'qdev: simplify the SysBusDeviceClass::init path'
004/4:[----] [-C] 'qdev: remove DeviceClass::exit'


> since v1:
>   - fix format string on 32-bit host (patchew)
>   - do not add smbus_eeprom_reset() (Eduardo)
>   - directly use DeviceClass::realize (Eduardo)
>   - squashed 2 patches (Eduardo)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
@ 2018-04-19 21:38   ` Philippe Mathieu-Daudé
  2018-04-20  7:22     ` Markus Armbruster
  2018-04-25  6:45   ` Yoni Bettan
  1 sibling, 1 reply; 13+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-04-19 21:38 UTC (permalink / raw)
  To: Eduardo Habkost, Markus Armbruster, Andreas Färber
  Cc: qemu-devel, Paolo Bonzini, Peter Maydell, Thomas Huth

On 04/19/2018 06:27 PM, 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
> 
> Finally, remove the DeviceClass::init, there are no more users.
> 
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  include/hw/qdev-core.h |  2 --
>  hw/core/qdev.c         | 14 --------------
>  hw/core/sysbus.c       | 15 ++++++++++-----
>  3 files changed, 10 insertions(+), 21 deletions(-)
> 
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 9453588160..6f60748043 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -29,7 +29,6 @@ typedef enum DeviceCategory {
>      DEVICE_CATEGORY_MAX
>  } DeviceCategory;
>  
> -typedef int (*qdev_initfn)(DeviceState *dev);
>  typedef int (*qdev_event)(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_initfn init; /* TODO remove, once users are converted to realize */

The DeviceClass documentation (top of this file) is now out of date :(

If the maintainer taking this series prefer a respin, I plan to only
remove the 'init' references in the big comment.

>      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 f6f92473b8..4153b733c8 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -208,19 +208,6 @@ void device_listener_unregister(DeviceListener *listener)
>      QTAILQ_REMOVE(&device_listeners, listener, link);
>  }
>  
> -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)
>  {
>      DeviceClass *dc = DEVICE_GET_CLASS(dev);
> @@ -1065,7 +1052,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,
> diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
> index 5d0887f499..11f6d14b84 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,15 +201,19 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size)
>      }
>  }
>  
> -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);
>  }
>  
>  DeviceState *sysbus_create_varargs(const char *name,
> @@ -324,7 +329,7 @@ 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->bus_type = TYPE_SYSTEM_BUS;
>      /*
>       * device_add plugs devices into a suitable bus.  For "real" buses,
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path
  2018-04-19 21:38   ` Philippe Mathieu-Daudé
@ 2018-04-20  7:22     ` Markus Armbruster
  2018-05-07 21:30       ` Eduardo Habkost
  0 siblings, 1 reply; 13+ messages in thread
From: Markus Armbruster @ 2018-04-20  7:22 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Eduardo Habkost, Andreas Färber, Paolo Bonzini, Thomas Huth,
	qemu-devel, Peter Maydell

Philippe Mathieu-Daudé <f4bug@amsat.org> writes:

> On 04/19/2018 06:27 PM, 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
>> 
>> Finally, remove the DeviceClass::init, there are no more users.
>> 
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>>  include/hw/qdev-core.h |  2 --
>>  hw/core/qdev.c         | 14 --------------
>>  hw/core/sysbus.c       | 15 ++++++++++-----
>>  3 files changed, 10 insertions(+), 21 deletions(-)
>> 
>> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
>> index 9453588160..6f60748043 100644
>> --- a/include/hw/qdev-core.h
>> +++ b/include/hw/qdev-core.h
>> @@ -29,7 +29,6 @@ typedef enum DeviceCategory {
>>      DEVICE_CATEGORY_MAX
>>  } DeviceCategory;
>>  
>> -typedef int (*qdev_initfn)(DeviceState *dev);
>>  typedef int (*qdev_event)(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_initfn init; /* TODO remove, once users are converted to realize */
>
> The DeviceClass documentation (top of this file) is now out of date :(
>
> If the maintainer taking this series prefer a respin, I plan to only
> remove the 'init' references in the big comment.

I'd move the actual removal into the next and final patch.  Lets us fix
up the comment in one go.

>>      qdev_event exit; /* TODO remove, once users are converted to unrealize */
>>      const char *bus_type;
>>  } DeviceClass;
[...]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH v3 1/4] hw/i2c/smbus: Use DeviceClass::realize instead of SMBusDeviceClass::init
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 1/4] hw/i2c/smbus: Use DeviceClass::realize instead of SMBusDeviceClass::init Philippe Mathieu-Daudé
@ 2018-04-20  7:24   ` Markus Armbruster
  0 siblings, 0 replies; 13+ messages in thread
From: Markus Armbruster @ 2018-04-20  7:24 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Eduardo Habkost, Peter Maydell, Paolo Bonzini, Thomas Huth, qemu-devel

Philippe Mathieu-Daudé <f4bug@amsat.org> writes:

> SMBusDeviceClass::init is no more used, remove it.
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

Reviewed-by: Markus Armbruster <armbru@redhat.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH v3 2/4] hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 2/4] hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init Philippe Mathieu-Daudé
@ 2018-04-20  7:24   ` Markus Armbruster
  0 siblings, 0 replies; 13+ messages in thread
From: Markus Armbruster @ 2018-04-20  7:24 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Eduardo Habkost, Peter Maydell, Thomas Huth, qemu-devel,
	Gerd Hoffmann, Paolo Bonzini

Philippe Mathieu-Daudé <f4bug@amsat.org> writes:

> I2CSlaveClass::init is no more used, remove it.
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

Reviewed-by: Markus Armbruster <armbru@redhat.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/4] qdev: Remove DeviceClass::exit
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 4/4] qdev: Remove DeviceClass::exit Philippe Mathieu-Daudé
@ 2018-04-20  7:25   ` Markus Armbruster
  0 siblings, 0 replies; 13+ messages in thread
From: Markus Armbruster @ 2018-04-20  7:25 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Eduardo Habkost, Peter Maydell, Paolo Bonzini, Thomas Huth, qemu-devel

Philippe Mathieu-Daudé <f4bug@amsat.org> writes:

> Since no devices use it, we can safely remove it.
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

Reviewed-by: Markus Armbruster <armbru@redhat.com>

However, I'd reshuffle PATCH 3+4 a bit as explained in my review of
PATCH 3.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path
  2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
  2018-04-19 21:38   ` Philippe Mathieu-Daudé
@ 2018-04-25  6:45   ` Yoni Bettan
  1 sibling, 0 replies; 13+ messages in thread
From: Yoni Bettan @ 2018-04-25  6:45 UTC (permalink / raw)
  To: qemu-devel



On 04/20/2018 12:27 AM, 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
>
> Finally, remove the DeviceClass::init, there are no more users.
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>   include/hw/qdev-core.h |  2 --
>   hw/core/qdev.c         | 14 --------------
>   hw/core/sysbus.c       | 15 ++++++++++-----
>   3 files changed, 10 insertions(+), 21 deletions(-)
>
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 9453588160..6f60748043 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -29,7 +29,6 @@ typedef enum DeviceCategory {
>       DEVICE_CATEGORY_MAX
>   } DeviceCategory;
>   
> -typedef int (*qdev_initfn)(DeviceState *dev);
>   typedef int (*qdev_event)(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_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;
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index f6f92473b8..4153b733c8 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -208,19 +208,6 @@ void device_listener_unregister(DeviceListener *listener)
>       QTAILQ_REMOVE(&device_listeners, listener, link);
>   }
>   
> -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)
>   {
>       DeviceClass *dc = DEVICE_GET_CLASS(dev);
> @@ -1065,7 +1052,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,
> diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
> index 5d0887f499..11f6d14b84 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,15 +201,19 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size)
>       }
>   }
>   
> -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;

Hello Philippe, is the purpose of this part to enable incremental 
conversion init->realize
to SysBusDevices ?!

Thanks,
Yoni
> +    /* 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);
>   }
>   
>   DeviceState *sysbus_create_varargs(const char *name,
> @@ -324,7 +329,7 @@ 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->bus_type = TYPE_SYSTEM_BUS;
>       /*
>        * device_add plugs devices into a suitable bus.  For "real" buses,

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path
  2018-04-20  7:22     ` Markus Armbruster
@ 2018-05-07 21:30       ` Eduardo Habkost
  0 siblings, 0 replies; 13+ messages in thread
From: Eduardo Habkost @ 2018-05-07 21:30 UTC (permalink / raw)
  To: Markus Armbruster
  Cc: Philippe Mathieu-Daudé,
	Peter Maydell, Thomas Huth, qemu-devel, Paolo Bonzini,
	Andreas Färber

On Fri, Apr 20, 2018 at 09:22:55AM +0200, Markus Armbruster wrote:
> Philippe Mathieu-Daudé <f4bug@amsat.org> writes:
> 
> > On 04/19/2018 06:27 PM, 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
> >> 
> >> Finally, remove the DeviceClass::init, there are no more users.
> >> 
> >> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> >> ---
> >>  include/hw/qdev-core.h |  2 --
> >>  hw/core/qdev.c         | 14 --------------
> >>  hw/core/sysbus.c       | 15 ++++++++++-----
> >>  3 files changed, 10 insertions(+), 21 deletions(-)
> >> 
> >> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> >> index 9453588160..6f60748043 100644
> >> --- a/include/hw/qdev-core.h
> >> +++ b/include/hw/qdev-core.h
> >> @@ -29,7 +29,6 @@ typedef enum DeviceCategory {
> >>      DEVICE_CATEGORY_MAX
> >>  } DeviceCategory;
> >>  
> >> -typedef int (*qdev_initfn)(DeviceState *dev);
> >>  typedef int (*qdev_event)(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_initfn init; /* TODO remove, once users are converted to realize */
> >
> > The DeviceClass documentation (top of this file) is now out of date :(
> >
> > If the maintainer taking this series prefer a respin, I plan to only
> > remove the 'init' references in the big comment.
> 
> I'd move the actual removal into the next and final patch.  Lets us fix
> up the comment in one go.

I'd prefer a respin, so we can ensure the documentation is
updated and the removal of DeviceClass::init and
DeviceClass::exit are done in the same patch.

(Sorry for taking so long to reply.)

-- 
Eduardo

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2018-05-07 21:30 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-19 21:27 [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé
2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 1/4] hw/i2c/smbus: Use DeviceClass::realize instead of SMBusDeviceClass::init Philippe Mathieu-Daudé
2018-04-20  7:24   ` Markus Armbruster
2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 2/4] hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init Philippe Mathieu-Daudé
2018-04-20  7:24   ` Markus Armbruster
2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 3/4] qdev: Simplify the SysBusDeviceClass::init path Philippe Mathieu-Daudé
2018-04-19 21:38   ` Philippe Mathieu-Daudé
2018-04-20  7:22     ` Markus Armbruster
2018-05-07 21:30       ` Eduardo Habkost
2018-04-25  6:45   ` Yoni Bettan
2018-04-19 21:27 ` [Qemu-devel] [PATCH v3 4/4] qdev: Remove DeviceClass::exit Philippe Mathieu-Daudé
2018-04-20  7:25   ` Markus Armbruster
2018-04-19 21:31 ` [Qemu-devel] [PATCH v3 0/4] qdev: remove DeviceClass::init/exit() Philippe Mathieu-Daudé

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.