qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 01/10] qdev: Replace no_user by cannot_instan


From: Marcel Apfelbaum
Subject: Re: [Qemu-devel] [PATCH v2 01/10] qdev: Replace no_user by cannot_instantiate_with_device_add_yet
Date: Wed, 30 Oct 2013 11:45:21 +0200

On Tue, 2013-10-29 at 17:08 +0100, address@hidden 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>
> ---
>  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 b46bd5e..c29a703 100644
> --- a/hw/acpi/piix4.c
> +++ b/hw/acpi/piix4.c
> @@ -508,7 +508,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 0c313fe..fe33843 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -544,7 +544,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 709b5c2..9047143 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 5633d08..ad841b5 100644
> --- a/hw/isa/lpc_ich9.c
> +++ b/hw/isa/lpc_ich9.c
> @@ -604,7 +604,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 8fe4fcb..3e8ec80 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 d0820e5..553599f 100644
> --- a/hw/nvram/fw_cfg.c
> +++ b/hw/nvram/fw_cfg.c
> @@ -576,7 +576,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 4991ec4..a2c5f56 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 c041149..697de65 100644
> --- a/hw/pci-host/piix.c
> +++ b/hw/pci-host/piix.c
> @@ -644,7 +644,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;
> @@ -668,7 +668,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;
> @@ -698,7 +698,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;
>  }
>  
> @@ -730,7 +730,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 a6a0a51..1e33819 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 d69adb2..f86a4af 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -181,7 +181,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 cd67db5..df13b70 100644
> --- a/hw/s390x/virtio-ccw.c
> +++ b/hw/s390x/virtio-ccw.c
> @@ -1278,7 +1278,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 8020c9f..f9cdeea 100644
> --- a/hw/timer/arm_mptimer.c
> +++ b/hw/timer/arm_mptimer.c
> @@ -297,7 +297,7 @@ static void arm_mptimer_class_init(ObjectClass *klass, 
> void *data)
>      sbc->init = arm_mptimer_init;
>      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 fcd22ae..3777764 100644
> --- a/hw/timer/hpet.c
> +++ b/hw/timer/hpet.c
> @@ -751,7 +751,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 d3d78ec..f81cf48 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 7230a6e..2f58220 100644
> --- a/hw/timer/mc146818rtc.c
> +++ b/hw/timer/mc146818rtc.c
> @@ -906,7 +906,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 e191ca0..2b571d7 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 a02c925..36f6f09 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");
Maybe also the message can be changed here?

>      }
>      error_printf("\n");
> @@ -127,7 +127,8 @@ static void qdev_print_devinfos(bool show_no_user)
Same question about show_no_user parameter, maybe give it a "better"
name?


Seems OK to me.

Reviewed-by: Marcel Apfelbaum <address@hidden>


>              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 = {






reply via email to

[Prev in Thread] Current Thread [Next in Thread]