[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL v2 01/24] qdev: Replace no_user by cannot_instant
From: |
Michael S. Tsirkin |
Subject: |
Re: [Qemu-devel] [PULL v2 01/24] qdev: Replace no_user by cannot_instantiate_with_device_add_yet |
Date: |
Tue, 24 Dec 2013 21:43:37 +0200 |
On Tue, Dec 24, 2013 at 06:04:12PM +0100, Andreas Färber wrote:
> From: Markus Armbruster <address@hidden>
>
> In an ideal world, machines can be built by wiring devices together
> with configuration, not code. Unfortunately, that's not the world we
> live in right now. We still have quite a few devices that need to be
> wired up by code. If you try to device_add such a device, it'll fail
> in sometimes mysterious ways. If you're lucky, you get an
> unmysterious immediate crash.
>
> To protect users from such badness, DeviceClass member no_user used to
> make device models unavailable with -device / device_add, but that
> regressed in commit 18b6dad. The device model is still omitted from
> help, but is available anyway.
>
> Attempts to fix the regression have been rejected with the argument
> that the purpose of no_user isn't clear, and it's prone to misuse.
>
> This commit clarifies no_user's purpose. Anthony suggested to rename
> it cannot_instantiate_with_device_add_yet_due_to_internal_bugs, which
> I shorten somewhat to keep checkpatch happy. While there, make it
> bool.
>
> Every use of cannot_instantiate_with_device_add_yet gets a FIXME
> comment asking for rationale. The next few commits will clean them
> all up, either by providing a rationale, or by getting rid of the use.
>
> With that done, the regression fix is hopefully acceptable.
>
> Signed-off-by: Markus Armbruster <address@hidden>
> Reviewed-by: Marcel Apfelbaum <address@hidden>
> Signed-off-by: Andreas Färber <address@hidden>
Sorry about not commenting on this earlier.
It looks like a bunch of devices will have this flag
(whatever we call it) forever.
If so, _yet seems confusing, should be just
cannot_instantiate_with_device_add.
Doesn't have to block this patchset, we can
rename it all in one patch easily.
> ---
> hw/acpi/piix4.c | 2 +-
> hw/alpha/typhoon.c | 2 +-
> hw/arm/versatilepb.c | 2 +-
> hw/audio/pcspk.c | 2 +-
> hw/audio/pl041.c | 2 +-
> hw/block/fdc.c | 2 +-
> hw/display/pl110.c | 2 +-
> hw/dma/pl080.c | 2 +-
> hw/i2c/smbus_ich9.c | 2 +-
> hw/i386/kvm/clock.c | 2 +-
> hw/i386/kvmvapic.c | 2 +-
> hw/i386/pc.c | 2 +-
> hw/ide/piix.c | 6 +++---
> hw/ide/via.c | 2 +-
> hw/input/pckbd.c | 2 +-
> hw/input/vmmouse.c | 2 +-
> hw/intc/apic_common.c | 2 +-
> hw/intc/arm_gic.c | 2 +-
> hw/intc/arm_gic_common.c | 2 +-
> hw/intc/arm_gic_kvm.c | 2 +-
> hw/intc/i8259_common.c | 2 +-
> hw/intc/ioapic_common.c | 2 +-
> hw/intc/pl190.c | 2 +-
> hw/isa/isa-bus.c | 2 +-
> hw/isa/lpc_ich9.c | 2 +-
> hw/isa/piix4.c | 2 +-
> hw/isa/vt82c686.c | 2 +-
> hw/misc/arm_l2x0.c | 2 +-
> hw/misc/vmport.c | 2 +-
> hw/nvram/fw_cfg.c | 2 +-
> hw/pci-host/bonito.c | 4 ++--
> hw/pci-host/grackle.c | 4 ++--
> hw/pci-host/piix.c | 8 ++++----
> hw/pci-host/prep.c | 4 ++--
> hw/ppc/spapr_vio.c | 2 +-
> hw/s390x/ipl.c | 2 +-
> hw/s390x/s390-virtio-bus.c | 2 +-
> hw/s390x/virtio-ccw.c | 2 +-
> hw/sd/pl181.c | 2 +-
> hw/timer/arm_mptimer.c | 2 +-
> hw/timer/hpet.c | 2 +-
> hw/timer/i8254_common.c | 2 +-
> hw/timer/m48t59.c | 2 +-
> hw/timer/mc146818rtc.c | 2 +-
> hw/timer/pl031.c | 2 +-
> include/hw/qdev-core.h | 13 ++++++++++++-
> qdev-monitor.c | 5 +++--
> qom/cpu.c | 2 +-
> 48 files changed, 69 insertions(+), 57 deletions(-)
>
> diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
> index 93849c8..dd11534 100644
> --- a/hw/acpi/piix4.c
> +++ b/hw/acpi/piix4.c
> @@ -544,7 +544,7 @@ static void piix4_pm_class_init(ObjectClass *klass, void
> *data)
> k->revision = 0x03;
> k->class_id = PCI_CLASS_BRIDGE_OTHER;
> dc->desc = "PM";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_acpi;
> dc->props = piix4_pm_properties;
> }
> diff --git a/hw/alpha/typhoon.c b/hw/alpha/typhoon.c
> index 59e1bb8..60987ed 100644
> --- a/hw/alpha/typhoon.c
> +++ b/hw/alpha/typhoon.c
> @@ -938,7 +938,7 @@ static void typhoon_pcihost_class_init(ObjectClass
> *klass, void *data)
> SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>
> k->init = typhoon_pcihost_init;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo typhoon_pcihost_info = {
> diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
> index f7e8b7e..bb0c0ba 100644
> --- a/hw/arm/versatilepb.c
> +++ b/hw/arm/versatilepb.c
> @@ -390,7 +390,7 @@ static void vpb_sic_class_init(ObjectClass *klass, void
> *data)
> SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>
> k->init = vpb_sic_init;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_vpb_sic;
> }
>
> diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c
> index 9004ce3..8e3e178 100644
> --- a/hw/audio/pcspk.c
> +++ b/hw/audio/pcspk.c
> @@ -192,7 +192,7 @@ static void pcspk_class_initfn(ObjectClass *klass, void
> *data)
>
> dc->realize = pcspk_realizefn;
> set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->props = pcspk_properties;
> }
>
> diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c
> index 5393b52..8ba661a 100644
> --- a/hw/audio/pl041.c
> +++ b/hw/audio/pl041.c
> @@ -632,7 +632,7 @@ static void pl041_device_class_init(ObjectClass *klass,
> void *data)
>
> k->init = pl041_init;
> set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->reset = pl041_device_reset;
> dc->vmsd = &vmstate_pl041;
> dc->props = pl041_device_properties;
> diff --git a/hw/block/fdc.c b/hw/block/fdc.c
> index c5a6c21..86f4920 100644
> --- a/hw/block/fdc.c
> +++ b/hw/block/fdc.c
> @@ -2234,7 +2234,7 @@ static void isabus_fdc_class_init(ObjectClass *klass,
> void *data)
>
> dc->realize = isabus_fdc_realize;
> dc->fw_name = "fdc";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->reset = fdctrl_external_reset_isa;
> dc->vmsd = &vmstate_isa_fdc;
> dc->props = isa_fdc_properties;
> diff --git a/hw/display/pl110.c b/hw/display/pl110.c
> index 790e510..7ad5972 100644
> --- a/hw/display/pl110.c
> +++ b/hw/display/pl110.c
> @@ -496,7 +496,7 @@ static void pl110_class_init(ObjectClass *klass, void
> *data)
>
> k->init = pl110_initfn;
> set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_pl110;
> }
>
> diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c
> index 35b9015..a515621 100644
> --- a/hw/dma/pl080.c
> +++ b/hw/dma/pl080.c
> @@ -381,7 +381,7 @@ static void pl080_class_init(ObjectClass *oc, void *data)
> {
> DeviceClass *dc = DEVICE_CLASS(oc);
>
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_pl080;
> }
>
> diff --git a/hw/i2c/smbus_ich9.c b/hw/i2c/smbus_ich9.c
> index ca22978..c1ffa34 100644
> --- a/hw/i2c/smbus_ich9.c
> +++ b/hw/i2c/smbus_ich9.c
> @@ -97,7 +97,7 @@ static void ich9_smb_class_init(ObjectClass *klass, void
> *data)
> k->device_id = PCI_DEVICE_ID_INTEL_ICH9_6;
> k->revision = ICH9_A2_SMB_REVISION;
> k->class_id = PCI_CLASS_SERIAL_SMBUS;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_ich9_smbus;
> dc->desc = "ICH9 SMBUS Bridge";
> k->init = ich9_smbus_initfn;
> diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c
> index 383938d..abd2ce8 100644
> --- a/hw/i386/kvm/clock.c
> +++ b/hw/i386/kvm/clock.c
> @@ -114,7 +114,7 @@ static void kvmclock_class_init(ObjectClass *klass, void
> *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = kvmclock_realize;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &kvmclock_vmsd;
> }
>
> diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c
> index 2d87600..f1a0a9d 100644
> --- a/hw/i386/kvmvapic.c
> +++ b/hw/i386/kvmvapic.c
> @@ -827,7 +827,7 @@ static void vapic_class_init(ObjectClass *klass, void
> *data)
> {
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->reset = vapic_reset;
> dc->vmsd = &vmstate_vapic;
> dc->realize = vapic_realize;
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 3cd8f38..1e6e8af 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -547,7 +547,7 @@ static void port92_class_initfn(ObjectClass *klass, void
> *data)
> {
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->realize = port92_realizefn;
> dc->reset = port92_reset;
> dc->vmsd = &vmstate_port92_isa;
> diff --git a/hw/ide/piix.c b/hw/ide/piix.c
> index ab36749..27b08e1 100644
> --- a/hw/ide/piix.c
> +++ b/hw/ide/piix.c
> @@ -248,7 +248,7 @@ static void piix3_ide_class_init(ObjectClass *klass, void
> *data)
> k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1;
> k->class_id = PCI_CLASS_STORAGE_IDE;
> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo piix3_ide_info = {
> @@ -267,7 +267,7 @@ static void piix3_ide_xen_class_init(ObjectClass *klass,
> void *data)
> k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1;
> k->class_id = PCI_CLASS_STORAGE_IDE;
> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->unplug = pci_piix3_xen_ide_unplug;
> }
>
> @@ -289,7 +289,7 @@ static void piix4_ide_class_init(ObjectClass *klass, void
> *data)
> k->device_id = PCI_DEVICE_ID_INTEL_82371AB;
> k->class_id = PCI_CLASS_STORAGE_IDE;
> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo piix4_ide_info = {
> diff --git a/hw/ide/via.c b/hw/ide/via.c
> index 99468c7..b556c14 100644
> --- a/hw/ide/via.c
> +++ b/hw/ide/via.c
> @@ -225,7 +225,7 @@ static void via_ide_class_init(ObjectClass *klass, void
> *data)
> k->revision = 0x06;
> k->class_id = PCI_CLASS_STORAGE_IDE;
> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo via_ide_info = {
> diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c
> index ce86237..dee31a6 100644
> --- a/hw/input/pckbd.c
> +++ b/hw/input/pckbd.c
> @@ -522,7 +522,7 @@ static void i8042_class_initfn(ObjectClass *klass, void
> *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = i8042_realizefn;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_kbd_isa;
> }
>
> diff --git a/hw/input/vmmouse.c b/hw/input/vmmouse.c
> index abd032b..600e4a2 100644
> --- a/hw/input/vmmouse.c
> +++ b/hw/input/vmmouse.c
> @@ -282,7 +282,7 @@ static void vmmouse_class_initfn(ObjectClass *klass, void
> *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = vmmouse_realizefn;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->reset = vmmouse_reset;
> dc->vmsd = &vmstate_vmmouse;
> dc->props = vmmouse_properties;
> diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
> index a0beb10..ea420c7 100644
> --- a/hw/intc/apic_common.c
> +++ b/hw/intc/apic_common.c
> @@ -386,7 +386,7 @@ static void apic_common_class_init(ObjectClass *klass,
> void *data)
>
> dc->vmsd = &vmstate_apic_common;
> dc->reset = apic_reset_common;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->props = apic_properties_common;
> idc->init = apic_init_common;
> }
> diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
> index d431b7a..24ad276 100644
> --- a/hw/intc/arm_gic.c
> +++ b/hw/intc/arm_gic.c
> @@ -704,7 +704,7 @@ static void arm_gic_class_init(ObjectClass *klass, void
> *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> ARMGICClass *agc = ARM_GIC_CLASS(klass);
>
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> agc->parent_realize = dc->realize;
> dc->realize = arm_gic_realize;
> }
> diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c
> index c765850..214a585 100644
> --- a/hw/intc/arm_gic_common.c
> +++ b/hw/intc/arm_gic_common.c
> @@ -156,7 +156,7 @@ static void arm_gic_common_class_init(ObjectClass *klass,
> void *data)
> dc->realize = arm_gic_common_realize;
> dc->props = arm_gic_common_properties;
> dc->vmsd = &vmstate_gic;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo arm_gic_common_type = {
> diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c
> index f713975..a0bbf12 100644
> --- a/hw/intc/arm_gic_kvm.c
> +++ b/hw/intc/arm_gic_kvm.c
> @@ -150,7 +150,7 @@ static void kvm_arm_gic_class_init(ObjectClass *klass,
> void *data)
> kgc->parent_reset = dc->reset;
> dc->realize = kvm_arm_gic_realize;
> dc->reset = kvm_arm_gic_reset;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo kvm_arm_gic_info = {
> diff --git a/hw/intc/i8259_common.c b/hw/intc/i8259_common.c
> index 803d037..2acdbfe 100644
> --- a/hw/intc/i8259_common.c
> +++ b/hw/intc/i8259_common.c
> @@ -135,7 +135,7 @@ static void pic_common_class_init(ObjectClass *klass,
> void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->vmsd = &vmstate_pic_common;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->props = pic_properties_common;
> dc->realize = pic_common_realize;
> }
> diff --git a/hw/intc/ioapic_common.c b/hw/intc/ioapic_common.c
> index 6b705c1..cc5a80d 100644
> --- a/hw/intc/ioapic_common.c
> +++ b/hw/intc/ioapic_common.c
> @@ -98,7 +98,7 @@ static void ioapic_common_class_init(ObjectClass *klass,
> void *data)
>
> dc->realize = ioapic_common_realize;
> dc->vmsd = &vmstate_ioapic_common;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo ioapic_common_type = {
> diff --git a/hw/intc/pl190.c b/hw/intc/pl190.c
> index 329680d..b16bc02 100644
> --- a/hw/intc/pl190.c
> +++ b/hw/intc/pl190.c
> @@ -273,7 +273,7 @@ static void pl190_class_init(ObjectClass *klass, void
> *data)
> SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>
> k->init = pl190_init;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->reset = pl190_reset;
> dc->vmsd = &vmstate_pl190;
> }
> diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c
> index 9e104eb..6b2114d 100644
> --- a/hw/isa/isa-bus.c
> +++ b/hw/isa/isa-bus.c
> @@ -197,7 +197,7 @@ static void isabus_bridge_class_init(ObjectClass *klass,
> void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->fw_name = "isa";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo isabus_bridge_info = {
> diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
> index 19b2198..c1ca4d4 100644
> --- a/hw/isa/lpc_ich9.c
> +++ b/hw/isa/lpc_ich9.c
> @@ -644,7 +644,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void
> *data)
> dc->reset = ich9_lpc_reset;
> k->init = ich9_lpc_initfn;
> dc->vmsd = &vmstate_ich9_lpc;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> k->config_write = ich9_lpc_config_write;
> dc->desc = "ICH9 LPC bridge";
> k->vendor_id = PCI_VENDOR_ID_INTEL;
> diff --git a/hw/isa/piix4.c b/hw/isa/piix4.c
> index 1a1d451..d9dac61 100644
> --- a/hw/isa/piix4.c
> +++ b/hw/isa/piix4.c
> @@ -113,7 +113,7 @@ static void piix4_class_init(ObjectClass *klass, void
> *data)
> k->device_id = PCI_DEVICE_ID_INTEL_82371AB_0;
> k->class_id = PCI_CLASS_BRIDGE_ISA;
> dc->desc = "ISA bridge";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_piix4;
> }
>
> diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c
> index 5fb8086..b06d15e 100644
> --- a/hw/isa/vt82c686.c
> +++ b/hw/isa/vt82c686.c
> @@ -480,7 +480,7 @@ static void via_class_init(ObjectClass *klass, void *data)
> k->class_id = PCI_CLASS_BRIDGE_ISA;
> k->revision = 0x40;
> dc->desc = "ISA bridge";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_via;
> }
>
> diff --git a/hw/misc/arm_l2x0.c b/hw/misc/arm_l2x0.c
> index 8e192cd..ceea99d 100644
> --- a/hw/misc/arm_l2x0.c
> +++ b/hw/misc/arm_l2x0.c
> @@ -179,7 +179,7 @@ static void l2x0_class_init(ObjectClass *klass, void
> *data)
>
> k->init = l2x0_priv_init;
> dc->vmsd = &vmstate_l2x0;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->props = l2x0_properties;
> dc->reset = l2x0_priv_reset;
> }
> diff --git a/hw/misc/vmport.c b/hw/misc/vmport.c
> index 0b5a564..94ae6ae 100644
> --- a/hw/misc/vmport.c
> +++ b/hw/misc/vmport.c
> @@ -162,7 +162,7 @@ static void vmport_class_initfn(ObjectClass *klass, void
> *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = vmport_realizefn;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo vmport_info = {
> diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
> index f5dc3ea..6075bfc 100644
> --- a/hw/nvram/fw_cfg.c
> +++ b/hw/nvram/fw_cfg.c
> @@ -599,7 +599,7 @@ static void fw_cfg_class_init(ObjectClass *klass, void
> *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = fw_cfg_realize;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->reset = fw_cfg_reset;
> dc->vmsd = &vmstate_fw_cfg;
> dc->props = fw_cfg_properties;
> diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c
> index 5086d42..2e08e9d 100644
> --- a/hw/pci-host/bonito.c
> +++ b/hw/pci-host/bonito.c
> @@ -806,7 +806,7 @@ static void bonito_class_init(ObjectClass *klass, void
> *data)
> k->revision = 0x01;
> k->class_id = PCI_CLASS_BRIDGE_HOST;
> dc->desc = "Host bridge";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_bonito;
> }
>
> @@ -823,7 +823,7 @@ static void bonito_pcihost_class_init(ObjectClass *klass,
> void *data)
> SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>
> k->init = bonito_pcihost_initfn;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo bonito_pcihost_info = {
> diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c
> index 75b60d3..ba6017f 100644
> --- a/hw/pci-host/grackle.c
> +++ b/hw/pci-host/grackle.c
> @@ -130,7 +130,7 @@ static void grackle_pci_class_init(ObjectClass *klass,
> void *data)
> k->device_id = PCI_DEVICE_ID_MOTOROLA_MPC106;
> k->revision = 0x00;
> k->class_id = PCI_CLASS_BRIDGE_HOST;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo grackle_pci_info = {
> @@ -146,7 +146,7 @@ static void pci_grackle_class_init(ObjectClass *klass,
> void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> k->init = pci_grackle_init_device;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo grackle_pci_host_info = {
> diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> index 63be7f6..333358e 100644
> --- a/hw/pci-host/piix.c
> +++ b/hw/pci-host/piix.c
> @@ -635,7 +635,7 @@ static void piix3_class_init(ObjectClass *klass, void
> *data)
>
> dc->desc = "ISA bridge";
> dc->vmsd = &vmstate_piix3;
> - dc->no_user = 1,
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> k->no_hotplug = 1;
> k->init = piix3_initfn;
> k->config_write = piix3_write_config;
> @@ -659,7 +659,7 @@ static void piix3_xen_class_init(ObjectClass *klass, void
> *data)
>
> dc->desc = "ISA bridge";
> dc->vmsd = &vmstate_piix3;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> k->no_hotplug = 1;
> k->init = piix3_initfn;
> k->config_write = piix3_write_config_xen;
> @@ -689,7 +689,7 @@ static void i440fx_class_init(ObjectClass *klass, void
> *data)
> k->revision = 0x02;
> k->class_id = PCI_CLASS_BRIDGE_HOST;
> dc->desc = "Host bridge";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_i440fx;
> }
>
> @@ -727,7 +727,7 @@ static void i440fx_pcihost_class_init(ObjectClass *klass,
> void *data)
> hc->root_bus_path = i440fx_pcihost_root_bus_path;
> dc->realize = i440fx_pcihost_realize;
> dc->fw_name = "pci";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->props = i440fx_props;
> }
>
> diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c
> index 0e71fdb..58b8c5e 100644
> --- a/hw/pci-host/prep.c
> +++ b/hw/pci-host/prep.c
> @@ -198,7 +198,7 @@ static void raven_class_init(ObjectClass *klass, void
> *data)
> k->class_id = PCI_CLASS_BRIDGE_HOST;
> dc->desc = "PReP Host Bridge - Motorola Raven";
> dc->vmsd = &vmstate_raven;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo raven_info = {
> @@ -215,7 +215,7 @@ static void raven_pcihost_class_init(ObjectClass *klass,
> void *data)
> set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
> dc->realize = raven_pcihost_realizefn;
> dc->fw_name = "pci";
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo raven_pcihost_info = {
> diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c
> index fee6195..e328f53 100644
> --- a/hw/ppc/spapr_vio.c
> +++ b/hw/ppc/spapr_vio.c
> @@ -532,7 +532,7 @@ static void spapr_vio_bridge_class_init(ObjectClass
> *klass, void *data)
> SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>
> k->init = spapr_vio_bridge_init;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo spapr_vio_bridge_info = {
> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> index 65d39da..26a717c 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -182,7 +182,7 @@ static void s390_ipl_class_init(ObjectClass *klass, void
> *data)
> k->init = s390_ipl_init;
> dc->props = s390_ipl_properties;
> dc->reset = s390_ipl_reset;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo s390_ipl_info = {
> diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
> index 6a83111..eccc3e7 100644
> --- a/hw/s390x/s390-virtio-bus.c
> +++ b/hw/s390x/s390-virtio-bus.c
> @@ -680,7 +680,7 @@ static void s390_virtio_bridge_class_init(ObjectClass
> *klass, void *data)
> SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>
> k->init = s390_virtio_bridge_init;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo s390_virtio_bridge_info = {
> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
> index ecc80ec..3be9268 100644
> --- a/hw/s390x/virtio-ccw.c
> +++ b/hw/s390x/virtio-ccw.c
> @@ -1287,7 +1287,7 @@ static void virtual_css_bridge_class_init(ObjectClass
> *klass, void *data)
> SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>
> k->init = virtual_css_bridge_init;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo virtual_css_bridge_info = {
> diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c
> index c35896d..d830188 100644
> --- a/hw/sd/pl181.c
> +++ b/hw/sd/pl181.c
> @@ -506,7 +506,7 @@ static void pl181_class_init(ObjectClass *klass, void
> *data)
> sdc->init = pl181_init;
> k->vmsd = &vmstate_pl181;
> k->reset = pl181_reset;
> - k->no_user = 1;
> + k->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */
> }
>
> static const TypeInfo pl181_info = {
> diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c
> index d9f9494..1dc44cd 100644
> --- a/hw/timer/arm_mptimer.c
> +++ b/hw/timer/arm_mptimer.c
> @@ -274,7 +274,7 @@ static void arm_mptimer_class_init(ObjectClass *klass,
> void *data)
> dc->realize = arm_mptimer_realize;
> dc->vmsd = &vmstate_arm_mptimer;
> dc->reset = arm_mptimer_reset;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->props = arm_mptimer_properties;
> }
>
> diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
> index bb3bf98..74e0297 100644
> --- a/hw/timer/hpet.c
> +++ b/hw/timer/hpet.c
> @@ -765,7 +765,7 @@ static void hpet_device_class_init(ObjectClass *klass,
> void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = hpet_realize;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->reset = hpet_reset;
> dc->vmsd = &vmstate_hpet;
> dc->props = hpet_device_properties;
> diff --git a/hw/timer/i8254_common.c b/hw/timer/i8254_common.c
> index e8fb971..dc2196c 100644
> --- a/hw/timer/i8254_common.c
> +++ b/hw/timer/i8254_common.c
> @@ -282,7 +282,7 @@ static void pit_common_class_init(ObjectClass *klass,
> void *data)
>
> dc->realize = pit_common_realize;
> dc->vmsd = &vmstate_pit_common;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo pit_common_type = {
> diff --git a/hw/timer/m48t59.c b/hw/timer/m48t59.c
> index be0592b..e079d41 100644
> --- a/hw/timer/m48t59.c
> +++ b/hw/timer/m48t59.c
> @@ -750,7 +750,7 @@ static void m48t59_isa_class_init(ObjectClass *klass,
> void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = m48t59_isa_realize;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->reset = m48t59_reset_isa;
> dc->props = m48t59_isa_properties;
> }
> diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c
> index b011638..ad61e2c 100644
> --- a/hw/timer/mc146818rtc.c
> +++ b/hw/timer/mc146818rtc.c
> @@ -899,7 +899,7 @@ static void rtc_class_initfn(ObjectClass *klass, void
> *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = rtc_realizefn;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_rtc;
> dc->props = mc146818rtc_properties;
> }
> diff --git a/hw/timer/pl031.c b/hw/timer/pl031.c
> index 65928a4..2f7360c 100644
> --- a/hw/timer/pl031.c
> +++ b/hw/timer/pl031.c
> @@ -251,7 +251,7 @@ static void pl031_class_init(ObjectClass *klass, void
> *data)
> SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>
> k->init = pl031_init;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> dc->vmsd = &vmstate_pl031;
> }
>
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index f2043a6..c8945a4 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -97,7 +97,18 @@ typedef struct DeviceClass {
> const char *fw_name;
> const char *desc;
> Property *props;
> - int no_user;
> +
> + /*
> + * Shall we hide this device model from -device / device_add?
> + * All devices should support instantiation with device_add, and
> + * this flag should not exist. But we're not there, yet. Some
> + * devices fail to instantiate with cryptic error messages.
> + * Others instantiate, but don't work. Exposing users to such
> + * behavior would be cruel; this flag serves to protect them. It
> + * should never be set without a comment explaining why it is set.
> + * TODO remove once we're there
> + */
> + bool cannot_instantiate_with_device_add_yet;
>
> /* callbacks */
> void (*reset)(DeviceState *dev);
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index dc37a43..f2a5a6f 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -87,7 +87,7 @@ static void qdev_print_devinfo(DeviceClass *dc)
> if (dc->desc) {
> error_printf(", desc \"%s\"", dc->desc);
> }
> - if (dc->no_user) {
> + if (dc->cannot_instantiate_with_device_add_yet) {
> error_printf(", no-user");
> }
> error_printf("\n");
> @@ -127,7 +127,8 @@ static void qdev_print_devinfos(bool show_no_user)
> if ((i < DEVICE_CATEGORY_MAX
> ? !test_bit(i, dc->categories)
> : !bitmap_empty(dc->categories, DEVICE_CATEGORY_MAX))
> - || (!show_no_user && dc->no_user)) {
> + || (!show_no_user
> + && dc->cannot_instantiate_with_device_add_yet)) {
> continue;
> }
> if (!cat_printed) {
> diff --git a/qom/cpu.c b/qom/cpu.c
> index 818fb26..09c15e6 100644
> --- a/qom/cpu.c
> +++ b/qom/cpu.c
> @@ -254,7 +254,7 @@ static void cpu_class_init(ObjectClass *klass, void *data)
> k->gdb_read_register = cpu_common_gdb_read_register;
> k->gdb_write_register = cpu_common_gdb_write_register;
> dc->realize = cpu_common_realizefn;
> - dc->no_user = 1;
> + dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why
> */
> }
>
> static const TypeInfo cpu_type_info = {
> --
> 1.8.4
>
- [Qemu-devel] [PULL v2 00/24] QOM devices patch queue 2013-12-24, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 06/24] ich9: Document why cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 03/24] cpu: Document why cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 04/24] apic: Document why cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 14/24] qom: Split out object and class caches, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 05/24] pci-host: Consistently set cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 02/24] sysbus: Set cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 01/24] qdev: Replace no_user by cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- Re: [Qemu-devel] [PULL v2 01/24] qdev: Replace no_user by cannot_instantiate_with_device_add_yet,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL v2 08/24] vt82c686: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 07/24] piix3 piix4: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 11/24] qdev-monitor: Avoid device_add crashing on non-device driver name, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 12/24] hw: cannot_instantiate_with_device_add_yet due to pointer props, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 15/24] qom: Do not register interface "types" in the type table and fix names, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 09/24] isa: Clean up use of cannot_instantiate_with_device_add_yet, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 10/24] qdev: Do not let the user try to device_add when it cannot work, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 13/24] qdev: Document that pointer properties kill device_add, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 16/24] tests: Test QOM interface casting, Andreas Färber, 2013/12/24
- [Qemu-devel] [PULL v2 17/24] qom: Detect bad reentrance during object_class_foreach(), Andreas Färber, 2013/12/24