aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--Makefile4
-rw-r--r--Makefile.objs31
-rw-r--r--accel/accel.c5
-rw-r--r--accel/kvm/kvm-all.c4
-rw-r--r--accel/tcg/tcg-all.c8
-rw-r--r--audio/audio.c1
-rwxr-xr-xconfigure63
-rw-r--r--docs/specs/pvpanic.txt18
-rw-r--r--hw/9pfs/virtio-9p-device.c2
-rw-r--r--hw/acpi/generic_event_device.c2
-rw-r--r--hw/acpi/piix4.c2
-rw-r--r--hw/acpi/vmgenid.c2
-rw-r--r--hw/arm/armsse.c2
-rw-r--r--hw/arm/armv7m.c4
-rw-r--r--hw/arm/aspeed_soc.c2
-rw-r--r--hw/arm/bcm2836.c2
-rw-r--r--hw/arm/integratorcp.c2
-rw-r--r--hw/arm/msf2-soc.c2
-rw-r--r--hw/arm/musicpal.c2
-rw-r--r--hw/arm/nrf51_soc.c2
-rw-r--r--hw/arm/pxa2xx.c4
-rw-r--r--hw/arm/pxa2xx_gpio.c2
-rw-r--r--hw/arm/smmu-common.c2
-rw-r--r--hw/arm/spitz.c2
-rw-r--r--hw/arm/stm32f205_soc.c2
-rw-r--r--hw/arm/stm32f405_soc.c2
-rw-r--r--hw/arm/strongarm.c2
-rw-r--r--hw/arm/xlnx-versal.c2
-rw-r--r--hw/arm/xlnx-zynqmp.c2
-rw-r--r--hw/audio/ac97.c2
-rw-r--r--hw/audio/adlib.c2
-rw-r--r--hw/audio/cs4231.c2
-rw-r--r--hw/audio/cs4231a.c2
-rw-r--r--hw/audio/es1370.c2
-rw-r--r--hw/audio/gus.c2
-rw-r--r--hw/audio/hda-codec.c2
-rw-r--r--hw/audio/intel-hda.c4
-rw-r--r--hw/audio/milkymist-ac97.c2
-rw-r--r--hw/audio/pcspk.c2
-rw-r--r--hw/audio/pl041.c2
-rw-r--r--hw/audio/sb16.c2
-rw-r--r--hw/audio/wm8750.c2
-rw-r--r--hw/block/fdc.c8
-rw-r--r--hw/block/m25p80.c2
-rw-r--r--hw/block/nand.c2
-rw-r--r--hw/block/nvme.c2
-rw-r--r--hw/block/onenand.c2
-rw-r--r--hw/block/pflash_cfi01.c2
-rw-r--r--hw/block/pflash_cfi02.c2
-rw-r--r--hw/block/swim.c2
-rw-r--r--hw/block/vhost-user-blk.c2
-rw-r--r--hw/block/virtio-blk.c2
-rw-r--r--hw/block/xen-block.c2
-rw-r--r--hw/char/bcm2835_aux.c2
-rw-r--r--hw/char/cadence_uart.c2
-rw-r--r--hw/char/cmsdk-apb-uart.c2
-rw-r--r--hw/char/debugcon.c2
-rw-r--r--hw/char/digic-uart.c2
-rw-r--r--hw/char/escc.c2
-rw-r--r--hw/char/etraxfs_ser.c2
-rw-r--r--hw/char/exynos4210_uart.c2
-rw-r--r--hw/char/grlib_apbuart.c2
-rw-r--r--hw/char/imx_serial.c2
-rw-r--r--hw/char/ipoctal232.c2
-rw-r--r--hw/char/lm32_juart.c2
-rw-r--r--hw/char/lm32_uart.c2
-rw-r--r--hw/char/mcf_uart.c2
-rw-r--r--hw/char/milkymist-uart.c2
-rw-r--r--hw/char/nrf51_uart.c2
-rw-r--r--hw/char/parallel.c2
-rw-r--r--hw/char/pl011.c2
-rw-r--r--hw/char/sclpconsole-lm.c2
-rw-r--r--hw/char/sclpconsole.c2
-rw-r--r--hw/char/serial-isa.c2
-rw-r--r--hw/char/serial-pci-multi.c4
-rw-r--r--hw/char/serial-pci.c2
-rw-r--r--hw/char/serial.c4
-rw-r--r--hw/char/spapr_vty.c2
-rw-r--r--hw/char/stm32f2xx_usart.c2
-rw-r--r--hw/char/terminal3270.c2
-rw-r--r--hw/char/virtio-console.c2
-rw-r--r--hw/char/virtio-serial-bus.c4
-rw-r--r--hw/char/xilinx_uartlite.c2
-rw-r--r--hw/core/Makefile.objs31
-rw-r--r--hw/core/cpu.c10
-rw-r--r--hw/core/generic-loader.c2
-rw-r--r--hw/core/or-irq.c2
-rw-r--r--hw/core/platform-bus.c2
-rw-r--r--hw/core/qdev-properties.c40
-rw-r--r--hw/core/qdev.c159
-rw-r--r--hw/core/split-irq.c2
-rw-r--r--hw/cpu/a15mpcore.c2
-rw-r--r--hw/cpu/a9mpcore.c2
-rw-r--r--hw/cpu/arm11mpcore.c2
-rw-r--r--hw/cpu/cluster.c2
-rw-r--r--hw/cpu/realview_mpcore.c2
-rw-r--r--hw/display/ati.c2
-rw-r--r--hw/display/bcm2835_fb.c2
-rw-r--r--hw/display/bochs-display.c2
-rw-r--r--hw/display/cg3.c2
-rw-r--r--hw/display/cirrus_vga.c2
-rw-r--r--hw/display/cirrus_vga_isa.c2
-rw-r--r--hw/display/g364fb.c2
-rw-r--r--hw/display/i2c-ddc.c2
-rw-r--r--hw/display/macfb.c4
-rw-r--r--hw/display/milkymist-vgafb.c2
-rw-r--r--hw/display/qxl.c2
-rw-r--r--hw/display/ramfb-standalone.c2
-rw-r--r--hw/display/sm501.c4
-rw-r--r--hw/display/tcx.c4
-rw-r--r--hw/display/vga-isa.c2
-rw-r--r--hw/display/vga-pci.c4
-rw-r--r--hw/display/vhost-user-gpu.c2
-rw-r--r--hw/display/virtio-gpu-pci.c2
-rw-r--r--hw/display/virtio-gpu.c2
-rw-r--r--hw/display/virtio-vga.c2
-rw-r--r--hw/display/vmware_vga.c2
-rw-r--r--hw/dma/i82374.c2
-rw-r--r--hw/dma/i8257.c2
-rw-r--r--hw/dma/pl080.c2
-rw-r--r--hw/dma/pl330.c2
-rw-r--r--hw/dma/pxa2xx_dma.c2
-rw-r--r--hw/dma/xilinx_axidma.c2
-rw-r--r--hw/dma/xlnx-zdma.c2
-rw-r--r--hw/gpio/imx_gpio.c2
-rw-r--r--hw/gpio/omap_gpio.c4
-rw-r--r--hw/i2c/aspeed_i2c.c2
-rw-r--r--hw/i2c/core.c2
-rw-r--r--hw/i2c/omap_i2c.c2
-rw-r--r--hw/i386/intel_iommu.c2
-rw-r--r--hw/i386/kvm/clock.c2
-rw-r--r--hw/i386/kvm/i8254.c2
-rw-r--r--hw/i386/kvm/ioapic.c2
-rw-r--r--hw/i386/vmmouse.c2
-rw-r--r--hw/i386/x86-iommu.c2
-rw-r--r--hw/i386/xen/xen_pvdevice.c2
-rw-r--r--hw/ide/ahci.c2
-rw-r--r--hw/ide/cmd646.c2
-rw-r--r--hw/ide/isa.c2
-rw-r--r--hw/ide/macio.c2
-rw-r--r--hw/ide/mmio.c2
-rw-r--r--hw/ide/qdev.c8
-rw-r--r--hw/input/adb.c2
-rw-r--r--hw/input/milkymist-softusb.c2
-rw-r--r--hw/input/virtio-input-hid.c6
-rw-r--r--hw/input/virtio-input-host.c2
-rw-r--r--hw/input/virtio-input.c2
-rw-r--r--hw/intc/apic_common.c2
-rw-r--r--hw/intc/arm_gic_common.c2
-rw-r--r--hw/intc/arm_gicv2m.c2
-rw-r--r--hw/intc/arm_gicv3_common.c2
-rw-r--r--hw/intc/arm_gicv3_its_kvm.c2
-rw-r--r--hw/intc/armv7m_nvic.c2
-rw-r--r--hw/intc/exynos4210_combiner.c2
-rw-r--r--hw/intc/exynos4210_gic.c4
-rw-r--r--hw/intc/i8259_common.c2
-rw-r--r--hw/intc/ioapic.c2
-rw-r--r--hw/intc/mips_gic.c2
-rw-r--r--hw/intc/omap_intc.c4
-rw-r--r--hw/intc/ompic.c2
-rw-r--r--hw/intc/openpic.c2
-rw-r--r--hw/intc/openpic_kvm.c2
-rw-r--r--hw/intc/pnv_xive.c2
-rw-r--r--hw/intc/s390_flic.c2
-rw-r--r--hw/intc/spapr_xive.c2
-rw-r--r--hw/intc/xics.c4
-rw-r--r--hw/intc/xilinx_intc.c2
-rw-r--r--hw/intc/xive.c8
-rw-r--r--hw/intc/xlnx-pmu-iomod-intc.c2
-rw-r--r--hw/ipack/ipack.c2
-rw-r--r--hw/ipmi/ipmi.c2
-rw-r--r--hw/ipmi/ipmi_bmc_extern.c2
-rw-r--r--hw/ipmi/ipmi_bmc_sim.c2
-rw-r--r--hw/ipmi/isa_ipmi_bt.c2
-rw-r--r--hw/ipmi/isa_ipmi_kcs.c2
-rw-r--r--hw/isa/lpc_ich9.c2
-rw-r--r--hw/isa/pc87312.c2
-rw-r--r--hw/isa/vt82c686.c2
-rw-r--r--hw/mem/nvdimm.c2
-rw-r--r--hw/mem/pc-dimm.c2
-rw-r--r--hw/mips/cps.c2
-rw-r--r--hw/misc/a9scu.c2
-rw-r--r--hw/misc/applesmc.c2
-rw-r--r--hw/misc/arm11scu.c2
-rw-r--r--hw/misc/arm_l2x0.c2
-rw-r--r--hw/misc/arm_sysctl.c2
-rw-r--r--hw/misc/armsse-cpuid.c2
-rw-r--r--hw/misc/aspeed_scu.c2
-rw-r--r--hw/misc/aspeed_sdmc.c2
-rw-r--r--hw/misc/bcm2835_property.c2
-rw-r--r--hw/misc/debugexit.c2
-rw-r--r--hw/misc/eccmemctl.c2
-rw-r--r--hw/misc/iotkit-sysctl.c2
-rw-r--r--hw/misc/iotkit-sysinfo.c2
-rw-r--r--hw/misc/ivshmem.c4
-rw-r--r--hw/misc/mac_via.c2
-rw-r--r--hw/misc/macio/cuda.c2
-rw-r--r--hw/misc/macio/macio.c4
-rw-r--r--hw/misc/macio/pmu.c2
-rw-r--r--hw/misc/mips_cmgcr.c2
-rw-r--r--hw/misc/mips_cpc.c2
-rw-r--r--hw/misc/mips_itu.c2
-rw-r--r--hw/misc/mos6522.c2
-rw-r--r--hw/misc/mps2-fpgaio.c2
-rw-r--r--hw/misc/mps2-scc.c2
-rw-r--r--hw/misc/msf2-sysreg.c2
-rw-r--r--hw/misc/nrf51_rng.c2
-rw-r--r--hw/misc/pci-testdev.c2
-rw-r--r--hw/misc/pvpanic.c13
-rw-r--r--hw/misc/tz-mpc.c2
-rw-r--r--hw/misc/tz-msc.c2
-rw-r--r--hw/misc/tz-ppc.c2
-rw-r--r--hw/misc/unimp.c2
-rw-r--r--hw/net/allwinner_emac.c2
-rw-r--r--hw/net/cadence_gem.c2
-rw-r--r--hw/net/dp8393x.c2
-rw-r--r--hw/net/e1000.c2
-rw-r--r--hw/net/e1000e.c2
-rw-r--r--hw/net/eepro100.c2
-rw-r--r--hw/net/etraxfs_eth.c2
-rw-r--r--hw/net/fsl_etsec/etsec.c2
-rw-r--r--hw/net/ftgmac100.c4
-rw-r--r--hw/net/imx_fec.c9
-rw-r--r--hw/net/lan9118.c2
-rw-r--r--hw/net/lance.c2
-rw-r--r--hw/net/mcf_fec.c2
-rw-r--r--hw/net/milkymist-minimac2.c2
-rw-r--r--hw/net/mipsnet.c2
-rw-r--r--hw/net/ne2000-isa.c2
-rw-r--r--hw/net/ne2000-pci.c2
-rw-r--r--hw/net/opencores_eth.c2
-rw-r--r--hw/net/pcnet-pci.c2
-rw-r--r--hw/net/rocker/rocker.c2
-rw-r--r--hw/net/rtl8139.c2
-rw-r--r--hw/net/smc91c111.c2
-rw-r--r--hw/net/spapr_llan.c2
-rw-r--r--hw/net/stellaris_enet.c2
-rw-r--r--hw/net/sungem.c2
-rw-r--r--hw/net/sunhme.c2
-rw-r--r--hw/net/tulip.c2
-rw-r--r--hw/net/virtio-net.c2
-rw-r--r--hw/net/vmxnet3.c2
-rw-r--r--hw/net/xgmac.c2
-rw-r--r--hw/net/xilinx_axienet.c2
-rw-r--r--hw/net/xilinx_ethlite.c2
-rw-r--r--hw/nvram/ds1225y.c2
-rw-r--r--hw/nvram/eeprom_at24c.c2
-rw-r--r--hw/nvram/fw_cfg.c4
-rw-r--r--hw/nvram/mac_nvram.c2
-rw-r--r--hw/nvram/nrf51_nvm.c2
-rw-r--r--hw/nvram/spapr_nvram.c2
-rw-r--r--hw/pci-bridge/gen_pcie_root_port.c2
-rw-r--r--hw/pci-bridge/pci_bridge_dev.c2
-rw-r--r--hw/pci-bridge/pci_expander_bridge.c4
-rw-r--r--hw/pci-bridge/pcie_pci_bridge.c2
-rw-r--r--hw/pci-bridge/pcie_root_port.c2
-rw-r--r--hw/pci-bridge/xio3130_downstream.c2
-rw-r--r--hw/pci-host/designware.c2
-rw-r--r--hw/pci-host/grackle.c2
-rw-r--r--hw/pci-host/i440fx.c2
-rw-r--r--hw/pci-host/ppce500.c2
-rw-r--r--hw/pci-host/prep.c2
-rw-r--r--hw/pci-host/q35.c4
-rw-r--r--hw/pci-host/sabre.c2
-rw-r--r--hw/pci-host/uninorth.c2
-rw-r--r--hw/pci-host/versatile.c2
-rw-r--r--hw/pci-host/xilinx-pcie.c2
-rw-r--r--hw/pci/pci.c2
-rw-r--r--hw/pci/pcie_port.c4
-rw-r--r--hw/ppc/pnv.c2
-rw-r--r--hw/ppc/pnv_core.c4
-rw-r--r--hw/ppc/pnv_homer.c2
-rw-r--r--hw/ppc/pnv_lpc.c2
-rw-r--r--hw/ppc/pnv_occ.c2
-rw-r--r--hw/ppc/pnv_pnor.c2
-rw-r--r--hw/ppc/pnv_psi.c2
-rw-r--r--hw/ppc/ppc440_uc.c2
-rw-r--r--hw/ppc/prep_systemio.c2
-rw-r--r--hw/ppc/rs6000_mc.c2
-rw-r--r--hw/ppc/spapr_cpu_core.c2
-rw-r--r--hw/ppc/spapr_pci.c2
-rw-r--r--hw/ppc/spapr_rng.c2
-rw-r--r--hw/ppc/spapr_rtas.c9
-rw-r--r--hw/ppc/spapr_tpm_proxy.c2
-rw-r--r--hw/rdma/vmw/pvrdma_main.c2
-rw-r--r--hw/riscv/riscv_hart.c2
-rw-r--r--hw/riscv/sifive_clint.c2
-rw-r--r--hw/riscv/sifive_plic.c2
-rw-r--r--hw/riscv/sifive_u_otp.c2
-rw-r--r--hw/rtc/m48t59-isa.c2
-rw-r--r--hw/rtc/m48t59.c2
-rw-r--r--hw/rtc/mc146818rtc.c2
-rw-r--r--hw/rtc/pl031.c2
-rw-r--r--hw/s390x/3270-ccw.c2
-rw-r--r--hw/s390x/ccw-device.c2
-rw-r--r--hw/s390x/css-bridge.c2
-rw-r--r--hw/s390x/ipl.c2
-rw-r--r--hw/s390x/s390-pci-bus.c2
-rw-r--r--hw/s390x/vhost-vsock-ccw.c2
-rw-r--r--hw/s390x/virtio-ccw-9p.c2
-rw-r--r--hw/s390x/virtio-ccw-balloon.c2
-rw-r--r--hw/s390x/virtio-ccw-blk.c2
-rw-r--r--hw/s390x/virtio-ccw-crypto.c2
-rw-r--r--hw/s390x/virtio-ccw-gpu.c2
-rw-r--r--hw/s390x/virtio-ccw-input.c2
-rw-r--r--hw/s390x/virtio-ccw-net.c2
-rw-r--r--hw/s390x/virtio-ccw-rng.c2
-rw-r--r--hw/s390x/virtio-ccw-scsi.c4
-rw-r--r--hw/s390x/virtio-ccw-serial.c2
-rw-r--r--hw/scsi/megasas.c2
-rw-r--r--hw/scsi/mptsas.c2
-rw-r--r--hw/scsi/scsi-bus.c2
-rw-r--r--hw/scsi/scsi-disk.c8
-rw-r--r--hw/scsi/scsi-generic.c2
-rw-r--r--hw/scsi/spapr_vscsi.c2
-rw-r--r--hw/scsi/vhost-scsi.c2
-rw-r--r--hw/scsi/vhost-user-scsi.c2
-rw-r--r--hw/scsi/virtio-scsi.c2
-rw-r--r--hw/scsi/vmw_pvscsi.c2
-rw-r--r--hw/sd/sd.c2
-rw-r--r--hw/sd/sdhci-pci.c2
-rw-r--r--hw/sd/sdhci.c2
-rw-r--r--hw/sparc/sun4m.c4
-rw-r--r--hw/sparc/sun4m_iommu.c2
-rw-r--r--hw/sparc64/sun4u.c6
-rw-r--r--hw/ssi/aspeed_smc.c2
-rw-r--r--hw/ssi/xilinx_spi.c2
-rw-r--r--hw/ssi/xilinx_spips.c4
-rw-r--r--hw/timer/a9gtimer.c2
-rw-r--r--hw/timer/allwinner-a10-pit.c2
-rw-r--r--hw/timer/altera_timer.c2
-rw-r--r--hw/timer/arm_mptimer.c2
-rw-r--r--hw/timer/arm_timer.c2
-rw-r--r--hw/timer/aspeed_timer.c4
-rw-r--r--hw/timer/cmsdk-apb-dualtimer.c2
-rw-r--r--hw/timer/cmsdk-apb-timer.c2
-rw-r--r--hw/timer/grlib_gptimer.c2
-rw-r--r--hw/timer/hpet.c2
-rw-r--r--hw/timer/i8254.c2
-rw-r--r--hw/timer/lm32_timer.c2
-rw-r--r--hw/timer/milkymist-sysctl.c2
-rw-r--r--hw/timer/mss-timer.c2
-rw-r--r--hw/timer/pxa2xx_timer.c4
-rw-r--r--hw/timer/slavio_timer.c2
-rw-r--r--hw/timer/stm32f2xx_timer.c2
-rw-r--r--hw/timer/xilinx_timer.c2
-rw-r--r--hw/tpm/tpm_crb.c2
-rw-r--r--hw/tpm/tpm_tis.c2
-rw-r--r--hw/usb/bus.c2
-rw-r--r--hw/usb/ccid-card-emulated.c2
-rw-r--r--hw/usb/ccid-card-passthru.c2
-rw-r--r--hw/usb/dev-audio.c2
-rw-r--r--hw/usb/dev-hid.c6
-rw-r--r--hw/usb/dev-hub.c2
-rw-r--r--hw/usb/dev-mtp.c2
-rw-r--r--hw/usb/dev-network.c2
-rw-r--r--hw/usb/dev-serial.c4
-rw-r--r--hw/usb/dev-smartcard-reader.c4
-rw-r--r--hw/usb/dev-storage.c2
-rw-r--r--hw/usb/dev-uas.c2
-rw-r--r--hw/usb/hcd-ehci-pci.c2
-rw-r--r--hw/usb/hcd-ehci-sysbus.c2
-rw-r--r--hw/usb/hcd-ohci-pci.c2
-rw-r--r--hw/usb/hcd-ohci.c2
-rw-r--r--hw/usb/hcd-uhci.c4
-rw-r--r--hw/usb/hcd-xhci-nec.c2
-rw-r--r--hw/usb/hcd-xhci.c2
-rw-r--r--hw/usb/host-libusb.c2
-rw-r--r--hw/usb/redirect.c2
-rw-r--r--hw/vfio/ap.c2
-rw-r--r--hw/vfio/ccw.c2
-rw-r--r--hw/vfio/pci.c4
-rw-r--r--hw/vfio/platform.c2
-rw-r--r--hw/virtio/vhost-scsi-pci.c2
-rw-r--r--hw/virtio/vhost-user-blk-pci.c2
-rw-r--r--hw/virtio/vhost-user-fs-pci.c2
-rw-r--r--hw/virtio/vhost-user-fs.c2
-rw-r--r--hw/virtio/vhost-user-scsi-pci.c2
-rw-r--r--hw/virtio/vhost-vsock-pci.c2
-rw-r--r--hw/virtio/vhost-vsock.c2
-rw-r--r--hw/virtio/virtio-9p-pci.c2
-rw-r--r--hw/virtio/virtio-balloon-pci.c2
-rw-r--r--hw/virtio/virtio-balloon.c2
-rw-r--r--hw/virtio/virtio-blk-pci.c2
-rw-r--r--hw/virtio/virtio-crypto-pci.c2
-rw-r--r--hw/virtio/virtio-crypto.c2
-rw-r--r--hw/virtio/virtio-input-pci.c2
-rw-r--r--hw/virtio/virtio-mmio.c2
-rw-r--r--hw/virtio/virtio-net-pci.c2
-rw-r--r--hw/virtio/virtio-pci.c4
-rw-r--r--hw/virtio/virtio-pmem.c2
-rw-r--r--hw/virtio/virtio-rng.c2
-rw-r--r--hw/virtio/virtio-scsi-pci.c2
-rw-r--r--hw/virtio/virtio-serial-pci.c2
-rw-r--r--hw/virtio/virtio.c2
-rw-r--r--hw/watchdog/cmsdk-apb-watchdog.c2
-rw-r--r--hw/watchdog/wdt_aspeed.c2
-rw-r--r--hw/xen/xen-bus.c2
-rw-r--r--hw/xen/xen-legacy-backend.c4
-rw-r--r--hw/xen/xen_pt.c2
-rw-r--r--include/hw/core/cpu.h4
-rw-r--r--include/hw/qdev-core.h15
-rw-r--r--include/hw/qdev-properties.h3
-rw-r--r--include/qapi/qmp/qstring.h1
-rw-r--r--include/qom/object.h109
-rw-r--r--include/sysemu/accel.h2
-rw-r--r--include/sysemu/runstate.h1
-rw-r--r--memory.c2
-rw-r--r--migration/migration.c2
-rw-r--r--monitor/misc.c26
-rw-r--r--qapi/qom.json7
-rw-r--r--qapi/run-state.json24
-rw-r--r--qdev-monitor.c30
-rw-r--r--qga/vss-win32/Makefile.objs4
-rw-r--r--qobject/qstring.c27
-rw-r--r--qom/object.c299
-rw-r--r--qom/object_interfaces.c39
-rw-r--r--qom/qom-qmp-cmds.c54
-rw-r--r--rules.mak4
-rw-r--r--target/arm/cpu.c41
-rw-r--r--target/arm/kvm.c4
-rw-r--r--target/arm/kvm64.c5
-rw-r--r--target/cris/cpu.c3
-rw-r--r--target/i386/cpu.c25
-rw-r--r--target/i386/cpu.h3
-rw-r--r--target/i386/hvf/x86_emu.c4
-rw-r--r--target/i386/kvm.c88
-rw-r--r--target/i386/kvm_i386.h1
-rw-r--r--target/i386/misc_helper.c4
-rw-r--r--target/lm32/cpu.c3
-rw-r--r--target/m68k/cpu.c3
-rw-r--r--target/microblaze/cpu.c5
-rw-r--r--target/mips/cpu.c3
-rw-r--r--target/moxie/cpu.c3
-rw-r--r--target/nios2/cpu.c5
-rw-r--r--target/openrisc/cpu.c3
-rw-r--r--target/ppc/kvm.c4
-rw-r--r--target/ppc/translate_init.inc.c13
-rw-r--r--target/riscv/cpu.c5
-rw-r--r--target/s390x/cpu.c5
-rw-r--r--target/sh4/cpu.c3
-rw-r--r--target/sparc/cpu.c5
-rw-r--r--target/tilegx/cpu.c3
-rw-r--r--target/tricore/cpu.c3
-rw-r--r--target/xtensa/cpu.c3
-rw-r--r--tests/test-qdev-global-props.c2
-rw-r--r--vl.c14
448 files changed, 1255 insertions, 940 deletions
diff --git a/.travis.yml b/.travis.yml
index 6c1038a0f1..1ae645e9fc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -327,7 +327,7 @@ matrix:
- TEST_CMD=""
before_script:
- mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR}
- - ${SRC_DIR}/configure ${CONFIG} --extra-cflags="-g3 -O0 -Wno-error=stringop-truncation -fsanitize=thread -fuse-ld=gold" || { cat config.log && exit 1; }
+ - ${SRC_DIR}/configure ${CONFIG} --extra-cflags="-g3 -O0 -Wno-error=stringop-truncation -fsanitize=thread" --extra-ldflags="-fuse-ld=gold" || { cat config.log && exit 1; }
# Run check-tcg against linux-user
diff --git a/Makefile b/Makefile
index 04c77d3b96..9a5a1e689c 100644
--- a/Makefile
+++ b/Makefile
@@ -498,7 +498,7 @@ DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
.PHONY: dtc/all
dtc/all: .git-submodule-status dtc/libfdt dtc/tests
- $(call quiet-command,$(MAKE) $(DTC_MAKE_ARGS) CPPFLAGS="$(DTC_CPPFLAGS)" CFLAGS="$(DTC_CFLAGS)" LDFLAGS="$(LDFLAGS)" ARFLAGS="$(ARFLAGS)" CC="$(CC)" AR="$(AR)" LD="$(LD)" $(SUBDIR_MAKEFLAGS) libfdt/libfdt.a,)
+ $(call quiet-command,$(MAKE) $(DTC_MAKE_ARGS) CPPFLAGS="$(DTC_CPPFLAGS)" CFLAGS="$(DTC_CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)" ARFLAGS="$(ARFLAGS)" CC="$(CC)" AR="$(AR)" LD="$(LD)" $(SUBDIR_MAKEFLAGS) libfdt/libfdt.a,)
dtc/%: .git-submodule-status
@mkdir -p $@
@@ -525,7 +525,7 @@ slirp/all: .git-submodule-status
BUILD_DIR="$(BUILD_DIR)/slirp" \
PKG_CONFIG="$(PKG_CONFIG)" \
CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" \
- CFLAGS="$(QEMU_CFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)")
+ CFLAGS="$(QEMU_CFLAGS) $(CFLAGS)" LDFLAGS="$(QEMU_LDFLAGS)")
# Compatibility gunk to keep make working across the rename of targets
# for recursion, to be removed some time after 4.1.
diff --git a/Makefile.objs b/Makefile.objs
index ff396b9209..f2da7241fc 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -2,16 +2,16 @@
# Common libraries for tools and emulators
stub-obj-y = stubs/
util-obj-y = crypto/ util/ qobject/ qapi/
-
-chardev-obj-y = chardev/
+qom-obj-y = qom/
#######################################################################
-# authz-obj-y is code used by both qemu system emulation and qemu-img
+# code used by both qemu system emulation and qemu-img
-authz-obj-y = authz/
+ifeq ($(call lor,$(CONFIG_SOFTMMU),$(CONFIG_TOOLS)),y)
-#######################################################################
-# block-obj-y is code used by both qemu system emulation and qemu-img
+chardev-obj-y = chardev/
+
+authz-obj-y = authz/
block-obj-y = nbd/
block-obj-y += block.o blockjob.o job.o
@@ -21,21 +21,12 @@ block-obj-$(CONFIG_REPLICATION) += replication.o
block-obj-m = block/
-#######################################################################
-# crypto-obj-y is code used by both qemu system emulation and qemu-img
-
crypto-obj-y = crypto/
-#######################################################################
-# qom-obj-y is code used by both qemu system emulation and qemu-img
-
-qom-obj-y = qom/
-
-#######################################################################
-# io-obj-y is code used by both qemu system emulation and qemu-img
-
io-obj-y = io/
+endif # CONFIG_SOFTMMU or CONFIG_TOOLS
+
######################################################################
# Target independent part of system emulation. The long term path is to
# suppress *all* target specific code in case of system emulation, i.e. a
@@ -80,11 +71,9 @@ qemu-seccomp.o-libs := $(SECCOMP_LIBS)
common-obj-$(CONFIG_FDT) += device_tree.o
-######################################################################
-# qapi
-
common-obj-y += qapi/
-endif
+
+endif # CONFIG_SOFTMMU
#######################################################################
# Target-independent parts used in system and user emulation
diff --git a/accel/accel.c b/accel/accel.c
index 1c5c3a6abb..cb555e3b06 100644
--- a/accel/accel.c
+++ b/accel/accel.c
@@ -63,6 +63,11 @@ int accel_init_machine(AccelState *accel, MachineState *ms)
return ret;
}
+AccelState *current_accel(void)
+{
+ return current_machine->accelerator;
+}
+
void accel_setup_post(MachineState *ms)
{
AccelState *accel = ms->accelerator;
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 1ada2f4ecb..c111312dfd 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -164,7 +164,7 @@ static NotifierList kvm_irqchip_change_notifiers =
int kvm_get_max_memslots(void)
{
- KVMState *s = KVM_STATE(current_machine->accelerator);
+ KVMState *s = KVM_STATE(current_accel());
return s->nr_slots;
}
@@ -1848,7 +1848,7 @@ static int kvm_max_vcpu_id(KVMState *s)
bool kvm_vcpu_id_is_valid(int vcpu_id)
{
- KVMState *s = KVM_STATE(current_machine->accelerator);
+ KVMState *s = KVM_STATE(current_accel());
return vcpu_id >= 0 && vcpu_id < kvm_max_vcpu_id(s);
}
diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
index 1dc384c8d2..acfdcfdf59 100644
--- a/accel/tcg/tcg-all.c
+++ b/accel/tcg/tcg-all.c
@@ -31,9 +31,9 @@
#include "sysemu/cpus.h"
#include "qemu/main-loop.h"
#include "tcg/tcg.h"
-#include "include/qapi/error.h"
-#include "include/qemu/error-report.h"
-#include "include/hw/boards.h"
+#include "qapi/error.h"
+#include "qemu/error-report.h"
+#include "hw/boards.h"
#include "qapi/qapi-builtin-visit.h"
typedef struct TCGState {
@@ -124,7 +124,7 @@ static void tcg_accel_instance_init(Object *obj)
static int tcg_init(MachineState *ms)
{
- TCGState *s = TCG_STATE(current_machine->accelerator);
+ TCGState *s = TCG_STATE(current_accel());
tcg_exec_init(s->tb_size * 1024 * 1024);
cpu_interrupt_handler = tcg_handle_interrupt;
diff --git a/audio/audio.c b/audio/audio.c
index abea027fdf..f63f39769a 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -304,6 +304,7 @@ void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as)
switch (as->fmt) {
case AUDIO_FORMAT_S8:
sign = 1;
+ /* fall through */
case AUDIO_FORMAT_U8:
mul = 1;
break;
diff --git a/configure b/configure
index 6ab028dd0d..a72a5def57 100755
--- a/configure
+++ b/configure
@@ -126,7 +126,7 @@ compile_object() {
compile_prog() {
local_cflags="$1"
local_ldflags="$2"
- do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
+ do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
}
# symbolically link $1 to $2. Portable version of "ln -sf".
@@ -523,10 +523,11 @@ for opt do
--cpu=*) cpu="$optarg"
;;
--extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
+ QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
;;
--extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
;;
- --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
+ --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
EXTRA_LDFLAGS="$optarg"
;;
--enable-debug-info) debug_info="yes"
@@ -599,7 +600,6 @@ QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iq
QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
if test "$debug_info" = "yes"; then
CFLAGS="-g $CFLAGS"
- LDFLAGS="-g $LDFLAGS"
fi
# running configure in the source tree?
@@ -845,12 +845,12 @@ Darwin)
LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
if [ "$cpu" = "x86_64" ] ; then
QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
- LDFLAGS="-arch x86_64 $LDFLAGS"
+ QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
fi
cocoa="yes"
audio_drv_list="coreaudio try-sdl"
audio_possible_drivers="coreaudio sdl"
- LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
+ QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
# Disable attempts to use ObjectiveC features in os/object.h since they
# won't work when we're compiling with gcc as a C compiler.
@@ -1025,7 +1025,7 @@ for opt do
;;
--static)
static="yes"
- LDFLAGS="-static $LDFLAGS"
+ QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
;;
--mandir=*) mandir="$optarg"
@@ -1551,42 +1551,42 @@ done
case "$cpu" in
ppc)
CPU_CFLAGS="-m32"
- LDFLAGS="-m32 $LDFLAGS"
+ QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
;;
ppc64)
CPU_CFLAGS="-m64"
- LDFLAGS="-m64 $LDFLAGS"
+ QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
;;
sparc)
CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
- LDFLAGS="-m32 -mv8plus $LDFLAGS"
+ QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
;;
sparc64)
CPU_CFLAGS="-m64 -mcpu=ultrasparc"
- LDFLAGS="-m64 $LDFLAGS"
+ QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
;;
s390)
CPU_CFLAGS="-m31"
- LDFLAGS="-m31 $LDFLAGS"
+ QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
;;
s390x)
CPU_CFLAGS="-m64"
- LDFLAGS="-m64 $LDFLAGS"
+ QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
;;
i386)
CPU_CFLAGS="-m32"
- LDFLAGS="-m32 $LDFLAGS"
+ QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
;;
x86_64)
# ??? Only extremely old AMD cpus do not have cmpxchg16b.
# If we truly care, we should simply detect this case at
# runtime and generate the fallback to serial emulation.
CPU_CFLAGS="-m64 -mcx16"
- LDFLAGS="-m64 $LDFLAGS"
+ QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
;;
x32)
CPU_CFLAGS="-mx32"
- LDFLAGS="-mx32 $LDFLAGS"
+ QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
;;
# No special flags required for other host CPUs
esac
@@ -1967,6 +1967,7 @@ EOF
if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
compile_prog "-Werror $flag" ""; then
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
+ QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
sp_on=1
break
fi
@@ -2051,10 +2052,10 @@ EOF
if compile_prog "-fPIE -DPIE" "-pie"; then
QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
- LDFLAGS="-pie $LDFLAGS"
+ QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
pie="yes"
if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
- LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
+ QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
fi
else
if test "$pie" = "yes"; then
@@ -4095,6 +4096,8 @@ if test "$fdt_required" = "yes"; then
"targets which need it (by specifying a cut down --target-list)."
fi
fdt=yes
+elif test "$fdt" != "yes" ; then
+ fdt=no
fi
if test "$fdt" != "no" ; then
@@ -5854,7 +5857,7 @@ EOF
hvf='no'
else
hvf='yes'
- LDFLAGS="-framework Hypervisor $LDFLAGS"
+ QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
fi
fi
@@ -6088,8 +6091,8 @@ esac
write_c_skeleton
if test "$gcov" = "yes" ; then
- CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
- LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
+ QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
+ QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
elif test "$fortify_source" = "yes" ; then
CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
elif test "$debug" = "no"; then
@@ -6097,7 +6100,8 @@ elif test "$debug" = "no"; then
fi
if test "$have_asan" = "yes"; then
- CFLAGS="-fsanitize=address $CFLAGS"
+ QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
+ QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
if test "$have_asan_iface_h" = "no" ; then
echo "ASAN build enabled, but ASAN header missing." \
"Without code annotation, the report may be inferior."
@@ -6107,7 +6111,8 @@ if test "$have_asan" = "yes"; then
fi
fi
if test "$have_ubsan" = "yes"; then
- CFLAGS="-fsanitize=undefined $CFLAGS"
+ QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
+ QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
fi
##########################################
@@ -6142,7 +6147,7 @@ fi
if test "$solaris" = "no" ; then
if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
- LDFLAGS="-Wl,--warn-common $LDFLAGS"
+ QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
fi
fi
@@ -6157,7 +6162,7 @@ fi
if test "$mingw32" = "yes" ; then
for flag in --dynamicbase --no-seh --nxcompat; do
if ld_has $flag ; then
- LDFLAGS="-Wl,$flag $LDFLAGS"
+ QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
fi
done
fi
@@ -6392,7 +6397,7 @@ EOF
update_cxxflags
- if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
+ if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
# C++ compiler $cxx works ok with C compiler $cc
:
else
@@ -6444,7 +6449,6 @@ echo "Objective-C compiler $objcc"
echo "ARFLAGS $ARFLAGS"
echo "CFLAGS $CFLAGS"
echo "QEMU_CFLAGS $QEMU_CFLAGS"
-echo "LDFLAGS $LDFLAGS"
echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
echo "make $make"
echo "install $install"
@@ -7502,9 +7506,8 @@ if test "$sparse" = "yes" ; then
echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
fi
-echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
-echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
+echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
echo "LIBS+=$LIBS" >> $config_host_mak
@@ -7830,7 +7833,7 @@ if test "$target_bsd_user" = "yes" ; then
fi
-# generate QEMU_CFLAGS/LDFLAGS for targets
+# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
cflags=""
ldflags=""
@@ -7951,7 +7954,7 @@ if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
fi
fi
-echo "LDFLAGS+=$ldflags" >> $config_target_mak
+echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
done # for target in $targets
diff --git a/docs/specs/pvpanic.txt b/docs/specs/pvpanic.txt
index c7bbacc778..a90fbca72b 100644
--- a/docs/specs/pvpanic.txt
+++ b/docs/specs/pvpanic.txt
@@ -16,8 +16,13 @@ pvpanic exposes a single I/O port, by default 0x505. On read, the bits
recognized by the device are set. Software should ignore bits it doesn't
recognize. On write, the bits not recognized by the device are ignored.
Software should set only bits both itself and the device recognize.
-Currently, only bit 0 is recognized, setting it indicates a guest panic
-has happened.
+
+Bit Definition
+--------------
+bit 0: a guest panic has happened and should be processed by the host
+bit 1: a guest panic has happened and will be handled by the guest;
+ the host should record it or report it, but should not affect
+ the execution of the guest.
ACPI Interface
--------------
@@ -26,13 +31,12 @@ pvpanic device is defined with ACPI ID "QEMU0001". Custom methods:
RDPT: To determine whether guest panic notification is supported.
Arguments: None
-Return: Returns a byte, bit 0 set to indicate guest panic
- notification is supported. Other bits are reserved and
- should be ignored.
+Return: Returns a byte, with the same semantics as the I/O port
+ interface.
WRPT: To send a guest panic event
-Arguments: Arg0 is a byte, with bit 0 set to indicate guest panic has
- happened. Other bits are reserved and should be cleared.
+Arguments: Arg0 is a byte to be written, with the same semantics as
+ the I/O interface.
Return: None
The ACPI device will automatically refer to the right port in case it
diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c
index 1d1c50409c..536447a355 100644
--- a/hw/9pfs/virtio-9p-device.c
+++ b/hw/9pfs/virtio-9p-device.c
@@ -246,7 +246,7 @@ static void virtio_9p_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = virtio_9p_properties;
+ device_class_set_props(dc, virtio_9p_properties);
dc->vmsd = &vmstate_virtio_9p;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
vdc->realize = virtio_9p_device_realize;
diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
index 55eb29d80a..021ed2bf23 100644
--- a/hw/acpi/generic_event_device.c
+++ b/hw/acpi/generic_event_device.c
@@ -282,7 +282,7 @@ static void acpi_ged_class_init(ObjectClass *class, void *data)
AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_CLASS(class);
dc->desc = "ACPI Generic Event Device";
- dc->props = acpi_ged_properties;
+ device_class_set_props(dc, acpi_ged_properties);
dc->vmsd = &vmstate_acpi_ged;
hc->plug = acpi_ged_device_plug_cb;
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
index 93aec2dd2c..6d621c31e7 100644
--- a/hw/acpi/piix4.c
+++ b/hw/acpi/piix4.c
@@ -653,7 +653,7 @@ static void piix4_pm_class_init(ObjectClass *klass, void *data)
dc->reset = piix4_pm_reset;
dc->desc = "PM";
dc->vmsd = &vmstate_acpi;
- dc->props = piix4_pm_properties;
+ device_class_set_props(dc, piix4_pm_properties);
/*
* Reason: part of PIIX4 southbridge, needs to be wired up,
* e.g. by mips_malta_init()
diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c
index 6e11b0fa9b..2df7623d74 100644
--- a/hw/acpi/vmgenid.c
+++ b/hw/acpi/vmgenid.c
@@ -226,7 +226,7 @@ static void vmgenid_device_class_init(ObjectClass *klass, void *data)
dc->vmsd = &vmstate_vmgenid;
dc->realize = vmgenid_realize;
- dc->props = vmgenid_device_properties;
+ device_class_set_props(dc, vmgenid_device_properties);
dc->hotpluggable = false;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c
index e5263aa33d..174ca7effc 100644
--- a/hw/arm/armsse.c
+++ b/hw/arm/armsse.c
@@ -1283,7 +1283,7 @@ static void armsse_class_init(ObjectClass *klass, void *data)
dc->realize = armsse_realize;
dc->vmsd = &armsse_vmstate;
- dc->props = info->props;
+ device_class_set_props(dc, info->props);
dc->reset = armsse_reset;
iic->check = armsse_idau_check;
asc->info = info;
diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
index 7a3c48f002..5d4a581436 100644
--- a/hw/arm/armv7m.c
+++ b/hw/arm/armv7m.c
@@ -288,7 +288,7 @@ static void armv7m_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = armv7m_realize;
- dc->props = armv7m_properties;
+ device_class_set_props(dc, armv7m_properties);
}
static const TypeInfo armv7m_info = {
@@ -367,7 +367,7 @@ static void bitband_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = bitband_realize;
- dc->props = bitband_properties;
+ device_class_set_props(dc, bitband_properties);
}
static const TypeInfo bitband_info = {
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
index a6237e5940..99892cbae6 100644
--- a/hw/arm/aspeed_soc.c
+++ b/hw/arm/aspeed_soc.c
@@ -449,7 +449,7 @@ static void aspeed_soc_class_init(ObjectClass *oc, void *data)
dc->realize = aspeed_soc_realize;
/* Reason: Uses serial_hds and nd_table in realize() directly */
dc->user_creatable = false;
- dc->props = aspeed_soc_properties;
+ device_class_set_props(dc, aspeed_soc_properties);
}
static const TypeInfo aspeed_soc_type_info = {
diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c
index 221ff06895..38e2941bab 100644
--- a/hw/arm/bcm2836.c
+++ b/hw/arm/bcm2836.c
@@ -180,7 +180,7 @@ static void bcm283x_class_init(ObjectClass *oc, void *data)
bc->info = data;
dc->realize = bcm2836_realize;
- dc->props = bcm2836_props;
+ device_class_set_props(dc, bcm2836_props);
/* Reason: Must be wired up in code (see raspi_init() function) */
dc->user_creatable = false;
}
diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c
index 524970840d..0cd94d9f09 100644
--- a/hw/arm/integratorcp.c
+++ b/hw/arm/integratorcp.c
@@ -673,7 +673,7 @@ static void core_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = core_properties;
+ device_class_set_props(dc, core_properties);
dc->realize = integratorcm_realize;
dc->vmsd = &vmstate_integratorcm;
}
diff --git a/hw/arm/msf2-soc.c b/hw/arm/msf2-soc.c
index 008fd9327a..8f84692e64 100644
--- a/hw/arm/msf2-soc.c
+++ b/hw/arm/msf2-soc.c
@@ -229,7 +229,7 @@ static void m2sxxx_soc_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = m2sxxx_soc_realize;
- dc->props = m2sxxx_soc_properties;
+ device_class_set_props(dc, m2sxxx_soc_properties);
}
static const TypeInfo m2sxxx_soc_info = {
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
index f68a399a98..dc551bb0c0 100644
--- a/hw/arm/musicpal.c
+++ b/hw/arm/musicpal.c
@@ -435,7 +435,7 @@ static void mv88w8618_eth_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->vmsd = &mv88w8618_eth_vmsd;
- dc->props = mv88w8618_eth_properties;
+ device_class_set_props(dc, mv88w8618_eth_properties);
dc->realize = mv88w8618_eth_realize;
}
diff --git a/hw/arm/nrf51_soc.c b/hw/arm/nrf51_soc.c
index 74029169d0..4817a76ae0 100644
--- a/hw/arm/nrf51_soc.c
+++ b/hw/arm/nrf51_soc.c
@@ -224,7 +224,7 @@ static void nrf51_soc_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = nrf51_soc_realize;
- dc->props = nrf51_soc_properties;
+ device_class_set_props(dc, nrf51_soc_properties);
}
static const TypeInfo nrf51_soc_info = {
diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
index 950ff4239a..b33f8f1351 100644
--- a/hw/arm/pxa2xx.c
+++ b/hw/arm/pxa2xx.c
@@ -1531,7 +1531,7 @@ static void pxa2xx_i2c_class_init(ObjectClass *klass, void *data)
dc->desc = "PXA2xx I2C Bus Controller";
dc->vmsd = &vmstate_pxa2xx_i2c;
- dc->props = pxa2xx_i2c_properties;
+ device_class_set_props(dc, pxa2xx_i2c_properties);
}
static const TypeInfo pxa2xx_i2c_info = {
@@ -2015,7 +2015,7 @@ static void pxa2xx_fir_class_init(ObjectClass *klass, void *data)
dc->realize = pxa2xx_fir_realize;
dc->vmsd = &pxa2xx_fir_vmsd;
- dc->props = pxa2xx_fir_properties;
+ device_class_set_props(dc, pxa2xx_fir_properties);
dc->reset = pxa2xx_fir_reset;
}
diff --git a/hw/arm/pxa2xx_gpio.c b/hw/arm/pxa2xx_gpio.c
index 86a0e86c4c..f8df3cc227 100644
--- a/hw/arm/pxa2xx_gpio.c
+++ b/hw/arm/pxa2xx_gpio.c
@@ -347,7 +347,7 @@ static void pxa2xx_gpio_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->desc = "PXA2xx GPIO controller";
- dc->props = pxa2xx_gpio_properties;
+ device_class_set_props(dc, pxa2xx_gpio_properties);
dc->vmsd = &vmstate_pxa2xx_gpio_regs;
dc->realize = pxa2xx_gpio_realize;
}
diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c
index 245817d23e..23eb117041 100644
--- a/hw/arm/smmu-common.c
+++ b/hw/arm/smmu-common.c
@@ -461,7 +461,7 @@ static void smmu_base_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
SMMUBaseClass *sbc = ARM_SMMU_CLASS(klass);
- dc->props = smmu_dev_properties;
+ device_class_set_props(dc, smmu_dev_properties);
device_class_set_parent_realize(dc, smmu_base_realize,
&sbc->parent_realize);
dc->reset = smmu_base_reset;
diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c
index 25bd0f5d9d..e001088103 100644
--- a/hw/arm/spitz.c
+++ b/hw/arm/spitz.c
@@ -1083,7 +1083,7 @@ static void sl_nand_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->vmsd = &vmstate_sl_nand_info;
- dc->props = sl_nand_properties;
+ device_class_set_props(dc, sl_nand_properties);
dc->realize = sl_nand_realize;
/* Reason: init() method uses drive_get() */
dc->user_creatable = false;
diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c
index f5a5c2d80c..627fd446f5 100644
--- a/hw/arm/stm32f205_soc.c
+++ b/hw/arm/stm32f205_soc.c
@@ -207,7 +207,7 @@ static void stm32f205_soc_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = stm32f205_soc_realize;
- dc->props = stm32f205_soc_properties;
+ device_class_set_props(dc, stm32f205_soc_properties);
}
static const TypeInfo stm32f205_soc_info = {
diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c
index f22516fdf7..9bcad97853 100644
--- a/hw/arm/stm32f405_soc.c
+++ b/hw/arm/stm32f405_soc.c
@@ -282,7 +282,7 @@ static void stm32f405_soc_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = stm32f405_soc_realize;
- dc->props = stm32f405_soc_properties;
+ device_class_set_props(dc, stm32f405_soc_properties);
/* No vmstate or reset required: device has no internal state */
}
diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
index c6776e8479..cd8a99aaf2 100644
--- a/hw/arm/strongarm.c
+++ b/hw/arm/strongarm.c
@@ -1327,7 +1327,7 @@ static void strongarm_uart_class_init(ObjectClass *klass, void *data)
dc->desc = "StrongARM UART controller";
dc->reset = strongarm_uart_reset;
dc->vmsd = &vmstate_strongarm_uart_regs;
- dc->props = strongarm_uart_properties;
+ device_class_set_props(dc, strongarm_uart_properties);
dc->realize = strongarm_uart_realize;
}
diff --git a/hw/arm/xlnx-versal.c b/hw/arm/xlnx-versal.c
index 8b3d8d85b8..1cf3daaf4f 100644
--- a/hw/arm/xlnx-versal.c
+++ b/hw/arm/xlnx-versal.c
@@ -305,7 +305,7 @@ static void versal_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = versal_realize;
- dc->props = versal_properties;
+ device_class_set_props(dc, versal_properties);
/* No VMSD since we haven't got any top-level SoC state to save. */
}
diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
index fb03c60ebb..cab0160ae9 100644
--- a/hw/arm/xlnx-zynqmp.c
+++ b/hw/arm/xlnx-zynqmp.c
@@ -657,7 +657,7 @@ static void xlnx_zynqmp_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
- dc->props = xlnx_zynqmp_props;
+ device_class_set_props(dc, xlnx_zynqmp_props);
dc->realize = xlnx_zynqmp_realize;
/* Reason: Uses serial_hds in realize function, thus can't be used twice */
dc->user_creatable = false;
diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c
index 78cda88333..1ec87feec0 100644
--- a/hw/audio/ac97.c
+++ b/hw/audio/ac97.c
@@ -1420,7 +1420,7 @@ static void ac97_class_init (ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->desc = "Intel 82801AA AC97 Audio";
dc->vmsd = &vmstate_ac97;
- dc->props = ac97_properties;
+ device_class_set_props(dc, ac97_properties);
dc->reset = ac97_on_reset;
}
diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c
index cb4178d861..d6c1fb0586 100644
--- a/hw/audio/adlib.c
+++ b/hw/audio/adlib.c
@@ -312,7 +312,7 @@ static void adlib_class_initfn (ObjectClass *klass, void *data)
dc->realize = adlib_realizefn;
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->desc = ADLIB_DESC;
- dc->props = adlib_properties;
+ device_class_set_props(dc, adlib_properties);
}
static const TypeInfo adlib_info = {
diff --git a/hw/audio/cs4231.c b/hw/audio/cs4231.c
index b5d3e895ce..11a6328fc2 100644
--- a/hw/audio/cs4231.c
+++ b/hw/audio/cs4231.c
@@ -168,7 +168,7 @@ static void cs4231_class_init(ObjectClass *klass, void *data)
dc->reset = cs_reset;
dc->vmsd = &vmstate_cs4231;
- dc->props = cs4231_properties;
+ device_class_set_props(dc, cs4231_properties);
}
static const TypeInfo cs4231_info = {
diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c
index c7b8067489..ffdbb58d6a 100644
--- a/hw/audio/cs4231a.c
+++ b/hw/audio/cs4231a.c
@@ -706,7 +706,7 @@ static void cs4231a_class_initfn (ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->desc = "Crystal Semiconductor CS4231A";
dc->vmsd = &vmstate_cs4231a;
- dc->props = cs4231a_properties;
+ device_class_set_props(dc, cs4231a_properties);
}
static const TypeInfo cs4231a_info = {
diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c
index f9e9f2a3b3..89c4dabcd4 100644
--- a/hw/audio/es1370.c
+++ b/hw/audio/es1370.c
@@ -908,7 +908,7 @@ static void es1370_class_init (ObjectClass *klass, void *data)
dc->desc = "ENSONIQ AudioPCI ES1370";
dc->vmsd = &vmstate_es1370;
dc->reset = es1370_on_reset;
- dc->props = es1370_properties;
+ device_class_set_props(dc, es1370_properties);
}
static const TypeInfo es1370_info = {
diff --git a/hw/audio/gus.c b/hw/audio/gus.c
index 2b6b7c4e3f..eb4a803fb5 100644
--- a/hw/audio/gus.c
+++ b/hw/audio/gus.c
@@ -315,7 +315,7 @@ static void gus_class_initfn (ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->desc = "Gravis Ultrasound GF1";
dc->vmsd = &vmstate_gus;
- dc->props = gus_properties;
+ device_class_set_props(dc, gus_properties);
}
static const TypeInfo gus_info = {
diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c
index e711a99a41..cbd92b72f2 100644
--- a/hw/audio/hda-codec.c
+++ b/hw/audio/hda-codec.c
@@ -892,7 +892,7 @@ static void hda_audio_base_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->reset = hda_audio_reset;
dc->vmsd = &vmstate_hda_audio;
- dc->props = hda_audio_properties;
+ device_class_set_props(dc, hda_audio_properties);
}
static const TypeInfo hda_audio_info = {
diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
index 6ecd383540..e96a707ac5 100644
--- a/hw/audio/intel-hda.c
+++ b/hw/audio/intel-hda.c
@@ -1233,7 +1233,7 @@ static void intel_hda_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_MULTIMEDIA_HD_AUDIO;
dc->reset = intel_hda_reset;
dc->vmsd = &vmstate_intel_hda;
- dc->props = intel_hda_properties;
+ device_class_set_props(dc, intel_hda_properties);
}
static void intel_hda_class_init_ich6(ObjectClass *klass, void *data)
@@ -1289,7 +1289,7 @@ static void hda_codec_device_class_init(ObjectClass *klass, void *data)
k->unrealize = hda_codec_dev_unrealize;
set_bit(DEVICE_CATEGORY_SOUND, k->categories);
k->bus_type = TYPE_HDA_BUS;
- k->props = hda_props;
+ device_class_set_props(k, hda_props);
}
static const TypeInfo hda_codec_device_type_info = {
diff --git a/hw/audio/milkymist-ac97.c b/hw/audio/milkymist-ac97.c
index 6d409eff1b..0fa38adbe2 100644
--- a/hw/audio/milkymist-ac97.c
+++ b/hw/audio/milkymist-ac97.c
@@ -342,7 +342,7 @@ static void milkymist_ac97_class_init(ObjectClass *klass, void *data)
dc->realize = milkymist_ac97_realize;
dc->reset = milkymist_ac97_reset;
dc->vmsd = &vmstate_milkymist_ac97;
- dc->props = milkymist_ac97_properties;
+ device_class_set_props(dc, milkymist_ac97_properties);
}
static const TypeInfo milkymist_ac97_info = {
diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c
index d773eb80de..29dc00bf8d 100644
--- a/hw/audio/pcspk.c
+++ b/hw/audio/pcspk.c
@@ -222,7 +222,7 @@ static void pcspk_class_initfn(ObjectClass *klass, void *data)
dc->realize = pcspk_realizefn;
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->vmsd = &vmstate_spk;
- dc->props = pcspk_properties;
+ device_class_set_props(dc, pcspk_properties);
/* Reason: realize sets global pcspk_state */
/* Reason: pit object link */
dc->user_creatable = false;
diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c
index c30417d46d..c3d3eab6ed 100644
--- a/hw/audio/pl041.c
+++ b/hw/audio/pl041.c
@@ -640,7 +640,7 @@ static void pl041_device_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->reset = pl041_device_reset;
dc->vmsd = &vmstate_pl041;
- dc->props = pl041_device_properties;
+ device_class_set_props(dc, pl041_device_properties);
}
static const TypeInfo pl041_device_info = {
diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c
index a354f94acb..df6f755a37 100644
--- a/hw/audio/sb16.c
+++ b/hw/audio/sb16.c
@@ -1439,7 +1439,7 @@ static void sb16_class_initfn (ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
dc->desc = "Creative Sound Blaster 16";
dc->vmsd = &vmstate_sb16;
- dc->props = sb16_properties;
+ device_class_set_props(dc, sb16_properties);
}
static const TypeInfo sb16_info = {
diff --git a/hw/audio/wm8750.c b/hw/audio/wm8750.c
index 601ed04aff..92b2902a10 100644
--- a/hw/audio/wm8750.c
+++ b/hw/audio/wm8750.c
@@ -717,7 +717,7 @@ static void wm8750_class_init(ObjectClass *klass, void *data)
sc->recv = wm8750_rx;
sc->send = wm8750_tx;
dc->vmsd = &vmstate_wm8750;
- dc->props = wm8750_properties;
+ device_class_set_props(dc, wm8750_properties);
}
static const TypeInfo wm8750_info = {
diff --git a/hw/block/fdc.c b/hw/block/fdc.c
index ac5d31e8c1..22e954e0dc 100644
--- a/hw/block/fdc.c
+++ b/hw/block/fdc.c
@@ -606,7 +606,7 @@ static void floppy_drive_class_init(ObjectClass *klass, void *data)
k->realize = floppy_drive_realize;
set_bit(DEVICE_CATEGORY_STORAGE, k->categories);
k->bus_type = TYPE_FLOPPY_BUS;
- k->props = floppy_drive_properties;
+ device_class_set_props(k, floppy_drive_properties);
k->desc = "virtual floppy drive";
}
@@ -2827,7 +2827,7 @@ static void isabus_fdc_class_init(ObjectClass *klass, void *data)
dc->fw_name = "fdc";
dc->reset = fdctrl_external_reset_isa;
dc->vmsd = &vmstate_isa_fdc;
- dc->props = isa_fdc_properties;
+ device_class_set_props(dc, isa_fdc_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
@@ -2880,7 +2880,7 @@ static void sysbus_fdc_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = sysbus_fdc_properties;
+ device_class_set_props(dc, sysbus_fdc_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
@@ -2906,7 +2906,7 @@ static void sun4m_fdc_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = sun4m_fdc_properties;
+ device_class_set_props(dc, sun4m_fdc_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
index 11ff5b9ad7..61f2fb8f8f 100644
--- a/hw/block/m25p80.c
+++ b/hw/block/m25p80.c
@@ -1391,7 +1391,7 @@ static void m25p80_class_init(ObjectClass *klass, void *data)
k->set_cs = m25p80_cs;
k->cs_polarity = SSI_CS_LOW;
dc->vmsd = &vmstate_m25p80;
- dc->props = m25p80_properties;
+ device_class_set_props(dc, m25p80_properties);
dc->reset = m25p80_reset;
mc->pi = data;
}
diff --git a/hw/block/nand.c b/hw/block/nand.c
index e396004315..bba89688ba 100644
--- a/hw/block/nand.c
+++ b/hw/block/nand.c
@@ -448,7 +448,7 @@ static void nand_class_init(ObjectClass *klass, void *data)
dc->realize = nand_realize;
dc->reset = nand_reset;
dc->vmsd = &vmstate_nand;
- dc->props = nand_properties;
+ device_class_set_props(dc, nand_properties);
}
static const TypeInfo nand_info = {
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 12d8254250..d28335cbf3 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -1475,7 +1475,7 @@ static void nvme_class_init(ObjectClass *oc, void *data)
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
dc->desc = "Non-Volatile Memory Express";
- dc->props = nvme_props;
+ device_class_set_props(dc, nvme_props);
dc->vmsd = &nvme_vmstate;
}
diff --git a/hw/block/onenand.c b/hw/block/onenand.c
index 9c233c12e4..898ac563a3 100644
--- a/hw/block/onenand.c
+++ b/hw/block/onenand.c
@@ -845,7 +845,7 @@ static void onenand_class_init(ObjectClass *klass, void *data)
dc->realize = onenand_realize;
dc->reset = onenand_system_reset;
- dc->props = onenand_properties;
+ device_class_set_props(dc, onenand_properties);
}
static const TypeInfo onenand_info = {
diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
index 54e6ebd385..24f3bce7ef 100644
--- a/hw/block/pflash_cfi01.c
+++ b/hw/block/pflash_cfi01.c
@@ -930,7 +930,7 @@ static void pflash_cfi01_class_init(ObjectClass *klass, void *data)
dc->reset = pflash_cfi01_system_reset;
dc->realize = pflash_cfi01_realize;
- dc->props = pflash_cfi01_properties;
+ device_class_set_props(dc, pflash_cfi01_properties);
dc->vmsd = &vmstate_pflash;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
index c7d92c3e79..7c4744c020 100644
--- a/hw/block/pflash_cfi02.c
+++ b/hw/block/pflash_cfi02.c
@@ -963,7 +963,7 @@ static void pflash_cfi02_class_init(ObjectClass *klass, void *data)
dc->realize = pflash_cfi02_realize;
dc->unrealize = pflash_cfi02_unrealize;
- dc->props = pflash_cfi02_properties;
+ device_class_set_props(dc, pflash_cfi02_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/block/swim.c b/hw/block/swim.c
index c6d117e89b..8f124782f4 100644
--- a/hw/block/swim.c
+++ b/hw/block/swim.c
@@ -239,7 +239,7 @@ static void swim_drive_class_init(ObjectClass *klass, void *data)
k->realize = swim_drive_realize;
set_bit(DEVICE_CATEGORY_STORAGE, k->categories);
k->bus_type = TYPE_SWIM_BUS;
- k->props = swim_drive_properties;
+ device_class_set_props(k, swim_drive_properties);
k->desc = "virtual SWIM drive";
}
diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
index 98b383f90e..d8c459c575 100644
--- a/hw/block/vhost-user-blk.c
+++ b/hw/block/vhost-user-blk.c
@@ -511,7 +511,7 @@ static void vhost_user_blk_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = vhost_user_blk_properties;
+ device_class_set_props(dc, vhost_user_blk_properties);
dc->vmsd = &vmstate_vhost_user_blk;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
vdc->realize = vhost_user_blk_device_realize;
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index 9bee514c4e..09f46ed85f 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -1294,7 +1294,7 @@ static void virtio_blk_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = virtio_blk_properties;
+ device_class_set_props(dc, virtio_blk_properties);
dc->vmsd = &vmstate_virtio_blk;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
vdc->realize = virtio_blk_device_realize;
diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
index 879fc310a4..686bbc3f0d 100644
--- a/hw/block/xen-block.c
+++ b/hw/block/xen-block.c
@@ -554,7 +554,7 @@ static void xen_block_class_init(ObjectClass *class, void *data)
xendev_class->frontend_changed = xen_block_frontend_changed;
xendev_class->unrealize = xen_block_unrealize;
- dev_class->props = xen_block_props;
+ device_class_set_props(dev_class, xen_block_props);
}
static const TypeInfo xen_block_type_info = {
diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
index a6fc1bf152..ee3dd40e3c 100644
--- a/hw/char/bcm2835_aux.c
+++ b/hw/char/bcm2835_aux.c
@@ -299,7 +299,7 @@ static void bcm2835_aux_class_init(ObjectClass *oc, void *data)
dc->realize = bcm2835_aux_realize;
dc->vmsd = &vmstate_bcm2835_aux;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
- dc->props = bcm2835_aux_props;
+ device_class_set_props(dc, bcm2835_aux_props);
}
static const TypeInfo bcm2835_aux_info = {
diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
index 51791bd217..22e47972f1 100644
--- a/hw/char/cadence_uart.c
+++ b/hw/char/cadence_uart.c
@@ -550,7 +550,7 @@ static void cadence_uart_class_init(ObjectClass *klass, void *data)
dc->realize = cadence_uart_realize;
dc->vmsd = &vmstate_cadence_uart;
dc->reset = cadence_uart_reset;
- dc->props = cadence_uart_properties;
+ device_class_set_props(dc, cadence_uart_properties);
}
static const TypeInfo cadence_uart_info = {
diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c
index 9e1aa43bd3..626b68f2ec 100644
--- a/hw/char/cmsdk-apb-uart.c
+++ b/hw/char/cmsdk-apb-uart.c
@@ -389,7 +389,7 @@ static void cmsdk_apb_uart_class_init(ObjectClass *klass, void *data)
dc->realize = cmsdk_apb_uart_realize;
dc->vmsd = &cmsdk_apb_uart_vmstate;
dc->reset = cmsdk_apb_uart_reset;
- dc->props = cmsdk_apb_uart_properties;
+ device_class_set_props(dc, cmsdk_apb_uart_properties);
}
static const TypeInfo cmsdk_apb_uart_info = {
diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c
index 5c592e091b..c8d938efb5 100644
--- a/hw/char/debugcon.c
+++ b/hw/char/debugcon.c
@@ -125,7 +125,7 @@ static void debugcon_isa_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = debugcon_isa_realizefn;
- dc->props = debugcon_isa_properties;
+ device_class_set_props(dc, debugcon_isa_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c
index 033eba0a6a..e130cb4692 100644
--- a/hw/char/digic-uart.c
+++ b/hw/char/digic-uart.c
@@ -183,7 +183,7 @@ static void digic_uart_class_init(ObjectClass *klass, void *data)
dc->realize = digic_uart_realize;
dc->reset = digic_uart_reset;
dc->vmsd = &vmstate_digic_uart;
- dc->props = digic_uart_properties;
+ device_class_set_props(dc, digic_uart_properties);
}
static const TypeInfo digic_uart_info = {
diff --git a/hw/char/escc.c b/hw/char/escc.c
index c40c1d28f1..7d16ee8688 100644
--- a/hw/char/escc.c
+++ b/hw/char/escc.c
@@ -865,7 +865,7 @@ static void escc_class_init(ObjectClass *klass, void *data)
dc->reset = escc_reset;
dc->realize = escc_realize;
dc->vmsd = &vmstate_escc;
- dc->props = escc_properties;
+ device_class_set_props(dc, escc_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c
index f34f767c60..947bdb649a 100644
--- a/hw/char/etraxfs_ser.c
+++ b/hw/char/etraxfs_ser.c
@@ -244,7 +244,7 @@ static void etraxfs_ser_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = etraxfs_ser_reset;
- dc->props = etraxfs_ser_properties;
+ device_class_set_props(dc, etraxfs_ser_properties);
dc->realize = etraxfs_ser_realize;
}
diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
index 20d8509107..25d6588e41 100644
--- a/hw/char/exynos4210_uart.c
+++ b/hw/char/exynos4210_uart.c
@@ -710,7 +710,7 @@ static void exynos4210_uart_class_init(ObjectClass *klass, void *data)
dc->realize = exynos4210_uart_realize;
dc->reset = exynos4210_uart_reset;
- dc->props = exynos4210_uart_properties;
+ device_class_set_props(dc, exynos4210_uart_properties);
dc->vmsd = &vmstate_exynos4210_uart;
}
diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
index 8e59c3bc6e..16d0feac59 100644
--- a/hw/char/grlib_apbuart.c
+++ b/hw/char/grlib_apbuart.c
@@ -285,7 +285,7 @@ static void grlib_apbuart_class_init(ObjectClass *klass, void *data)
dc->realize = grlib_apbuart_realize;
dc->reset = grlib_apbuart_reset;
- dc->props = grlib_apbuart_properties;
+ device_class_set_props(dc, grlib_apbuart_properties);
}
static const TypeInfo grlib_apbuart_info = {
diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
index d09c210709..731b8fc64c 100644
--- a/hw/char/imx_serial.c
+++ b/hw/char/imx_serial.c
@@ -372,7 +372,7 @@ static void imx_serial_class_init(ObjectClass *klass, void *data)
dc->reset = imx_serial_reset_at_boot;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
dc->desc = "i.MX series UART";
- dc->props = imx_serial_properties;
+ device_class_set_props(dc, imx_serial_properties);
}
static const TypeInfo imx_serial_info = {
diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c
index 80e9dff701..d7c497b939 100644
--- a/hw/char/ipoctal232.c
+++ b/hw/char/ipoctal232.c
@@ -588,7 +588,7 @@ static void ipoctal_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
dc->desc = "GE IP-Octal 232 8-channel RS-232 IndustryPack";
- dc->props = ipoctal_properties;
+ device_class_set_props(dc, ipoctal_properties);
dc->vmsd = &vmstate_ipoctal;
}
diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
index da9dd5668b..3f34861233 100644
--- a/hw/char/lm32_juart.c
+++ b/hw/char/lm32_juart.c
@@ -146,7 +146,7 @@ static void lm32_juart_class_init(ObjectClass *klass, void *data)
dc->reset = juart_reset;
dc->vmsd = &vmstate_lm32_juart;
- dc->props = lm32_juart_properties;
+ device_class_set_props(dc, lm32_juart_properties);
dc->realize = lm32_juart_realize;
}
diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c
index 8d7a475c91..b0b1092889 100644
--- a/hw/char/lm32_uart.c
+++ b/hw/char/lm32_uart.c
@@ -293,7 +293,7 @@ static void lm32_uart_class_init(ObjectClass *klass, void *data)
dc->reset = uart_reset;
dc->vmsd = &vmstate_lm32_uart;
- dc->props = lm32_uart_properties;
+ device_class_set_props(dc, lm32_uart_properties);
dc->realize = lm32_uart_realize;
}
diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c
index 2de3680b5d..97e4bbc31a 100644
--- a/hw/char/mcf_uart.c
+++ b/hw/char/mcf_uart.c
@@ -320,7 +320,7 @@ static void mcf_uart_class_init(ObjectClass *oc, void *data)
dc->realize = mcf_uart_realize;
dc->reset = mcf_uart_reset;
- dc->props = mcf_uart_properties;
+ device_class_set_props(dc, mcf_uart_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c
index 1c7b61480e..1439efb42a 100644
--- a/hw/char/milkymist-uart.c
+++ b/hw/char/milkymist-uart.c
@@ -239,7 +239,7 @@ static void milkymist_uart_class_init(ObjectClass *klass, void *data)
dc->realize = milkymist_uart_realize;
dc->reset = milkymist_uart_reset;
dc->vmsd = &vmstate_milkymist_uart;
- dc->props = milkymist_uart_properties;
+ device_class_set_props(dc, milkymist_uart_properties);
}
static const TypeInfo milkymist_uart_info = {
diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c
index b67fd21089..d1fef77acd 100644
--- a/hw/char/nrf51_uart.c
+++ b/hw/char/nrf51_uart.c
@@ -314,7 +314,7 @@ static void nrf51_uart_class_init(ObjectClass *klass, void *data)
dc->reset = nrf51_uart_reset;
dc->realize = nrf51_uart_realize;
- dc->props = nrf51_uart_properties;
+ device_class_set_props(dc, nrf51_uart_properties);
dc->vmsd = &nrf51_uart_vmstate;
}
diff --git a/hw/char/parallel.c b/hw/char/parallel.c
index 40174eeda1..8dd67d1375 100644
--- a/hw/char/parallel.c
+++ b/hw/char/parallel.c
@@ -627,7 +627,7 @@ static void parallel_isa_class_initfn(ObjectClass *klass, void *data)
dc->realize = parallel_isa_realizefn;
dc->vmsd = &vmstate_parallel_isa;
- dc->props = parallel_isa_properties;
+ device_class_set_props(dc, parallel_isa_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index 23cd544cc5..13e784f9d9 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -356,7 +356,7 @@ static void pl011_class_init(ObjectClass *oc, void *data)
dc->realize = pl011_realize;
dc->vmsd = &vmstate_pl011;
- dc->props = pl011_properties;
+ device_class_set_props(dc, pl011_properties);
}
static const TypeInfo pl011_arm_info = {
diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
index 392606259d..c420dc066e 100644
--- a/hw/char/sclpconsole-lm.c
+++ b/hw/char/sclpconsole-lm.c
@@ -342,7 +342,7 @@ static void console_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
SCLPEventClass *ec = SCLP_EVENT_CLASS(klass);
- dc->props = console_properties;
+ device_class_set_props(dc, console_properties);
dc->reset = console_reset;
dc->vmsd = &vmstate_sclplmconsole;
ec->init = console_init;
diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
index da126f0133..1fa124dab9 100644
--- a/hw/char/sclpconsole.c
+++ b/hw/char/sclpconsole.c
@@ -258,7 +258,7 @@ static void console_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
SCLPEventClass *ec = SCLP_EVENT_CLASS(klass);
- dc->props = console_properties;
+ device_class_set_props(dc, console_properties);
dc->reset = console_reset;
dc->vmsd = &vmstate_sclpconsole;
ec->init = console_init;
diff --git a/hw/char/serial-isa.c b/hw/char/serial-isa.c
index db8644551e..f9b6eed783 100644
--- a/hw/char/serial-isa.c
+++ b/hw/char/serial-isa.c
@@ -106,7 +106,7 @@ static void serial_isa_class_initfn(ObjectClass *klass, void *data)
dc->realize = serial_isa_realizefn;
dc->vmsd = &vmstate_isa_serial;
- dc->props = serial_isa_properties;
+ device_class_set_props(dc, serial_isa_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c
index e343a1235c..1742cb77ec 100644
--- a/hw/char/serial-pci-multi.c
+++ b/hw/char/serial-pci-multi.c
@@ -161,7 +161,7 @@ static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data)
pc->revision = 1;
pc->class_id = PCI_CLASS_COMMUNICATION_SERIAL;
dc->vmsd = &vmstate_pci_multi_serial;
- dc->props = multi_2x_serial_pci_properties;
+ device_class_set_props(dc, multi_2x_serial_pci_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
@@ -176,7 +176,7 @@ static void multi_4x_serial_pci_class_initfn(ObjectClass *klass, void *data)
pc->revision = 1;
pc->class_id = PCI_CLASS_COMMUNICATION_SERIAL;
dc->vmsd = &vmstate_pci_multi_serial;
- dc->props = multi_4x_serial_pci_properties;
+ device_class_set_props(dc, multi_4x_serial_pci_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/char/serial-pci.c b/hw/char/serial-pci.c
index b6a73c65a9..743552c56b 100644
--- a/hw/char/serial-pci.c
+++ b/hw/char/serial-pci.c
@@ -100,7 +100,7 @@ static void serial_pci_class_initfn(ObjectClass *klass, void *data)
pc->revision = 1;
pc->class_id = PCI_CLASS_COMMUNICATION_SERIAL;
dc->vmsd = &vmstate_pci_serial;
- dc->props = serial_pci_properties;
+ device_class_set_props(dc, serial_pci_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/char/serial.c b/hw/char/serial.c
index d167c43d40..9298881af9 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -1044,7 +1044,7 @@ static void serial_class_init(ObjectClass *klass, void* data)
dc->realize = serial_realize;
dc->unrealize = serial_unrealize;
dc->vmsd = &vmstate_serial;
- dc->props = serial_properties;
+ device_class_set_props(dc, serial_properties);
}
static const TypeInfo serial_info = {
@@ -1159,7 +1159,7 @@ static void serial_mm_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
- dc->props = serial_mm_properties;
+ device_class_set_props(dc, serial_mm_properties);
dc->realize = serial_mm_realize;
}
diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
index 8f4d9fe472..ecb94f5673 100644
--- a/hw/char/spapr_vty.c
+++ b/hw/char/spapr_vty.c
@@ -193,7 +193,7 @@ static void spapr_vty_class_init(ObjectClass *klass, void *data)
k->dt_type = "serial";
k->dt_compatible = "hvterm1";
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
- dc->props = spapr_vty_properties;
+ device_class_set_props(dc, spapr_vty_properties);
dc->vmsd = &vmstate_spapr_vty;
}
diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c
index 4ec843de38..0d661be6d3 100644
--- a/hw/char/stm32f2xx_usart.c
+++ b/hw/char/stm32f2xx_usart.c
@@ -222,7 +222,7 @@ static void stm32f2xx_usart_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = stm32f2xx_usart_reset;
- dc->props = stm32f2xx_usart_properties;
+ device_class_set_props(dc, stm32f2xx_usart_properties);
dc->realize = stm32f2xx_usart_realize;
}
diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c
index f7aba12565..2c47ebf007 100644
--- a/hw/char/terminal3270.c
+++ b/hw/char/terminal3270.c
@@ -288,7 +288,7 @@ static void terminal_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
EmulatedCcw3270Class *ck = EMULATED_CCW_3270_CLASS(klass);
- dc->props = terminal_properties;
+ device_class_set_props(dc, terminal_properties);
dc->vmsd = &terminal3270_vmstate;
ck->init = terminal_init;
ck->read_payload_3270 = read_payload_3270;
diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
index a7d34fe0ed..b010c21de4 100644
--- a/hw/char/virtio-console.c
+++ b/hw/char/virtio-console.c
@@ -287,7 +287,7 @@ static void virtserialport_class_init(ObjectClass *klass, void *data)
k->set_guest_connected = set_guest_connected;
k->enable_backend = virtconsole_enable_backend;
k->guest_writable = guest_writable;
- dc->props = virtserialport_properties;
+ device_class_set_props(dc, virtserialport_properties);
}
static const TypeInfo virtserialport_info = {
diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
index e1cbce3ba3..941ed5aca9 100644
--- a/hw/char/virtio-serial-bus.c
+++ b/hw/char/virtio-serial-bus.c
@@ -1110,7 +1110,7 @@ static void virtio_serial_port_class_init(ObjectClass *klass, void *data)
k->bus_type = TYPE_VIRTIO_SERIAL_BUS;
k->realize = virtser_port_device_realize;
k->unrealize = virtser_port_device_unrealize;
- k->props = virtser_props;
+ device_class_set_props(k, virtser_props);
}
static const TypeInfo virtio_serial_port_type_info = {
@@ -1179,7 +1179,7 @@ static void virtio_serial_class_init(ObjectClass *klass, void *data)
QLIST_INIT(&vserdevices.devices);
- dc->props = virtio_serial_properties;
+ device_class_set_props(dc, virtio_serial_properties);
dc->vmsd = &vmstate_virtio_console;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
vdc->realize = virtio_serial_device_realize;
diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
index aa6bf02e21..c6512285d7 100644
--- a/hw/char/xilinx_uartlite.c
+++ b/hw/char/xilinx_uartlite.c
@@ -236,7 +236,7 @@ static void xilinx_uartlite_class_init(ObjectClass *klass, void *data)
dc->reset = xilinx_uartlite_reset;
dc->realize = xilinx_uartlite_realize;
- dc->props = xilinx_uartlite_properties;
+ device_class_set_props(dc, xilinx_uartlite_properties);
}
static const TypeInfo xilinx_uartlite_info = {
diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
index 0edd9e635d..a522b7297d 100644
--- a/hw/core/Makefile.objs
+++ b/hw/core/Makefile.objs
@@ -1,31 +1,32 @@
# core qdev-related obj files, also used by *-user:
common-obj-y += qdev.o qdev-properties.o
-common-obj-y += bus.o reset.o
-common-obj-$(CONFIG_SOFTMMU) += qdev-fw.o
-common-obj-$(CONFIG_SOFTMMU) += fw-path-provider.o
+common-obj-y += bus.o
+common-obj-y += cpu.o
+common-obj-y += hotplug.o
+common-obj-y += vmstate-if.o
# irq.o needed for qdev GPIO handling:
common-obj-y += irq.o
-common-obj-y += hotplug.o
+
+common-obj-$(CONFIG_SOFTMMU) += reset.o
+common-obj-$(CONFIG_SOFTMMU) += qdev-fw.o
+common-obj-$(CONFIG_SOFTMMU) += fw-path-provider.o
common-obj-$(CONFIG_SOFTMMU) += nmi.o
common-obj-$(CONFIG_SOFTMMU) += vm-change-state-handler.o
-common-obj-y += cpu.o
-common-obj-y += vmstate-if.o
+common-obj-$(CONFIG_SOFTMMU) += qdev-properties-system.o
+common-obj-$(CONFIG_SOFTMMU) += sysbus.o
+common-obj-$(CONFIG_SOFTMMU) += machine.o
+common-obj-$(CONFIG_SOFTMMU) += null-machine.o
+common-obj-$(CONFIG_SOFTMMU) += loader.o
+common-obj-$(CONFIG_SOFTMMU) += machine-hmp-cmds.o
+obj-$(CONFIG_SOFTMMU) += machine-qmp-cmds.o
+obj-$(CONFIG_SOFTMMU) += numa.o
common-obj-$(CONFIG_EMPTY_SLOT) += empty_slot.o
common-obj-$(CONFIG_XILINX_AXI) += stream.o
common-obj-$(CONFIG_PTIMER) += ptimer.o
-common-obj-$(CONFIG_SOFTMMU) += sysbus.o
-common-obj-$(CONFIG_SOFTMMU) += machine.o
-common-obj-$(CONFIG_SOFTMMU) += loader.o
common-obj-$(CONFIG_FITLOADER) += loader-fit.o
-common-obj-$(CONFIG_SOFTMMU) += qdev-properties-system.o
common-obj-$(CONFIG_REGISTER) += register.o
common-obj-$(CONFIG_OR_IRQ) += or-irq.o
common-obj-$(CONFIG_SPLIT_IRQ) += split-irq.o
common-obj-$(CONFIG_PLATFORM_BUS) += platform-bus.o
common-obj-$(CONFIG_GENERIC_LOADER) += generic-loader.o
-common-obj-$(CONFIG_SOFTMMU) += null-machine.o
-
-obj-$(CONFIG_SOFTMMU) += machine-qmp-cmds.o
-obj-$(CONFIG_SOFTMMU) += numa.o
-common-obj-$(CONFIG_SOFTMMU) += machine-hmp-cmds.o
diff --git a/hw/core/cpu.c b/hw/core/cpu.c
index db1a03c6bb..fe65ca62ac 100644
--- a/hw/core/cpu.c
+++ b/hw/core/cpu.c
@@ -239,6 +239,14 @@ void cpu_dump_statistics(CPUState *cpu, int flags)
}
}
+void cpu_class_set_parent_reset(CPUClass *cc,
+ void (*child_reset)(CPUState *cpu),
+ void (**parent_reset)(CPUState *cpu))
+{
+ *parent_reset = cc->reset;
+ cc->reset = child_reset;
+}
+
void cpu_reset(CPUState *cpu)
{
CPUClass *klass = CPU_GET_CLASS(cpu);
@@ -432,7 +440,7 @@ static void cpu_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_CPU, dc->categories);
dc->realize = cpu_common_realizefn;
dc->unrealize = cpu_common_unrealizefn;
- dc->props = cpu_common_props;
+ device_class_set_props(dc, cpu_common_props);
/*
* Reason: CPUs still need special care by board code: wiring up
* IRQs, adding reset handlers, halting non-first CPUs, ...
diff --git a/hw/core/generic-loader.c b/hw/core/generic-loader.c
index 4b1fc86a06..e7eb57e860 100644
--- a/hw/core/generic-loader.c
+++ b/hw/core/generic-loader.c
@@ -201,7 +201,7 @@ static void generic_loader_class_init(ObjectClass *klass, void *data)
*/
dc->realize = generic_loader_realize;
dc->unrealize = generic_loader_unrealize;
- dc->props = generic_loader_props;
+ device_class_set_props(dc, generic_loader_props);
dc->desc = "Generic Loader";
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/core/or-irq.c b/hw/core/or-irq.c
index 18d63831cd..4bbdbcb321 100644
--- a/hw/core/or-irq.c
+++ b/hw/core/or-irq.c
@@ -125,7 +125,7 @@ static void or_irq_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = or_irq_reset;
- dc->props = or_irq_properties;
+ device_class_set_props(dc, or_irq_properties);
dc->realize = or_irq_realize;
dc->vmsd = &vmstate_or_irq;
diff --git a/hw/core/platform-bus.c b/hw/core/platform-bus.c
index edb0da1de8..22c5f76dd0 100644
--- a/hw/core/platform-bus.c
+++ b/hw/core/platform-bus.c
@@ -211,7 +211,7 @@ static void platform_bus_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = platform_bus_realize;
- dc->props = platform_bus_properties;
+ device_class_set_props(dc, platform_bus_properties);
}
static const TypeInfo platform_bus_info = {
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 6ca7697599..7f93bfeb88 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -73,12 +73,10 @@ static void set_enum(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
}
-static void set_default_value_enum(Object *obj, const Property *prop)
+static void set_default_value_enum(ObjectProperty *op, const Property *prop)
{
- object_property_set_str(obj,
- qapi_enum_lookup(prop->info->enum_table,
- prop->defval.i),
- prop->name, &error_abort);
+ object_property_set_default_str(op,
+ qapi_enum_lookup(prop->info->enum_table, prop->defval.i));
}
/* Bit */
@@ -132,9 +130,9 @@ static void prop_set_bit(Object *obj, Visitor *v, const char *name,
bit_prop_set(dev, prop, value);
}
-static void set_default_value_bool(Object *obj, const Property *prop)
+static void set_default_value_bool(ObjectProperty *op, const Property *prop)
{
- object_property_set_bool(obj, prop->defval.u, prop->name, &error_abort);
+ object_property_set_default_bool(op, prop->defval.u);
}
const PropertyInfo qdev_prop_bit = {
@@ -265,14 +263,14 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_uint8(v, name, ptr, errp);
}
-static void set_default_value_int(Object *obj, const Property *prop)
+static void set_default_value_int(ObjectProperty *op, const Property *prop)
{
- object_property_set_int(obj, prop->defval.i, prop->name, &error_abort);
+ object_property_set_default_int(op, prop->defval.i);
}
-static void set_default_value_uint(Object *obj, const Property *prop)
+static void set_default_value_uint(ObjectProperty *op, const Property *prop)
{
- object_property_set_uint(obj, prop->defval.u, prop->name, &error_abort);
+ object_property_set_default_uint(op, prop->defval.u);
}
const PropertyInfo qdev_prop_uint8 = {
@@ -925,9 +923,9 @@ static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
g_free(str);
}
-static void set_default_uuid_auto(Object *obj, const Property *prop)
+static void set_default_uuid_auto(ObjectProperty *op, const Property *prop)
{
- object_property_set_str(obj, UUID_VALUE_AUTO, prop->name, &error_abort);
+ object_property_set_default_str(op, UUID_VALUE_AUTO);
}
const PropertyInfo qdev_prop_uuid = {
@@ -1071,7 +1069,7 @@ static Property *qdev_prop_find(DeviceState *dev, const char *name)
/* device properties */
class = object_get_class(OBJECT(dev));
do {
- prop = qdev_prop_walk(DEVICE_CLASS(class)->props, name);
+ prop = qdev_prop_walk(DEVICE_CLASS(class)->props_, name);
if (prop) {
return prop;
}
@@ -1243,15 +1241,13 @@ const PropertyInfo qdev_prop_size = {
/* --- object link property --- */
-static void create_link_property(Object *obj, Property *prop, Error **errp)
+static void create_link_property(ObjectClass *oc, Property *prop, Error **errp)
{
- Object **child = qdev_get_prop_ptr(DEVICE(obj), prop);
-
- object_property_add_link(obj, prop->name, prop->link_type,
- child,
- qdev_prop_allow_set_link_before_realize,
- OBJ_PROP_LINK_STRONG,
- errp);
+ object_class_property_add_link(oc, prop->name, prop->link_type,
+ prop->offset,
+ qdev_prop_allow_set_link_before_realize,
+ OBJ_PROP_LINK_STRONG,
+ errp);
}
const PropertyInfo qdev_prop_link = {
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 58e87d336d..05c31df52d 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -678,13 +678,11 @@ static void qdev_get_legacy_property(Object *obj, Visitor *v,
}
/**
- * qdev_property_add_legacy:
+ * qdev_class_add_legacy_property:
* @dev: Device to add the property to.
* @prop: The qdev property definition.
- * @errp: location to store error information.
*
* Add a legacy QOM property to @dev for qdev property @prop.
- * On error, store error in @errp.
*
* Legacy properties are string versions of QOM properties. The format of
* the string depends on the property type. Legacy properties are only
@@ -693,67 +691,66 @@ static void qdev_get_legacy_property(Object *obj, Visitor *v,
* Do not use this in new code! QOM Properties added through this interface
* will be given names in the "legacy" namespace.
*/
-static void qdev_property_add_legacy(DeviceState *dev, Property *prop,
- Error **errp)
+static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop)
{
- gchar *name;
+ g_autofree char *name = NULL;
/* Register pointer properties as legacy properties */
if (!prop->info->print && prop->info->get) {
return;
}
- if (prop->info->create) {
- return;
- }
-
name = g_strdup_printf("legacy-%s", prop->name);
- object_property_add(OBJECT(dev), name, "str",
- prop->info->print ? qdev_get_legacy_property : prop->info->get,
- NULL,
- NULL,
- prop, errp);
-
- g_free(name);
+ object_class_property_add(OBJECT_CLASS(dc), name, "str",
+ prop->info->print ? qdev_get_legacy_property : prop->info->get,
+ NULL, NULL, prop, &error_abort);
}
-/**
- * qdev_property_add_static:
- * @dev: Device to add the property to.
- * @prop: The qdev property definition.
- * @errp: location to store error information.
- *
- * Add a static QOM property to @dev for qdev property @prop.
- * On error, store error in @errp. Static properties access data in a struct.
- * The type of the QOM property is derived from prop->info.
- */
-void qdev_property_add_static(DeviceState *dev, Property *prop,
- Error **errp)
+void qdev_property_add_static(DeviceState *dev, Property *prop)
{
- Error *local_err = NULL;
Object *obj = OBJECT(dev);
+ ObjectProperty *op;
- if (prop->info->create) {
- prop->info->create(obj, prop, &local_err);
- } else {
- object_property_add(obj, prop->name, prop->info->name,
- prop->info->get, prop->info->set,
- prop->info->release,
- prop, &local_err);
- }
+ assert(!prop->info->create);
- if (local_err) {
- error_propagate(errp, local_err);
- return;
- }
+ op = object_property_add(obj, prop->name, prop->info->name,
+ prop->info->get, prop->info->set,
+ prop->info->release,
+ prop, &error_abort);
object_property_set_description(obj, prop->name,
prop->info->description,
&error_abort);
if (prop->set_default) {
- prop->info->set_default_value(obj, prop);
+ prop->info->set_default_value(op, prop);
+ if (op->init) {
+ op->init(obj, op);
+ }
+ }
+}
+
+static void qdev_class_add_property(DeviceClass *klass, Property *prop)
+{
+ ObjectClass *oc = OBJECT_CLASS(klass);
+
+ if (prop->info->create) {
+ prop->info->create(oc, prop, &error_abort);
+ } else {
+ ObjectProperty *op;
+
+ op = object_class_property_add(oc,
+ prop->name, prop->info->name,
+ prop->info->get, prop->info->set,
+ prop->info->release,
+ prop, &error_abort);
+ if (prop->set_default) {
+ prop->info->set_default_value(op, prop);
+ }
}
+ object_class_property_set_description(oc, prop->name,
+ prop->info->description,
+ &error_abort);
}
/* @qdev_alias_all_properties - Add alias properties to the source object for
@@ -768,7 +765,7 @@ void qdev_alias_all_properties(DeviceState *target, Object *source)
do {
DeviceClass *dc = DEVICE_CLASS(class);
- for (prop = dc->props; prop && prop->name; prop++) {
+ for (prop = dc->props_; prop && prop->name; prop++) {
object_property_add_alias(source, prop->name,
OBJECT(target), prop->name,
&error_abort);
@@ -777,32 +774,6 @@ void qdev_alias_all_properties(DeviceState *target, Object *source)
} while (class != object_class_by_name(TYPE_DEVICE));
}
-static int qdev_add_hotpluggable_device(Object *obj, void *opaque)
-{
- GSList **list = opaque;
- DeviceState *dev = (DeviceState *)object_dynamic_cast(OBJECT(obj),
- TYPE_DEVICE);
-
- if (dev == NULL) {
- return 0;
- }
-
- if (dev->realized && object_property_get_bool(obj, "hotpluggable", NULL)) {
- *list = g_slist_append(*list, dev);
- }
-
- return 0;
-}
-
-GSList *qdev_build_hotpluggable_device_list(Object *peripheral)
-{
- GSList *list = NULL;
-
- object_child_foreach(peripheral, qdev_add_hotpluggable_device, &list);
-
- return list;
-}
-
static bool device_get_realized(Object *obj, Error **errp)
{
DeviceState *dev = DEVICE(obj);
@@ -975,8 +946,6 @@ static bool device_get_hotplugged(Object *obj, Error **errp)
static void device_initfn(Object *obj)
{
DeviceState *dev = DEVICE(obj);
- ObjectClass *class;
- Property *prop;
if (qdev_hotplug) {
dev->hotplugged = 1;
@@ -987,26 +956,6 @@ static void device_initfn(Object *obj)
dev->realized = false;
dev->allow_unplug_during_migration = false;
- object_property_add_bool(obj, "realized",
- device_get_realized, device_set_realized, NULL);
- object_property_add_bool(obj, "hotpluggable",
- device_get_hotpluggable, NULL, NULL);
- object_property_add_bool(obj, "hotplugged",
- device_get_hotplugged, NULL,
- &error_abort);
-
- class = object_get_class(OBJECT(dev));
- do {
- for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) {
- qdev_property_add_legacy(dev, prop, &error_abort);
- qdev_property_add_static(dev, prop, &error_abort);
- }
- class = object_class_get_parent(class);
- } while (class != object_class_by_name(TYPE_DEVICE));
-
- object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS,
- (Object **)&dev->parent_bus, NULL, 0,
- &error_abort);
QLIST_INIT(&dev->gpios);
}
@@ -1056,7 +1005,7 @@ static void device_class_base_init(ObjectClass *class, void *data)
/* We explicitly look up properties in the superclasses,
* so do not propagate them to the subclasses.
*/
- klass->props = NULL;
+ klass->props_ = NULL;
}
static void device_unparent(Object *obj)
@@ -1102,6 +1051,30 @@ static void device_class_init(ObjectClass *class, void *data)
dc->hotpluggable = true;
dc->user_creatable = true;
vc->get_id = device_vmstate_if_get_id;
+
+ object_class_property_add_bool(class, "realized",
+ device_get_realized, device_set_realized,
+ &error_abort);
+ object_class_property_add_bool(class, "hotpluggable",
+ device_get_hotpluggable, NULL,
+ &error_abort);
+ object_class_property_add_bool(class, "hotplugged",
+ device_get_hotplugged, NULL,
+ &error_abort);
+ object_class_property_add_link(class, "parent_bus", TYPE_BUS,
+ offsetof(DeviceState, parent_bus), NULL, 0,
+ &error_abort);
+}
+
+void device_class_set_props(DeviceClass *dc, Property *props)
+{
+ Property *prop;
+
+ dc->props_ = props;
+ for (prop = props; prop && prop->name; prop++) {
+ qdev_class_add_legacy_property(dc, prop);
+ qdev_class_add_property(dc, prop);
+ }
}
void device_class_set_parent_reset(DeviceClass *dc,
diff --git a/hw/core/split-irq.c b/hw/core/split-irq.c
index b5acc669fb..3b90af2e8f 100644
--- a/hw/core/split-irq.c
+++ b/hw/core/split-irq.c
@@ -69,7 +69,7 @@ static void split_irq_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
/* No state to reset or migrate */
- dc->props = split_irq_properties;
+ device_class_set_props(dc, split_irq_properties);
dc->realize = split_irq_realize;
/* Reason: Needs to be wired up to work */
diff --git a/hw/cpu/a15mpcore.c b/hw/cpu/a15mpcore.c
index 7e9983aa19..4f659115b6 100644
--- a/hw/cpu/a15mpcore.c
+++ b/hw/cpu/a15mpcore.c
@@ -164,7 +164,7 @@ static void a15mp_priv_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = a15mp_priv_realize;
- dc->props = a15mp_priv_properties;
+ device_class_set_props(dc, a15mp_priv_properties);
/* We currently have no savable state */
}
diff --git a/hw/cpu/a9mpcore.c b/hw/cpu/a9mpcore.c
index 6872a3a00a..1f8bc8a196 100644
--- a/hw/cpu/a9mpcore.c
+++ b/hw/cpu/a9mpcore.c
@@ -175,7 +175,7 @@ static void a9mp_priv_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = a9mp_priv_realize;
- dc->props = a9mp_priv_properties;
+ device_class_set_props(dc, a9mp_priv_properties);
}
static const TypeInfo a9mp_priv_info = {
diff --git a/hw/cpu/arm11mpcore.c b/hw/cpu/arm11mpcore.c
index e78f5d080c..2e3e87cc1b 100644
--- a/hw/cpu/arm11mpcore.c
+++ b/hw/cpu/arm11mpcore.c
@@ -156,7 +156,7 @@ static void mpcore_priv_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = mpcore_priv_realize;
- dc->props = mpcore_priv_properties;
+ device_class_set_props(dc, mpcore_priv_properties);
}
static const TypeInfo mpcore_priv_info = {
diff --git a/hw/cpu/cluster.c b/hw/cpu/cluster.c
index 349a883261..e444b7c29d 100644
--- a/hw/cpu/cluster.c
+++ b/hw/cpu/cluster.c
@@ -78,7 +78,7 @@ static void cpu_cluster_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = cpu_cluster_properties;
+ device_class_set_props(dc, cpu_cluster_properties);
dc->realize = cpu_cluster_realize;
/* This is not directly for users, CPU children must be attached by code */
diff --git a/hw/cpu/realview_mpcore.c b/hw/cpu/realview_mpcore.c
index ae2c9913f6..cc2767c716 100644
--- a/hw/cpu/realview_mpcore.c
+++ b/hw/cpu/realview_mpcore.c
@@ -125,7 +125,7 @@ static void mpcore_rirq_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = realview_mpcore_realize;
- dc->props = mpcore_rirq_properties;
+ device_class_set_props(dc, mpcore_rirq_properties);
}
static const TypeInfo mpcore_rirq_info = {
diff --git a/hw/display/ati.c b/hw/display/ati.c
index db3b254316..58ec8291d4 100644
--- a/hw/display/ati.c
+++ b/hw/display/ati.c
@@ -980,7 +980,7 @@ static void ati_vga_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
dc->reset = ati_vga_reset;
- dc->props = ati_vga_properties;
+ device_class_set_props(dc, ati_vga_properties);
dc->hotpluggable = false;
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c
index 85aaa54330..d6bf3374a6 100644
--- a/hw/display/bcm2835_fb.c
+++ b/hw/display/bcm2835_fb.c
@@ -451,7 +451,7 @@ static void bcm2835_fb_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = bcm2835_fb_props;
+ device_class_set_props(dc, bcm2835_fb_props);
dc->realize = bcm2835_fb_realize;
dc->reset = bcm2835_fb_reset;
dc->vmsd = &vmstate_bcm2835_fb;
diff --git a/hw/display/bochs-display.c b/hw/display/bochs-display.c
index 215db9a231..62085f9fc0 100644
--- a/hw/display/bochs-display.c
+++ b/hw/display/bochs-display.c
@@ -364,7 +364,7 @@ static void bochs_display_class_init(ObjectClass *klass, void *data)
k->romfile = "vgabios-bochs-display.bin";
k->exit = bochs_display_exit;
dc->vmsd = &vmstate_bochs_display;
- dc->props = bochs_display_properties;
+ device_class_set_props(dc, bochs_display_properties);
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
}
diff --git a/hw/display/cg3.c b/hw/display/cg3.c
index f90baae4de..4fb67c6b1c 100644
--- a/hw/display/cg3.c
+++ b/hw/display/cg3.c
@@ -382,7 +382,7 @@ static void cg3_class_init(ObjectClass *klass, void *data)
dc->realize = cg3_realizefn;
dc->reset = cg3_reset;
dc->vmsd = &vmstate_cg3;
- dc->props = cg3_properties;
+ device_class_set_props(dc, cg3_properties);
}
static const TypeInfo cg3_info = {
diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c
index cd283e53b4..0d391e1300 100644
--- a/hw/display/cirrus_vga.c
+++ b/hw/display/cirrus_vga.c
@@ -3031,7 +3031,7 @@ static void cirrus_vga_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
dc->desc = "Cirrus CLGD 54xx VGA";
dc->vmsd = &vmstate_pci_cirrus_vga;
- dc->props = pci_vga_cirrus_properties;
+ device_class_set_props(dc, pci_vga_cirrus_properties);
dc->hotpluggable = false;
}
diff --git a/hw/display/cirrus_vga_isa.c b/hw/display/cirrus_vga_isa.c
index 7ef8e59224..825ba57298 100644
--- a/hw/display/cirrus_vga_isa.c
+++ b/hw/display/cirrus_vga_isa.c
@@ -80,7 +80,7 @@ static void isa_cirrus_vga_class_init(ObjectClass *klass, void *data)
dc->vmsd = &vmstate_cirrus_vga;
dc->realize = isa_cirrus_vga_realizefn;
- dc->props = isa_cirrus_vga_properties;
+ device_class_set_props(dc, isa_cirrus_vga_properties);
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
}
diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c
index 839d26eca1..55185c95c6 100644
--- a/hw/display/g364fb.c
+++ b/hw/display/g364fb.c
@@ -526,7 +526,7 @@ static void g364fb_sysbus_class_init(ObjectClass *klass, void *data)
dc->desc = "G364 framebuffer";
dc->reset = g364fb_sysbus_reset;
dc->vmsd = &vmstate_g364fb;
- dc->props = g364fb_sysbus_properties;
+ device_class_set_props(dc, g364fb_sysbus_properties);
}
static const TypeInfo g364fb_sysbus_info = {
diff --git a/hw/display/i2c-ddc.c b/hw/display/i2c-ddc.c
index fc70b7930c..13eb529fc1 100644
--- a/hw/display/i2c-ddc.c
+++ b/hw/display/i2c-ddc.c
@@ -107,7 +107,7 @@ static void i2c_ddc_class_init(ObjectClass *oc, void *data)
dc->reset = i2c_ddc_reset;
dc->vmsd = &vmstate_i2c_ddc;
- dc->props = i2c_ddc_properties;
+ device_class_set_props(dc, i2c_ddc_properties);
isc->event = i2c_ddc_event;
isc->recv = i2c_ddc_rx;
isc->send = i2c_ddc_tx;
diff --git a/hw/display/macfb.c b/hw/display/macfb.c
index f4fa8e3206..8bff16d535 100644
--- a/hw/display/macfb.c
+++ b/hw/display/macfb.c
@@ -437,7 +437,7 @@ static void macfb_sysbus_class_init(ObjectClass *klass, void *data)
dc->desc = "SysBus Macintosh framebuffer";
dc->reset = macfb_sysbus_reset;
dc->vmsd = &vmstate_macfb;
- dc->props = macfb_sysbus_properties;
+ device_class_set_props(dc, macfb_sysbus_properties);
}
static void macfb_nubus_class_init(ObjectClass *klass, void *data)
@@ -450,7 +450,7 @@ static void macfb_nubus_class_init(ObjectClass *klass, void *data)
dc->desc = "Nubus Macintosh framebuffer";
dc->reset = macfb_nubus_reset;
dc->vmsd = &vmstate_macfb;
- dc->props = macfb_nubus_properties;
+ device_class_set_props(dc, macfb_nubus_properties);
}
static TypeInfo macfb_sysbus_info = {
diff --git a/hw/display/milkymist-vgafb.c b/hw/display/milkymist-vgafb.c
index 8b0da4660a..6a6441e6ea 100644
--- a/hw/display/milkymist-vgafb.c
+++ b/hw/display/milkymist-vgafb.c
@@ -341,7 +341,7 @@ static void milkymist_vgafb_class_init(ObjectClass *klass, void *data)
dc->reset = milkymist_vgafb_reset;
dc->vmsd = &vmstate_milkymist_vgafb;
- dc->props = milkymist_vgafb_properties;
+ device_class_set_props(dc, milkymist_vgafb_properties);
dc->realize = milkymist_vgafb_realize;
}
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
index 6d43b7433c..944c02ce56 100644
--- a/hw/display/qxl.c
+++ b/hw/display/qxl.c
@@ -2478,7 +2478,7 @@ static void qxl_pci_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
dc->reset = qxl_reset_handler;
dc->vmsd = &qxl_vmstate;
- dc->props = qxl_properties;
+ device_class_set_props(dc, qxl_properties);
}
static const TypeInfo qxl_pci_type_info = {
diff --git a/hw/display/ramfb-standalone.c b/hw/display/ramfb-standalone.c
index 1f72450303..d76a9d0fe2 100644
--- a/hw/display/ramfb-standalone.c
+++ b/hw/display/ramfb-standalone.c
@@ -52,7 +52,7 @@ static void ramfb_class_initfn(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
dc->realize = ramfb_realizefn;
- dc->props = ramfb_properties;
+ device_class_set_props(dc, ramfb_properties);
dc->desc = "ram framebuffer standalone device";
dc->user_creatable = true;
}
diff --git a/hw/display/sm501.c b/hw/display/sm501.c
index 66a1bfbe60..de0ab9d977 100644
--- a/hw/display/sm501.c
+++ b/hw/display/sm501.c
@@ -1995,7 +1995,7 @@ static void sm501_sysbus_class_init(ObjectClass *klass, void *data)
dc->realize = sm501_realize_sysbus;
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
dc->desc = "SM501 Multimedia Companion";
- dc->props = sm501_sysbus_properties;
+ device_class_set_props(dc, sm501_sysbus_properties);
dc->reset = sm501_reset_sysbus;
dc->vmsd = &vmstate_sm501_sysbus;
}
@@ -2085,7 +2085,7 @@ static void sm501_pci_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_DISPLAY_OTHER;
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
dc->desc = "SM501 Display Controller";
- dc->props = sm501_pci_properties;
+ device_class_set_props(dc, sm501_pci_properties);
dc->reset = sm501_reset_pci;
dc->hotpluggable = false;
dc->vmsd = &vmstate_sm501_pci;
diff --git a/hw/display/tcx.c b/hw/display/tcx.c
index 14e829d3fa..ca458f94fe 100644
--- a/hw/display/tcx.c
+++ b/hw/display/tcx.c
@@ -410,6 +410,7 @@ static uint64_t tcx_dac_readl(void *opaque, hwaddr addr,
case 2:
val = s->b[s->dac_index] << 24;
s->dac_index = (s->dac_index + 1) & 0xff; /* Index autoincrement */
+ /* fall through */
default:
s->dac_state = 0;
break;
@@ -451,6 +452,7 @@ static void tcx_dac_writel(void *opaque, hwaddr addr, uint64_t val,
s->b[index] = val >> 24;
update_palette_entries(s, index, index + 1);
s->dac_index = (s->dac_index + 1) & 0xff; /* Index autoincrement */
+ /* fall through */
default:
s->dac_state = 0;
break;
@@ -891,7 +893,7 @@ static void tcx_class_init(ObjectClass *klass, void *data)
dc->realize = tcx_realizefn;
dc->reset = tcx_reset;
dc->vmsd = &vmstate_tcx;
- dc->props = tcx_properties;
+ device_class_set_props(dc, tcx_properties);
}
static const TypeInfo tcx_info = {
diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c
index 08a2730db5..0633ed382c 100644
--- a/hw/display/vga-isa.c
+++ b/hw/display/vga-isa.c
@@ -95,7 +95,7 @@ static void vga_isa_class_initfn(ObjectClass *klass, void *data)
dc->realize = vga_isa_realizefn;
dc->reset = vga_isa_reset;
dc->vmsd = &vmstate_vga_common;
- dc->props = vga_isa_properties;
+ device_class_set_props(dc, vga_isa_properties);
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
}
diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c
index cfe095713e..b346324673 100644
--- a/hw/display/vga-pci.c
+++ b/hw/display/vga-pci.c
@@ -383,7 +383,7 @@ static void vga_class_init(ObjectClass *klass, void *data)
k->realize = pci_std_vga_realize;
k->romfile = "vgabios-stdvga.bin";
k->class_id = PCI_CLASS_DISPLAY_VGA;
- dc->props = vga_pci_properties;
+ device_class_set_props(dc, vga_pci_properties);
dc->hotpluggable = false;
}
@@ -395,7 +395,7 @@ static void secondary_class_init(ObjectClass *klass, void *data)
k->realize = pci_secondary_vga_realize;
k->exit = pci_secondary_vga_exit;
k->class_id = PCI_CLASS_DISPLAY_OTHER;
- dc->props = secondary_pci_properties;
+ device_class_set_props(dc, secondary_pci_properties);
dc->reset = pci_secondary_vga_reset;
}
diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c
index 279877886e..f0c7c6fb9a 100644
--- a/hw/display/vhost-user-gpu.c
+++ b/hw/display/vhost-user-gpu.c
@@ -588,7 +588,7 @@ vhost_user_gpu_class_init(ObjectClass *klass, void *data)
vdc->get_config = vhost_user_gpu_get_config;
vdc->set_config = vhost_user_gpu_set_config;
- dc->props = vhost_user_gpu_properties;
+ device_class_set_props(dc, vhost_user_gpu_properties);
}
static const TypeInfo vhost_user_gpu_info = {
diff --git a/hw/display/virtio-gpu-pci.c b/hw/display/virtio-gpu-pci.c
index 25e4038874..3d152ff5c8 100644
--- a/hw/display/virtio-gpu-pci.c
+++ b/hw/display/virtio-gpu-pci.c
@@ -56,7 +56,7 @@ static void virtio_gpu_pci_base_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
- dc->props = virtio_gpu_pci_base_properties;
+ device_class_set_props(dc, virtio_gpu_pci_base_properties);
dc->hotpluggable = false;
k->realize = virtio_gpu_pci_base_realize;
pcidev_k->class_id = PCI_CLASS_DISPLAY_OTHER;
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 28e868c021..5f0dd7c150 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -1254,7 +1254,7 @@ static void virtio_gpu_class_init(ObjectClass *klass, void *data)
vdc->set_config = virtio_gpu_set_config;
dc->vmsd = &vmstate_virtio_gpu;
- dc->props = virtio_gpu_properties;
+ device_class_set_props(dc, virtio_gpu_properties);
}
static const TypeInfo virtio_gpu_info = {
diff --git a/hw/display/virtio-vga.c b/hw/display/virtio-vga.c
index cc6e66ea1c..2b4c2aa126 100644
--- a/hw/display/virtio-vga.c
+++ b/hw/display/virtio-vga.c
@@ -184,7 +184,7 @@ static void virtio_vga_base_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
- dc->props = virtio_vga_base_properties;
+ device_class_set_props(dc, virtio_vga_base_properties);
dc->vmsd = &vmstate_virtio_vga_base;
dc->hotpluggable = false;
device_class_set_parent_reset(dc, virtio_vga_base_reset,
diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c
index ead754eccf..58ea82e3e5 100644
--- a/hw/display/vmware_vga.c
+++ b/hw/display/vmware_vga.c
@@ -1336,7 +1336,7 @@ static void vmsvga_class_init(ObjectClass *klass, void *data)
k->subsystem_id = SVGA_PCI_DEVICE_ID;
dc->reset = vmsvga_reset;
dc->vmsd = &vmstate_vmware_vga;
- dc->props = vga_vmware_properties;
+ device_class_set_props(dc, vga_vmware_properties);
dc->hotpluggable = false;
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
}
diff --git a/hw/dma/i82374.c b/hw/dma/i82374.c
index b788b3681a..6977d85ef8 100644
--- a/hw/dma/i82374.c
+++ b/hw/dma/i82374.c
@@ -149,7 +149,7 @@ static void i82374_class_init(ObjectClass *klass, void *data)
dc->realize = i82374_realize;
dc->vmsd = &vmstate_i82374;
- dc->props = i82374_properties;
+ device_class_set_props(dc, i82374_properties);
}
static const TypeInfo i82374_info = {
diff --git a/hw/dma/i8257.c b/hw/dma/i8257.c
index 792f617eb4..bad8debae4 100644
--- a/hw/dma/i8257.c
+++ b/hw/dma/i8257.c
@@ -595,7 +595,7 @@ static void i8257_class_init(ObjectClass *klass, void *data)
dc->realize = i8257_realize;
dc->reset = i8257_reset;
dc->vmsd = &vmstate_i8257;
- dc->props = i8257_properties;
+ device_class_set_props(dc, i8257_properties);
idc->get_transfer_mode = i8257_dma_get_transfer_mode;
idc->has_autoinitialization = i8257_dma_has_autoinitialization;
diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c
index 52ba23f4bf..f1a586b1d7 100644
--- a/hw/dma/pl080.c
+++ b/hw/dma/pl080.c
@@ -421,7 +421,7 @@ static void pl080_class_init(ObjectClass *oc, void *data)
dc->vmsd = &vmstate_pl080;
dc->realize = pl080_realize;
- dc->props = pl080_properties;
+ device_class_set_props(dc, pl080_properties);
dc->reset = pl080_reset;
}
diff --git a/hw/dma/pl330.c b/hw/dma/pl330.c
index 64519971ef..0bd63a43f5 100644
--- a/hw/dma/pl330.c
+++ b/hw/dma/pl330.c
@@ -1664,7 +1664,7 @@ static void pl330_class_init(ObjectClass *klass, void *data)
dc->realize = pl330_realize;
dc->reset = pl330_reset;
- dc->props = pl330_properties;
+ device_class_set_props(dc, pl330_properties);
dc->vmsd = &vmstate_pl330;
}
diff --git a/hw/dma/pxa2xx_dma.c b/hw/dma/pxa2xx_dma.c
index 18e7a0b694..88ed4b6ff1 100644
--- a/hw/dma/pxa2xx_dma.c
+++ b/hw/dma/pxa2xx_dma.c
@@ -566,7 +566,7 @@ static void pxa2xx_dma_class_init(ObjectClass *klass, void *data)
dc->desc = "PXA2xx DMA controller";
dc->vmsd = &vmstate_pxa2xx_dma;
- dc->props = pxa2xx_dma_properties;
+ device_class_set_props(dc, pxa2xx_dma_properties);
dc->realize = pxa2xx_dma_realize;
}
diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
index fb3a978e28..018f36991b 100644
--- a/hw/dma/xilinx_axidma.c
+++ b/hw/dma/xilinx_axidma.c
@@ -599,7 +599,7 @@ static void axidma_class_init(ObjectClass *klass, void *data)
dc->realize = xilinx_axidma_realize,
dc->reset = xilinx_axidma_reset;
- dc->props = axidma_properties;
+ device_class_set_props(dc, axidma_properties);
}
static StreamSlaveClass xilinx_axidma_data_stream_class = {
diff --git a/hw/dma/xlnx-zdma.c b/hw/dma/xlnx-zdma.c
index 75b660988f..8fb83f5b07 100644
--- a/hw/dma/xlnx-zdma.c
+++ b/hw/dma/xlnx-zdma.c
@@ -820,7 +820,7 @@ static void zdma_class_init(ObjectClass *klass, void *data)
dc->reset = zdma_reset;
dc->realize = zdma_realize;
- dc->props = zdma_props;
+ device_class_set_props(dc, zdma_props);
dc->vmsd = &vmstate_zdma;
}
diff --git a/hw/gpio/imx_gpio.c b/hw/gpio/imx_gpio.c
index ac8304ec56..7a591804a9 100644
--- a/hw/gpio/imx_gpio.c
+++ b/hw/gpio/imx_gpio.c
@@ -335,7 +335,7 @@ static void imx_gpio_class_init(ObjectClass *klass, void *data)
dc->realize = imx_gpio_realize;
dc->reset = imx_gpio_reset;
- dc->props = imx_gpio_properties;
+ device_class_set_props(dc, imx_gpio_properties);
dc->vmsd = &vmstate_imx_gpio;
dc->desc = "i.MX GPIO controller";
}
diff --git a/hw/gpio/omap_gpio.c b/hw/gpio/omap_gpio.c
index 85c16897ae..f662c4cb95 100644
--- a/hw/gpio/omap_gpio.c
+++ b/hw/gpio/omap_gpio.c
@@ -755,7 +755,7 @@ static void omap_gpio_class_init(ObjectClass *klass, void *data)
dc->realize = omap_gpio_realize;
dc->reset = omap_gpif_reset;
- dc->props = omap_gpio_properties;
+ device_class_set_props(dc, omap_gpio_properties);
/* Reason: pointer property "clk" */
dc->user_creatable = false;
}
@@ -790,7 +790,7 @@ static void omap2_gpio_class_init(ObjectClass *klass, void *data)
dc->realize = omap2_gpio_realize;
dc->reset = omap2_gpif_reset;
- dc->props = omap2_gpio_properties;
+ device_class_set_props(dc, omap2_gpio_properties);
/* Reason: pointer properties "iclk", "fclk0", ..., "fclk5" */
dc->user_creatable = false;
}
diff --git a/hw/i2c/aspeed_i2c.c b/hw/i2c/aspeed_i2c.c
index 2da04a4bff..9cda968501 100644
--- a/hw/i2c/aspeed_i2c.c
+++ b/hw/i2c/aspeed_i2c.c
@@ -832,7 +832,7 @@ static void aspeed_i2c_class_init(ObjectClass *klass, void *data)
dc->vmsd = &aspeed_i2c_vmstate;
dc->reset = aspeed_i2c_reset;
- dc->props = aspeed_i2c_properties;
+ device_class_set_props(dc, aspeed_i2c_properties);
dc->realize = aspeed_i2c_realize;
dc->desc = "Aspeed I2C Controller";
}
diff --git a/hw/i2c/core.c b/hw/i2c/core.c
index d770035ba0..d413a192ed 100644
--- a/hw/i2c/core.c
+++ b/hw/i2c/core.c
@@ -281,7 +281,7 @@ static void i2c_slave_class_init(ObjectClass *klass, void *data)
DeviceClass *k = DEVICE_CLASS(klass);
set_bit(DEVICE_CATEGORY_MISC, k->categories);
k->bus_type = TYPE_I2C_BUS;
- k->props = i2c_props;
+ device_class_set_props(k, i2c_props);
}
static const TypeInfo i2c_slave_type_info = {
diff --git a/hw/i2c/omap_i2c.c b/hw/i2c/omap_i2c.c
index 3ccbd5cc2c..e5d205dda5 100644
--- a/hw/i2c/omap_i2c.c
+++ b/hw/i2c/omap_i2c.c
@@ -520,7 +520,7 @@ static void omap_i2c_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = omap_i2c_properties;
+ device_class_set_props(dc, omap_i2c_properties);
dc->reset = omap_i2c_reset;
/* Reason: pointer properties "iclk", "fclk" */
dc->user_creatable = false;
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index a523ef0e65..6258c58ac9 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -3845,7 +3845,7 @@ static void vtd_class_init(ObjectClass *klass, void *data)
dc->reset = vtd_reset;
dc->vmsd = &vtd_vmstate;
- dc->props = vtd_properties;
+ device_class_set_props(dc, vtd_properties);
dc->hotpluggable = false;
x86_class->realize = vtd_realize;
x86_class->int_remap = vtd_int_remap;
diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c
index 2c59b6894b..64283358f9 100644
--- a/hw/i386/kvm/clock.c
+++ b/hw/i386/kvm/clock.c
@@ -317,7 +317,7 @@ static void kvmclock_class_init(ObjectClass *klass, void *data)
dc->realize = kvmclock_realize;
dc->vmsd = &kvmclock_vmsd;
- dc->props = kvmclock_properties;
+ device_class_set_props(dc, kvmclock_properties);
}
static const TypeInfo kvmclock_info = {
diff --git a/hw/i386/kvm/i8254.c b/hw/i386/kvm/i8254.c
index 6a911e23f9..876f5aa6fa 100644
--- a/hw/i386/kvm/i8254.c
+++ b/hw/i386/kvm/i8254.c
@@ -322,7 +322,7 @@ static void kvm_pit_class_init(ObjectClass *klass, void *data)
k->set_channel_gate = kvm_pit_set_gate;
k->get_channel_info = kvm_pit_get_channel_info;
dc->reset = kvm_pit_reset;
- dc->props = kvm_pit_properties;
+ device_class_set_props(dc, kvm_pit_properties);
}
static const TypeInfo kvm_pit_info = {
diff --git a/hw/i386/kvm/ioapic.c b/hw/i386/kvm/ioapic.c
index 973e2b2af1..4ba8e47251 100644
--- a/hw/i386/kvm/ioapic.c
+++ b/hw/i386/kvm/ioapic.c
@@ -149,7 +149,7 @@ static void kvm_ioapic_class_init(ObjectClass *klass, void *data)
k->pre_save = kvm_ioapic_get;
k->post_load = kvm_ioapic_put;
dc->reset = kvm_ioapic_reset;
- dc->props = kvm_ioapic_properties;
+ device_class_set_props(dc, kvm_ioapic_properties);
}
static const TypeInfo kvm_ioapic_info = {
diff --git a/hw/i386/vmmouse.c b/hw/i386/vmmouse.c
index c0c329f817..7c2a375527 100644
--- a/hw/i386/vmmouse.c
+++ b/hw/i386/vmmouse.c
@@ -286,7 +286,7 @@ static void vmmouse_class_initfn(ObjectClass *klass, void *data)
dc->realize = vmmouse_realizefn;
dc->reset = vmmouse_reset;
dc->vmsd = &vmstate_vmmouse;
- dc->props = vmmouse_properties;
+ device_class_set_props(dc, vmmouse_properties);
}
static const TypeInfo vmmouse_info = {
diff --git a/hw/i386/x86-iommu.c b/hw/i386/x86-iommu.c
index 1eaf2dd1bc..4104060e68 100644
--- a/hw/i386/x86-iommu.c
+++ b/hw/i386/x86-iommu.c
@@ -153,7 +153,7 @@ static void x86_iommu_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = x86_iommu_realize;
- dc->props = x86_iommu_properties;
+ device_class_set_props(dc, x86_iommu_properties);
}
bool x86_iommu_ir_supported(X86IOMMUState *s)
diff --git a/hw/i386/xen/xen_pvdevice.c b/hw/i386/xen/xen_pvdevice.c
index 27f646da06..ee2610c7a0 100644
--- a/hw/i386/xen/xen_pvdevice.c
+++ b/hw/i386/xen/xen_pvdevice.c
@@ -131,7 +131,7 @@ static void xen_pv_class_init(ObjectClass *klass, void *data)
k->realize = xen_pv_realize;
k->class_id = PCI_CLASS_SYSTEM_OTHER;
dc->desc = "Xen PV Device";
- dc->props = xen_pv_props;
+ device_class_set_props(dc, xen_pv_props);
dc->vmsd = &vmstate_xen_pvdevice;
}
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index d45393c019..68264a22e8 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -1795,7 +1795,7 @@ static void sysbus_ahci_class_init(ObjectClass *klass, void *data)
dc->realize = sysbus_ahci_realize;
dc->vmsd = &vmstate_sysbus_ahci;
- dc->props = sysbus_ahci_properties;
+ device_class_set_props(dc, sysbus_ahci_properties);
dc->reset = sysbus_ahci_reset;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c
index 3f9be968d1..335c060673 100644
--- a/hw/ide/cmd646.c
+++ b/hw/ide/cmd646.c
@@ -347,7 +347,7 @@ static void cmd646_ide_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_STORAGE_IDE;
k->config_read = cmd646_pci_config_read;
k->config_write = cmd646_pci_config_write;
- dc->props = cmd646_ide_properties;
+ device_class_set_props(dc, cmd646_ide_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/ide/isa.c b/hw/ide/isa.c
index 9c7f88b2d5..8395807b08 100644
--- a/hw/ide/isa.c
+++ b/hw/ide/isa.c
@@ -117,7 +117,7 @@ static void isa_ide_class_initfn(ObjectClass *klass, void *data)
dc->realize = isa_ide_realizefn;
dc->fw_name = "ide";
dc->reset = isa_ide_reset;
- dc->props = isa_ide_properties;
+ device_class_set_props(dc, isa_ide_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/ide/macio.c b/hw/ide/macio.c
index 79f787c539..7a8470e921 100644
--- a/hw/ide/macio.c
+++ b/hw/ide/macio.c
@@ -474,7 +474,7 @@ static void macio_ide_class_init(ObjectClass *oc, void *data)
dc->realize = macio_ide_realizefn;
dc->reset = macio_ide_reset;
- dc->props = macio_ide_properties;
+ device_class_set_props(dc, macio_ide_properties);
dc->vmsd = &vmstate_pmac;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/ide/mmio.c b/hw/ide/mmio.c
index 7149a9cba6..d233bd8c01 100644
--- a/hw/ide/mmio.c
+++ b/hw/ide/mmio.c
@@ -154,7 +154,7 @@ static void mmio_ide_class_init(ObjectClass *oc, void *data)
dc->realize = mmio_ide_realizefn;
dc->reset = mmio_ide_reset;
- dc->props = mmio_ide_properties;
+ device_class_set_props(dc, mmio_ide_properties);
dc->vmsd = &vmstate_ide_mmio;
}
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index 374a791a45..c22afdb8ee 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -319,7 +319,7 @@ static void ide_hd_class_init(ObjectClass *klass, void *data)
k->realize = ide_hd_realize;
dc->fw_name = "drive";
dc->desc = "virtual IDE disk";
- dc->props = ide_hd_properties;
+ device_class_set_props(dc, ide_hd_properties);
}
static const TypeInfo ide_hd_info = {
@@ -342,7 +342,7 @@ static void ide_cd_class_init(ObjectClass *klass, void *data)
k->realize = ide_cd_realize;
dc->fw_name = "drive";
dc->desc = "virtual IDE CD-ROM";
- dc->props = ide_cd_properties;
+ device_class_set_props(dc, ide_cd_properties);
}
static const TypeInfo ide_cd_info = {
@@ -365,7 +365,7 @@ static void ide_drive_class_init(ObjectClass *klass, void *data)
k->realize = ide_drive_realize;
dc->fw_name = "drive";
dc->desc = "virtual IDE disk or CD-ROM (legacy)";
- dc->props = ide_drive_properties;
+ device_class_set_props(dc, ide_drive_properties);
}
static const TypeInfo ide_drive_info = {
@@ -381,7 +381,7 @@ static void ide_device_class_init(ObjectClass *klass, void *data)
k->realize = ide_qdev_realize;
set_bit(DEVICE_CATEGORY_STORAGE, k->categories);
k->bus_type = TYPE_IDE_BUS;
- k->props = ide_props;
+ device_class_set_props(k, ide_props);
}
static const TypeInfo ide_device_type_info = {
diff --git a/hw/input/adb.c b/hw/input/adb.c
index 478a90fae2..b1ac4a3852 100644
--- a/hw/input/adb.c
+++ b/hw/input/adb.c
@@ -128,7 +128,7 @@ static void adb_device_class_init(ObjectClass *oc, void *data)
DeviceClass *dc = DEVICE_CLASS(oc);
dc->realize = adb_device_realizefn;
- dc->props = adb_device_properties;
+ device_class_set_props(dc, adb_device_properties);
dc->bus_type = TYPE_ADB_BUS;
}
diff --git a/hw/input/milkymist-softusb.c b/hw/input/milkymist-softusb.c
index 67fcb3595f..3e0a7eb0bd 100644
--- a/hw/input/milkymist-softusb.c
+++ b/hw/input/milkymist-softusb.c
@@ -302,7 +302,7 @@ static void milkymist_softusb_class_init(ObjectClass *klass, void *data)
dc->realize = milkymist_softusb_realize;
dc->reset = milkymist_softusb_reset;
dc->vmsd = &vmstate_milkymist_softusb;
- dc->props = milkymist_softusb_properties;
+ device_class_set_props(dc, milkymist_softusb_properties);
}
static const TypeInfo milkymist_softusb_info = {
diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c
index 386a363a17..e8ae6c148a 100644
--- a/hw/input/virtio-input-hid.c
+++ b/hw/input/virtio-input-hid.c
@@ -222,7 +222,7 @@ static void virtio_input_hid_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtIOInputClass *vic = VIRTIO_INPUT_CLASS(klass);
- dc->props = virtio_input_hid_properties;
+ device_class_set_props(dc, virtio_input_hid_properties);
vic->realize = virtio_input_hid_realize;
vic->unrealize = virtio_input_hid_unrealize;
vic->change_active = virtio_input_hid_change_active;
@@ -362,7 +362,7 @@ static void virtio_mouse_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = virtio_mouse_properties;
+ device_class_set_props(dc, virtio_mouse_properties);
}
static void virtio_mouse_init(Object *obj)
@@ -486,7 +486,7 @@ static void virtio_tablet_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = virtio_tablet_properties;
+ device_class_set_props(dc, virtio_tablet_properties);
}
static void virtio_tablet_init(Object *obj)
diff --git a/hw/input/virtio-input-host.c b/hw/input/virtio-input-host.c
index 1c3b12ba32..f2ab6df676 100644
--- a/hw/input/virtio-input-host.c
+++ b/hw/input/virtio-input-host.c
@@ -226,7 +226,7 @@ static void virtio_input_host_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->vmsd = &vmstate_virtio_input_host;
- dc->props = virtio_input_host_properties;
+ device_class_set_props(dc, virtio_input_host_properties);
vic->realize = virtio_input_host_realize;
vic->unrealize = virtio_input_host_unrealize;
vic->handle_status = virtio_input_host_handle_status;
diff --git a/hw/input/virtio-input.c b/hw/input/virtio-input.c
index 9c013afddb..4d49790f50 100644
--- a/hw/input/virtio-input.c
+++ b/hw/input/virtio-input.c
@@ -316,7 +316,7 @@ static void virtio_input_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = virtio_input_properties;
+ device_class_set_props(dc, virtio_input_properties);
dc->vmsd = &vmstate_virtio_input;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
vdc->realize = virtio_input_device_realize;
diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
index b5dbeb6206..9ec0f2deb2 100644
--- a/hw/intc/apic_common.c
+++ b/hw/intc/apic_common.c
@@ -453,7 +453,7 @@ static void apic_common_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = apic_reset_common;
- dc->props = apic_properties_common;
+ device_class_set_props(dc, apic_properties_common);
dc->realize = apic_common_realize;
dc->unrealize = apic_common_unrealize;
/*
diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c
index f0d0d7c467..e6c4fe7a5a 100644
--- a/hw/intc/arm_gic_common.c
+++ b/hw/intc/arm_gic_common.c
@@ -367,7 +367,7 @@ static void arm_gic_common_class_init(ObjectClass *klass, void *data)
dc->reset = arm_gic_common_reset;
dc->realize = arm_gic_common_realize;
- dc->props = arm_gic_common_properties;
+ device_class_set_props(dc, arm_gic_common_properties);
dc->vmsd = &vmstate_gic;
albifc->arm_linux_init = arm_gic_common_linux_init;
}
diff --git a/hw/intc/arm_gicv2m.c b/hw/intc/arm_gicv2m.c
index 6e45f4ff39..0b7e2b4f84 100644
--- a/hw/intc/arm_gicv2m.c
+++ b/hw/intc/arm_gicv2m.c
@@ -179,7 +179,7 @@ static void gicv2m_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = gicv2m_properties;
+ device_class_set_props(dc, gicv2m_properties);
dc->realize = gicv2m_realize;
}
diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c
index f0c551d43f..58ef65f589 100644
--- a/hw/intc/arm_gicv3_common.c
+++ b/hw/intc/arm_gicv3_common.c
@@ -507,7 +507,7 @@ static void arm_gicv3_common_class_init(ObjectClass *klass, void *data)
dc->reset = arm_gicv3_common_reset;
dc->realize = arm_gicv3_common_realize;
- dc->props = arm_gicv3_common_properties;
+ device_class_set_props(dc, arm_gicv3_common_properties);
dc->vmsd = &vmstate_gicv3;
albifc->arm_linux_init = arm_gic_common_linux_init;
}
diff --git a/hw/intc/arm_gicv3_its_kvm.c b/hw/intc/arm_gicv3_its_kvm.c
index d66f2431ee..ad0ebabc87 100644
--- a/hw/intc/arm_gicv3_its_kvm.c
+++ b/hw/intc/arm_gicv3_its_kvm.c
@@ -246,7 +246,7 @@ static void kvm_arm_its_class_init(ObjectClass *klass, void *data)
KVMARMITSClass *ic = KVM_ARM_ITS_CLASS(klass);
dc->realize = kvm_arm_its_realize;
- dc->props = kvm_arm_its_props;
+ device_class_set_props(dc, kvm_arm_its_props);
device_class_set_parent_reset(dc, kvm_arm_its_reset, &ic->parent_reset);
icc->send_msi = kvm_its_send_msi;
icc->pre_save = kvm_arm_its_pre_save;
diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c
index e8c74f9eba..f9e0eeaace 100644
--- a/hw/intc/armv7m_nvic.c
+++ b/hw/intc/armv7m_nvic.c
@@ -2749,7 +2749,7 @@ static void armv7m_nvic_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->vmsd = &vmstate_nvic;
- dc->props = props_nvic;
+ device_class_set_props(dc, props_nvic);
dc->reset = armv7m_nvic_reset;
dc->realize = armv7m_nvic_realize;
}
diff --git a/hw/intc/exynos4210_combiner.c b/hw/intc/exynos4210_combiner.c
index 5b33ca6628..b8561e4180 100644
--- a/hw/intc/exynos4210_combiner.c
+++ b/hw/intc/exynos4210_combiner.c
@@ -442,7 +442,7 @@ static void exynos4210_combiner_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = exynos4210_combiner_reset;
- dc->props = exynos4210_combiner_properties;
+ device_class_set_props(dc, exynos4210_combiner_properties);
dc->vmsd = &vmstate_exynos4210_combiner;
}
diff --git a/hw/intc/exynos4210_gic.c b/hw/intc/exynos4210_gic.c
index 9a84d8522e..82c8f4192c 100644
--- a/hw/intc/exynos4210_gic.c
+++ b/hw/intc/exynos4210_gic.c
@@ -355,7 +355,7 @@ static void exynos4210_gic_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = exynos4210_gic_properties;
+ device_class_set_props(dc, exynos4210_gic_properties);
dc->realize = exynos4210_gic_realize;
}
@@ -462,7 +462,7 @@ static void exynos4210_irq_gate_class_init(ObjectClass *klass, void *data)
dc->reset = exynos4210_irq_gate_reset;
dc->vmsd = &vmstate_exynos4210_irq_gate;
- dc->props = exynos4210_irq_gate_properties;
+ device_class_set_props(dc, exynos4210_irq_gate_properties);
dc->realize = exynos4210_irq_gate_realize;
}
diff --git a/hw/intc/i8259_common.c b/hw/intc/i8259_common.c
index e7b1a10436..99f8f6abd5 100644
--- a/hw/intc/i8259_common.c
+++ b/hw/intc/i8259_common.c
@@ -184,7 +184,7 @@ static void pic_common_class_init(ObjectClass *klass, void *data)
InterruptStatsProviderClass *ic = INTERRUPT_STATS_PROVIDER_CLASS(klass);
dc->vmsd = &vmstate_pic_common;
- dc->props = pic_properties_common;
+ device_class_set_props(dc, pic_properties_common);
dc->realize = pic_common_realize;
/*
* Reason: unlike ordinary ISA devices, the PICs need additional
diff --git a/hw/intc/ioapic.c b/hw/intc/ioapic.c
index 4f5577678a..15747fe2c2 100644
--- a/hw/intc/ioapic.c
+++ b/hw/intc/ioapic.c
@@ -477,7 +477,7 @@ static void ioapic_class_init(ObjectClass *klass, void *data)
*/
k->post_load = ioapic_update_kvm_routes;
dc->reset = ioapic_reset_common;
- dc->props = ioapic_properties;
+ device_class_set_props(dc, ioapic_properties);
}
static const TypeInfo ioapic_info = {
diff --git a/hw/intc/mips_gic.c b/hw/intc/mips_gic.c
index 54b3059f3f..bda4549925 100644
--- a/hw/intc/mips_gic.c
+++ b/hw/intc/mips_gic.c
@@ -448,7 +448,7 @@ static void mips_gic_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = mips_gic_properties;
+ device_class_set_props(dc, mips_gic_properties);
dc->realize = mips_gic_realize;
}
diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c
index 73bb1c2af4..b8a1d1fd7d 100644
--- a/hw/intc/omap_intc.c
+++ b/hw/intc/omap_intc.c
@@ -407,7 +407,7 @@ static void omap_intc_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = omap_inth_reset;
- dc->props = omap_intc_properties;
+ device_class_set_props(dc, omap_intc_properties);
/* Reason: pointer property "clk" */
dc->user_creatable = false;
dc->realize = omap_intc_realize;
@@ -660,7 +660,7 @@ static void omap2_intc_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = omap_inth_reset;
- dc->props = omap2_intc_properties;
+ device_class_set_props(dc, omap2_intc_properties);
/* Reason: pointer property "iclk", "fclk" */
dc->user_creatable = false;
dc->realize = omap2_intc_realize;
diff --git a/hw/intc/ompic.c b/hw/intc/ompic.c
index ca9614fda1..c354427a61 100644
--- a/hw/intc/ompic.c
+++ b/hw/intc/ompic.c
@@ -161,7 +161,7 @@ static void or1k_ompic_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = or1k_ompic_properties;
+ device_class_set_props(dc, or1k_ompic_properties);
dc->realize = or1k_ompic_realize;
dc->vmsd = &vmstate_or1k_ompic;
}
diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c
index c797ba78f3..65970e1b37 100644
--- a/hw/intc/openpic.c
+++ b/hw/intc/openpic.c
@@ -1628,7 +1628,7 @@ static void openpic_class_init(ObjectClass *oc, void *data)
DeviceClass *dc = DEVICE_CLASS(oc);
dc->realize = openpic_realize;
- dc->props = openpic_properties;
+ device_class_set_props(dc, openpic_properties);
dc->reset = openpic_reset;
dc->vmsd = &vmstate_openpic;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
diff --git a/hw/intc/openpic_kvm.c b/hw/intc/openpic_kvm.c
index c09bebedd1..e4bf47d885 100644
--- a/hw/intc/openpic_kvm.c
+++ b/hw/intc/openpic_kvm.c
@@ -274,7 +274,7 @@ static void kvm_openpic_class_init(ObjectClass *oc, void *data)
DeviceClass *dc = DEVICE_CLASS(oc);
dc->realize = kvm_openpic_realize;
- dc->props = kvm_openpic_properties;
+ device_class_set_props(dc, kvm_openpic_properties);
dc->reset = kvm_openpic_reset;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c
index 715fca61ae..aeda488bd1 100644
--- a/hw/intc/pnv_xive.c
+++ b/hw/intc/pnv_xive.c
@@ -1957,7 +1957,7 @@ static void pnv_xive_class_init(ObjectClass *klass, void *data)
dc->desc = "PowerNV XIVE Interrupt Controller";
device_class_set_parent_realize(dc, pnv_xive_realize, &pxc->parent_realize);
dc->realize = pnv_xive_realize;
- dc->props = pnv_xive_properties;
+ device_class_set_props(dc, pnv_xive_properties);
xrc->get_eas = pnv_xive_get_eas;
xrc->get_end = pnv_xive_get_end;
diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
index a159c0c7cf..5f290f5410 100644
--- a/hw/intc/s390_flic.c
+++ b/hw/intc/s390_flic.c
@@ -427,7 +427,7 @@ static void s390_flic_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
- dc->props = s390_flic_common_properties;
+ device_class_set_props(dc, s390_flic_common_properties);
dc->realize = s390_flic_common_realize;
}
diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c
index 7663123878..024b8ce285 100644
--- a/hw/intc/spapr_xive.c
+++ b/hw/intc/spapr_xive.c
@@ -770,7 +770,7 @@ static void spapr_xive_class_init(ObjectClass *klass, void *data)
SpaprXiveClass *sxc = SPAPR_XIVE_CLASS(klass);
dc->desc = "sPAPR XIVE Interrupt Controller";
- dc->props = spapr_xive_properties;
+ device_class_set_props(dc, spapr_xive_properties);
device_class_set_parent_realize(dc, spapr_xive_realize,
&sxc->parent_realize);
dc->vmsd = &vmstate_spapr_xive;
diff --git a/hw/intc/xics.c b/hw/intc/xics.c
index 1952009e6d..785b607528 100644
--- a/hw/intc/xics.c
+++ b/hw/intc/xics.c
@@ -358,7 +358,7 @@ static void icp_class_init(ObjectClass *klass, void *data)
dc->realize = icp_realize;
dc->unrealize = icp_unrealize;
- dc->props = icp_properties;
+ device_class_set_props(dc, icp_properties);
/*
* Reason: part of XICS interrupt controller, needs to be wired up
* by icp_create().
@@ -680,7 +680,7 @@ static void ics_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = ics_realize;
- dc->props = ics_properties;
+ device_class_set_props(dc, ics_properties);
dc->reset = ics_reset;
dc->vmsd = &vmstate_ics;
/*
diff --git a/hw/intc/xilinx_intc.c b/hw/intc/xilinx_intc.c
index e15cb42b36..3e65e68619 100644
--- a/hw/intc/xilinx_intc.c
+++ b/hw/intc/xilinx_intc.c
@@ -185,7 +185,7 @@ static void xilinx_intc_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = xilinx_intc_properties;
+ device_class_set_props(dc, xilinx_intc_properties);
}
static const TypeInfo xilinx_intc_info = {
diff --git a/hw/intc/xive.c b/hw/intc/xive.c
index bc8019c4c9..d6183f8ae4 100644
--- a/hw/intc/xive.c
+++ b/hw/intc/xive.c
@@ -740,7 +740,7 @@ static void xive_tctx_class_init(ObjectClass *klass, void *data)
dc->desc = "XIVE Interrupt Thread Context";
dc->realize = xive_tctx_realize;
dc->vmsd = &vmstate_xive_tctx;
- dc->props = xive_tctx_properties;
+ device_class_set_props(dc, xive_tctx_properties);
/*
* Reason: part of XIVE interrupt controller, needs to be wired up
* by xive_tctx_create().
@@ -1192,7 +1192,7 @@ static void xive_source_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->desc = "XIVE Interrupt Source";
- dc->props = xive_source_properties;
+ device_class_set_props(dc, xive_source_properties);
dc->realize = xive_source_realize;
dc->vmsd = &vmstate_xive_source;
/*
@@ -1736,7 +1736,7 @@ static void xive_router_class_init(ObjectClass *klass, void *data)
XiveNotifierClass *xnc = XIVE_NOTIFIER_CLASS(klass);
dc->desc = "XIVE Router Engine";
- dc->props = xive_router_properties;
+ device_class_set_props(dc, xive_router_properties);
/* Parent is SysBusDeviceClass. No need to call its realize hook */
dc->realize = xive_router_realize;
xnc->notify = xive_router_notify;
@@ -1899,7 +1899,7 @@ static void xive_end_source_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->desc = "XIVE END Source";
- dc->props = xive_end_source_properties;
+ device_class_set_props(dc, xive_end_source_properties);
dc->realize = xive_end_source_realize;
/*
* Reason: part of XIVE interrupt controller, needs to be wired up,
diff --git a/hw/intc/xlnx-pmu-iomod-intc.c b/hw/intc/xlnx-pmu-iomod-intc.c
index f9a1401a94..acaa1c3e6f 100644
--- a/hw/intc/xlnx-pmu-iomod-intc.c
+++ b/hw/intc/xlnx-pmu-iomod-intc.c
@@ -539,7 +539,7 @@ static void xlnx_pmu_io_intc_class_init(ObjectClass *klass, void *data)
dc->reset = xlnx_pmu_io_intc_reset;
dc->realize = xlnx_pmu_io_intc_realize;
dc->vmsd = &vmstate_xlnx_pmu_io_intc;
- dc->props = xlnx_pmu_io_intc_properties;
+ device_class_set_props(dc, xlnx_pmu_io_intc_properties);
}
static const TypeInfo xlnx_pmu_io_intc_info = {
diff --git a/hw/ipack/ipack.c b/hw/ipack/ipack.c
index 30e16696c0..49787a13bc 100644
--- a/hw/ipack/ipack.c
+++ b/hw/ipack/ipack.c
@@ -88,7 +88,7 @@ static void ipack_device_class_init(ObjectClass *klass, void *data)
k->bus_type = TYPE_IPACK_BUS;
k->realize = ipack_device_realize;
k->unrealize = ipack_device_unrealize;
- k->props = ipack_device_props;
+ device_class_set_props(k, ipack_device_props);
}
const VMStateDescription vmstate_ipack_device = {
diff --git a/hw/ipmi/ipmi.c b/hw/ipmi/ipmi.c
index cbe158f815..46c6a79527 100644
--- a/hw/ipmi/ipmi.c
+++ b/hw/ipmi/ipmi.c
@@ -118,7 +118,7 @@ static void bmc_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
- dc->props = ipmi_bmc_properties;
+ device_class_set_props(dc, ipmi_bmc_properties);
}
static TypeInfo ipmi_bmc_type_info = {
diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c
index 16a4117ab0..f9a13e0a44 100644
--- a/hw/ipmi/ipmi_bmc_extern.c
+++ b/hw/ipmi/ipmi_bmc_extern.c
@@ -528,7 +528,7 @@ static void ipmi_bmc_extern_class_init(ObjectClass *oc, void *data)
bk->handle_reset = ipmi_bmc_extern_handle_reset;
dc->hotpluggable = false;
dc->realize = ipmi_bmc_extern_realize;
- dc->props = ipmi_bmc_extern_properties;
+ device_class_set_props(dc, ipmi_bmc_extern_properties);
}
static const TypeInfo ipmi_bmc_extern_type = {
diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c
index 6670cf039d..0b97e04774 100644
--- a/hw/ipmi/ipmi_bmc_sim.c
+++ b/hw/ipmi/ipmi_bmc_sim.c
@@ -1989,7 +1989,7 @@ static void ipmi_sim_class_init(ObjectClass *oc, void *data)
dc->hotpluggable = false;
dc->realize = ipmi_sim_realize;
- dc->props = ipmi_sim_properties;
+ device_class_set_props(dc, ipmi_sim_properties);
bk->handle_command = ipmi_sim_handle_command;
}
diff --git a/hw/ipmi/isa_ipmi_bt.c b/hw/ipmi/isa_ipmi_bt.c
index 9fba5ed383..c8dc0a09dc 100644
--- a/hw/ipmi/isa_ipmi_bt.c
+++ b/hw/ipmi/isa_ipmi_bt.c
@@ -147,7 +147,7 @@ static void isa_ipmi_bt_class_init(ObjectClass *oc, void *data)
IPMIInterfaceClass *iic = IPMI_INTERFACE_CLASS(oc);
dc->realize = isa_ipmi_bt_realize;
- dc->props = ipmi_isa_properties;
+ device_class_set_props(dc, ipmi_isa_properties);
iic->get_backend_data = isa_ipmi_bt_get_backend_data;
ipmi_bt_class_init(iic);
diff --git a/hw/ipmi/isa_ipmi_kcs.c b/hw/ipmi/isa_ipmi_kcs.c
index cc6bd817f2..4b421c33f4 100644
--- a/hw/ipmi/isa_ipmi_kcs.c
+++ b/hw/ipmi/isa_ipmi_kcs.c
@@ -154,7 +154,7 @@ static void isa_ipmi_kcs_class_init(ObjectClass *oc, void *data)
IPMIInterfaceClass *iic = IPMI_INTERFACE_CLASS(oc);
dc->realize = ipmi_isa_realize;
- dc->props = ipmi_isa_properties;
+ device_class_set_props(dc, ipmi_isa_properties);
iic->get_backend_data = isa_ipmi_kcs_get_backend_data;
ipmi_kcs_class_init(iic);
diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
index 170792a4fc..f85b484eac 100644
--- a/hw/isa/lpc_ich9.c
+++ b/hw/isa/lpc_ich9.c
@@ -784,7 +784,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data)
dc->reset = ich9_lpc_reset;
k->realize = ich9_lpc_realize;
dc->vmsd = &vmstate_ich9_lpc;
- dc->props = ich9_lpc_properties;
+ device_class_set_props(dc, ich9_lpc_properties);
k->config_write = ich9_lpc_config_write;
dc->desc = "ICH9 LPC bridge";
k->vendor_id = PCI_VENDOR_ID_INTEL;
diff --git a/hw/isa/pc87312.c b/hw/isa/pc87312.c
index b9bd57471e..0cacbbc91b 100644
--- a/hw/isa/pc87312.c
+++ b/hw/isa/pc87312.c
@@ -342,7 +342,7 @@ static void pc87312_class_init(ObjectClass *klass, void *data)
dc->realize = pc87312_realize;
dc->reset = pc87312_reset;
dc->vmsd = &vmstate_pc87312;
- dc->props = pc87312_properties;
+ device_class_set_props(dc, pc87312_properties);
sc->parallel = (ISASuperIOFuncs){
.count = 1,
diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c
index f828708b1d..d9b51fce8d 100644
--- a/hw/isa/vt82c686.c
+++ b/hw/isa/vt82c686.c
@@ -417,7 +417,7 @@ static void via_pm_class_init(ObjectClass *klass, void *data)
dc->desc = "PM";
dc->vmsd = &vmstate_acpi;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
- dc->props = via_pm_properties;
+ device_class_set_props(dc, via_pm_properties);
}
static const TypeInfo via_pm_info = {
diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c
index 375f9a588a..39f1426d1f 100644
--- a/hw/mem/nvdimm.c
+++ b/hw/mem/nvdimm.c
@@ -202,7 +202,7 @@ static void nvdimm_class_init(ObjectClass *oc, void *data)
ddc->realize = nvdimm_realize;
mdc->get_memory_region = nvdimm_md_get_memory_region;
- dc->props = nvdimm_properties;
+ device_class_set_props(dc, nvdimm_properties);
nvc->read_label_data = nvdimm_read_label_data;
nvc->write_label_data = nvdimm_write_label_data;
diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
index 99e2faf01b..8f50b8afea 100644
--- a/hw/mem/pc-dimm.c
+++ b/hw/mem/pc-dimm.c
@@ -271,7 +271,7 @@ static void pc_dimm_class_init(ObjectClass *oc, void *data)
dc->realize = pc_dimm_realize;
dc->unrealize = pc_dimm_unrealize;
- dc->props = pc_dimm_properties;
+ device_class_set_props(dc, pc_dimm_properties);
dc->desc = "DIMM memory module";
ddc->get_vmstate_memory_region = pc_dimm_get_memory_region;
diff --git a/hw/mips/cps.c b/hw/mips/cps.c
index c49868d5da..92b9b1a5f6 100644
--- a/hw/mips/cps.c
+++ b/hw/mips/cps.c
@@ -178,7 +178,7 @@ static void mips_cps_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = mips_cps_realize;
- dc->props = mips_cps_properties;
+ device_class_set_props(dc, mips_cps_properties);
}
static const TypeInfo mips_cps_info = {
diff --git a/hw/misc/a9scu.c b/hw/misc/a9scu.c
index 45c91db303..324371a1c0 100644
--- a/hw/misc/a9scu.c
+++ b/hw/misc/a9scu.c
@@ -135,7 +135,7 @@ static void a9_scu_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = a9_scu_properties;
+ device_class_set_props(dc, a9_scu_properties);
dc->vmsd = &vmstate_a9_scu;
dc->reset = a9_scu_reset;
}
diff --git a/hw/misc/applesmc.c b/hw/misc/applesmc.c
index 24d57e8677..1c4addb201 100644
--- a/hw/misc/applesmc.c
+++ b/hw/misc/applesmc.c
@@ -353,7 +353,7 @@ static void qdev_applesmc_class_init(ObjectClass *klass, void *data)
dc->realize = applesmc_isa_realize;
dc->reset = qdev_applesmc_isa_reset;
- dc->props = applesmc_isa_properties;
+ device_class_set_props(dc, applesmc_isa_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/misc/arm11scu.c b/hw/misc/arm11scu.c
index 3023284d6f..17c36a0545 100644
--- a/hw/misc/arm11scu.c
+++ b/hw/misc/arm11scu.c
@@ -85,7 +85,7 @@ static void arm11_scu_class_init(ObjectClass *oc, void *data)
DeviceClass *dc = DEVICE_CLASS(oc);
dc->realize = arm11_scu_realize;
- dc->props = arm11_scu_properties;
+ device_class_set_props(dc, arm11_scu_properties);
}
static const TypeInfo arm11_scu_type_info = {
diff --git a/hw/misc/arm_l2x0.c b/hw/misc/arm_l2x0.c
index af2c7af4a0..2066c97f5f 100644
--- a/hw/misc/arm_l2x0.c
+++ b/hw/misc/arm_l2x0.c
@@ -182,7 +182,7 @@ static void l2x0_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->vmsd = &vmstate_l2x0;
- dc->props = l2x0_properties;
+ device_class_set_props(dc, l2x0_properties);
dc->reset = l2x0_priv_reset;
}
diff --git a/hw/misc/arm_sysctl.c b/hw/misc/arm_sysctl.c
index fc79522ece..a474bbdd19 100644
--- a/hw/misc/arm_sysctl.c
+++ b/hw/misc/arm_sysctl.c
@@ -642,7 +642,7 @@ static void arm_sysctl_class_init(ObjectClass *klass, void *data)
dc->realize = arm_sysctl_realize;
dc->reset = arm_sysctl_reset;
dc->vmsd = &vmstate_arm_sysctl;
- dc->props = arm_sysctl_properties;
+ device_class_set_props(dc, arm_sysctl_properties);
}
static const TypeInfo arm_sysctl_info = {
diff --git a/hw/misc/armsse-cpuid.c b/hw/misc/armsse-cpuid.c
index 8ab15fea81..d58138dc28 100644
--- a/hw/misc/armsse-cpuid.c
+++ b/hw/misc/armsse-cpuid.c
@@ -116,7 +116,7 @@ static void armsse_cpuid_class_init(ObjectClass *klass, void *data)
* does not need a reset function or VMState.
*/
- dc->props = armsse_cpuid_props;
+ device_class_set_props(dc, armsse_cpuid_props);
}
static const TypeInfo armsse_cpuid_info = {
diff --git a/hw/misc/aspeed_scu.c b/hw/misc/aspeed_scu.c
index f62fa25e34..ce2f9562d4 100644
--- a/hw/misc/aspeed_scu.c
+++ b/hw/misc/aspeed_scu.c
@@ -447,7 +447,7 @@ static void aspeed_scu_class_init(ObjectClass *klass, void *data)
dc->reset = aspeed_scu_reset;
dc->desc = "ASPEED System Control Unit";
dc->vmsd = &vmstate_aspeed_scu;
- dc->props = aspeed_scu_properties;
+ device_class_set_props(dc, aspeed_scu_properties);
}
static const TypeInfo aspeed_scu_info = {
diff --git a/hw/misc/aspeed_sdmc.c b/hw/misc/aspeed_sdmc.c
index 2df3244b53..9c184790cd 100644
--- a/hw/misc/aspeed_sdmc.c
+++ b/hw/misc/aspeed_sdmc.c
@@ -261,7 +261,7 @@ static void aspeed_sdmc_class_init(ObjectClass *klass, void *data)
dc->reset = aspeed_sdmc_reset;
dc->desc = "ASPEED SDRAM Memory Controller";
dc->vmsd = &vmstate_aspeed_sdmc;
- dc->props = aspeed_sdmc_properties;
+ device_class_set_props(dc, aspeed_sdmc_properties);
}
static const TypeInfo aspeed_sdmc_info = {
diff --git a/hw/misc/bcm2835_property.c b/hw/misc/bcm2835_property.c
index 0eea2e20f7..df91280dfc 100644
--- a/hw/misc/bcm2835_property.c
+++ b/hw/misc/bcm2835_property.c
@@ -426,7 +426,7 @@ static void bcm2835_property_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = bcm2835_property_props;
+ device_class_set_props(dc, bcm2835_property_props);
dc->realize = bcm2835_property_realize;
dc->vmsd = &vmstate_bcm2835_property;
}
diff --git a/hw/misc/debugexit.c b/hw/misc/debugexit.c
index ccf02bdbd4..99a814f10c 100644
--- a/hw/misc/debugexit.c
+++ b/hw/misc/debugexit.c
@@ -65,7 +65,7 @@ static void debug_exit_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = debug_exit_realizefn;
- dc->props = debug_exit_properties;
+ device_class_set_props(dc, debug_exit_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/misc/eccmemctl.c b/hw/misc/eccmemctl.c
index 4b1f2b675a..aec447368e 100644
--- a/hw/misc/eccmemctl.c
+++ b/hw/misc/eccmemctl.c
@@ -336,7 +336,7 @@ static void ecc_class_init(ObjectClass *klass, void *data)
dc->realize = ecc_realize;
dc->reset = ecc_reset;
dc->vmsd = &vmstate_ecc;
- dc->props = ecc_properties;
+ device_class_set_props(dc, ecc_properties);
}
static const TypeInfo ecc_info = {
diff --git a/hw/misc/iotkit-sysctl.c b/hw/misc/iotkit-sysctl.c
index 9aa8109463..ec1cc1931a 100644
--- a/hw/misc/iotkit-sysctl.c
+++ b/hw/misc/iotkit-sysctl.c
@@ -508,7 +508,7 @@ static void iotkit_sysctl_class_init(ObjectClass *klass, void *data)
dc->vmsd = &iotkit_sysctl_vmstate;
dc->reset = iotkit_sysctl_reset;
- dc->props = iotkit_sysctl_props;
+ device_class_set_props(dc, iotkit_sysctl_props);
dc->realize = iotkit_sysctl_realize;
}
diff --git a/hw/misc/iotkit-sysinfo.c b/hw/misc/iotkit-sysinfo.c
index 783e613959..b2dcfc4376 100644
--- a/hw/misc/iotkit-sysinfo.c
+++ b/hw/misc/iotkit-sysinfo.c
@@ -121,7 +121,7 @@ static void iotkit_sysinfo_class_init(ObjectClass *klass, void *data)
* does not need a reset function or VMState.
*/
- dc->props = iotkit_sysinfo_props;
+ device_class_set_props(dc, iotkit_sysinfo_props);
}
static const TypeInfo iotkit_sysinfo_info = {
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index 710cdb7263..1a0fad74e1 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -1055,7 +1055,7 @@ static void ivshmem_plain_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
k->realize = ivshmem_plain_realize;
- dc->props = ivshmem_plain_properties;
+ device_class_set_props(dc, ivshmem_plain_properties);
dc->vmsd = &ivshmem_plain_vmsd;
}
@@ -1115,7 +1115,7 @@ static void ivshmem_doorbell_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
k->realize = ivshmem_doorbell_realize;
- dc->props = ivshmem_doorbell_properties;
+ device_class_set_props(dc, ivshmem_doorbell_properties);
dc->vmsd = &ivshmem_doorbell_vmsd;
}
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index e9e6a95eab..b7d0012794 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -1021,7 +1021,7 @@ static void mac_via_class_init(ObjectClass *oc, void *data)
dc->realize = mac_via_realize;
dc->reset = mac_via_reset;
dc->vmsd = &vmstate_mac_via;
- dc->props = mac_via_properties;
+ device_class_set_props(dc, mac_via_properties);
}
static TypeInfo mac_via_info = {
diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
index e38becba6a..e0cc0aac5d 100644
--- a/hw/misc/macio/cuda.c
+++ b/hw/misc/macio/cuda.c
@@ -571,7 +571,7 @@ static void cuda_class_init(ObjectClass *oc, void *data)
dc->realize = cuda_realize;
dc->reset = cuda_reset;
dc->vmsd = &vmstate_cuda;
- dc->props = cuda_properties;
+ device_class_set_props(dc, cuda_properties);
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
}
diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
index 50f20d8206..79222192e8 100644
--- a/hw/misc/macio/macio.c
+++ b/hw/misc/macio/macio.c
@@ -466,7 +466,7 @@ static void macio_newworld_class_init(ObjectClass *oc, void *data)
pdc->realize = macio_newworld_realize;
pdc->device_id = PCI_DEVICE_ID_APPLE_UNI_N_KEYL;
dc->vmsd = &vmstate_macio_newworld;
- dc->props = macio_newworld_properties;
+ device_class_set_props(dc, macio_newworld_properties);
}
static Property macio_properties[] = {
@@ -481,7 +481,7 @@ static void macio_class_init(ObjectClass *klass, void *data)
k->vendor_id = PCI_VENDOR_ID_APPLE;
k->class_id = PCI_CLASS_OTHERS << 8;
- dc->props = macio_properties;
+ device_class_set_props(dc, macio_properties);
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
/* Reason: Uses serial_hds in macio_instance_init */
dc->user_creatable = false;
diff --git a/hw/misc/macio/pmu.c b/hw/misc/macio/pmu.c
index 769aed8052..b8466a4a3f 100644
--- a/hw/misc/macio/pmu.c
+++ b/hw/misc/macio/pmu.c
@@ -795,7 +795,7 @@ static void pmu_class_init(ObjectClass *oc, void *data)
dc->realize = pmu_realize;
dc->reset = pmu_reset;
dc->vmsd = &vmstate_pmu;
- dc->props = pmu_properties;
+ device_class_set_props(dc, pmu_properties);
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
}
diff --git a/hw/misc/mips_cmgcr.c b/hw/misc/mips_cmgcr.c
index 8176d91c0c..3c8b37f700 100644
--- a/hw/misc/mips_cmgcr.c
+++ b/hw/misc/mips_cmgcr.c
@@ -233,7 +233,7 @@ static void mips_gcr_realize(DeviceState *dev, Error **errp)
static void mips_gcr_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = mips_gcr_properties;
+ device_class_set_props(dc, mips_gcr_properties);
dc->vmsd = &vmstate_mips_gcr;
dc->reset = mips_gcr_reset;
dc->realize = mips_gcr_realize;
diff --git a/hw/misc/mips_cpc.c b/hw/misc/mips_cpc.c
index 19ea016b87..2f7b2c9592 100644
--- a/hw/misc/mips_cpc.c
+++ b/hw/misc/mips_cpc.c
@@ -175,7 +175,7 @@ static void mips_cpc_class_init(ObjectClass *klass, void *data)
dc->realize = mips_cpc_realize;
dc->reset = mips_cpc_reset;
dc->vmsd = &vmstate_mips_cpc;
- dc->props = mips_cpc_properties;
+ device_class_set_props(dc, mips_cpc_properties);
}
static const TypeInfo mips_cpc_info = {
diff --git a/hw/misc/mips_itu.c b/hw/misc/mips_itu.c
index ea0cf9726b..3540985258 100644
--- a/hw/misc/mips_itu.c
+++ b/hw/misc/mips_itu.c
@@ -561,7 +561,7 @@ static void mips_itu_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = mips_itu_properties;
+ device_class_set_props(dc, mips_itu_properties);
dc->realize = mips_itu_realize;
dc->reset = mips_itu_reset;
}
diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c
index 10b85bf751..19e154b870 100644
--- a/hw/misc/mos6522.c
+++ b/hw/misc/mos6522.c
@@ -502,7 +502,7 @@ static void mos6522_class_init(ObjectClass *oc, void *data)
dc->reset = mos6522_reset;
dc->vmsd = &vmstate_mos6522;
- dc->props = mos6522_properties;
+ device_class_set_props(dc, mos6522_properties);
mdc->parent_reset = dc->reset;
mdc->set_sr_int = mos6522_set_sr_int;
mdc->portB_write = mos6522_portB_write;
diff --git a/hw/misc/mps2-fpgaio.c b/hw/misc/mps2-fpgaio.c
index 5e8b103914..2f3fbeef34 100644
--- a/hw/misc/mps2-fpgaio.c
+++ b/hw/misc/mps2-fpgaio.c
@@ -300,7 +300,7 @@ static void mps2_fpgaio_class_init(ObjectClass *klass, void *data)
dc->vmsd = &mps2_fpgaio_vmstate;
dc->reset = mps2_fpgaio_reset;
- dc->props = mps2_fpgaio_properties;
+ device_class_set_props(dc, mps2_fpgaio_properties);
}
static const TypeInfo mps2_fpgaio_info = {
diff --git a/hw/misc/mps2-scc.c b/hw/misc/mps2-scc.c
index 25779a1dca..9d0909e7b3 100644
--- a/hw/misc/mps2-scc.c
+++ b/hw/misc/mps2-scc.c
@@ -293,7 +293,7 @@ static void mps2_scc_class_init(ObjectClass *klass, void *data)
dc->realize = mps2_scc_realize;
dc->vmsd = &mps2_scc_vmstate;
dc->reset = mps2_scc_reset;
- dc->props = mps2_scc_properties;
+ device_class_set_props(dc, mps2_scc_properties);
}
static const TypeInfo mps2_scc_info = {
diff --git a/hw/misc/msf2-sysreg.c b/hw/misc/msf2-sysreg.c
index ddc5a30c80..2dce55c364 100644
--- a/hw/misc/msf2-sysreg.c
+++ b/hw/misc/msf2-sysreg.c
@@ -143,7 +143,7 @@ static void msf2_sysreg_class_init(ObjectClass *klass, void *data)
dc->vmsd = &vmstate_msf2_sysreg;
dc->reset = msf2_sysreg_reset;
- dc->props = msf2_sysreg_properties;
+ device_class_set_props(dc, msf2_sysreg_properties);
dc->realize = msf2_sysreg_realize;
}
diff --git a/hw/misc/nrf51_rng.c b/hw/misc/nrf51_rng.c
index 5140981c96..fc86e1b697 100644
--- a/hw/misc/nrf51_rng.c
+++ b/hw/misc/nrf51_rng.c
@@ -245,7 +245,7 @@ static void nrf51_rng_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = nrf51_rng_properties;
+ device_class_set_props(dc, nrf51_rng_properties);
dc->vmsd = &vmstate_rng;
dc->reset = nrf51_rng_reset;
}
diff --git a/hw/misc/pci-testdev.c b/hw/misc/pci-testdev.c
index 74d8571a73..188de4d9cc 100644
--- a/hw/misc/pci-testdev.c
+++ b/hw/misc/pci-testdev.c
@@ -339,7 +339,7 @@ static void pci_testdev_class_init(ObjectClass *klass, void *data)
dc->desc = "PCI Test Device";
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
dc->reset = qdev_pci_testdev_reset;
- dc->props = pci_testdev_properties;
+ device_class_set_props(dc, pci_testdev_properties);
}
static const TypeInfo pci_testdev_info = {
diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c
index d65ac86478..abb10bbcaf 100644
--- a/hw/misc/pvpanic.c
+++ b/hw/misc/pvpanic.c
@@ -21,11 +21,13 @@
#include "hw/qdev-properties.h"
#include "hw/misc/pvpanic.h"
-/* The bit of supported pv event */
+/* The bit of supported pv event, TODO: include uapi header and remove this */
#define PVPANIC_F_PANICKED 0
+#define PVPANIC_F_CRASHLOADED 1
/* The pv event value */
#define PVPANIC_PANICKED (1 << PVPANIC_F_PANICKED)
+#define PVPANIC_CRASHLOADED (1 << PVPANIC_F_CRASHLOADED)
#define ISA_PVPANIC_DEVICE(obj) \
OBJECT_CHECK(PVPanicState, (obj), TYPE_PVPANIC)
@@ -34,7 +36,7 @@ static void handle_event(int event)
{
static bool logged;
- if (event & ~PVPANIC_PANICKED && !logged) {
+ if (event & ~(PVPANIC_PANICKED | PVPANIC_CRASHLOADED) && !logged) {
qemu_log_mask(LOG_GUEST_ERROR, "pvpanic: unknown event %#x.\n", event);
logged = true;
}
@@ -43,6 +45,11 @@ static void handle_event(int event)
qemu_system_guest_panicked(NULL);
return;
}
+
+ if (event & PVPANIC_CRASHLOADED) {
+ qemu_system_guest_crashloaded(NULL);
+ return;
+ }
}
#include "hw/isa/isa.h"
@@ -111,7 +118,7 @@ static void pvpanic_isa_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = pvpanic_isa_realizefn;
- dc->props = pvpanic_isa_properties;
+ device_class_set_props(dc, pvpanic_isa_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/misc/tz-mpc.c b/hw/misc/tz-mpc.c
index 49dd6050bd..98f151237f 100644
--- a/hw/misc/tz-mpc.c
+++ b/hw/misc/tz-mpc.c
@@ -596,7 +596,7 @@ static void tz_mpc_class_init(ObjectClass *klass, void *data)
dc->realize = tz_mpc_realize;
dc->vmsd = &tz_mpc_vmstate;
dc->reset = tz_mpc_reset;
- dc->props = tz_mpc_properties;
+ device_class_set_props(dc, tz_mpc_properties);
}
static const TypeInfo tz_mpc_info = {
diff --git a/hw/misc/tz-msc.c b/hw/misc/tz-msc.c
index 7d522ac0ec..acbe94400b 100644
--- a/hw/misc/tz-msc.c
+++ b/hw/misc/tz-msc.c
@@ -293,7 +293,7 @@ static void tz_msc_class_init(ObjectClass *klass, void *data)
dc->realize = tz_msc_realize;
dc->vmsd = &tz_msc_vmstate;
dc->reset = tz_msc_reset;
- dc->props = tz_msc_properties;
+ device_class_set_props(dc, tz_msc_properties);
}
static const TypeInfo tz_msc_info = {
diff --git a/hw/misc/tz-ppc.c b/hw/misc/tz-ppc.c
index 181a5f1e81..6431257b52 100644
--- a/hw/misc/tz-ppc.c
+++ b/hw/misc/tz-ppc.c
@@ -319,7 +319,7 @@ static void tz_ppc_class_init(ObjectClass *klass, void *data)
dc->realize = tz_ppc_realize;
dc->vmsd = &tz_ppc_vmstate;
dc->reset = tz_ppc_reset;
- dc->props = tz_ppc_properties;
+ device_class_set_props(dc, tz_ppc_properties);
}
static const TypeInfo tz_ppc_info = {
diff --git a/hw/misc/unimp.c b/hw/misc/unimp.c
index 0e1cb24629..bc4084d344 100644
--- a/hw/misc/unimp.c
+++ b/hw/misc/unimp.c
@@ -79,7 +79,7 @@ static void unimp_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = unimp_realize;
- dc->props = unimp_properties;
+ device_class_set_props(dc, unimp_properties);
}
static const TypeInfo unimp_info = {
diff --git a/hw/net/allwinner_emac.c b/hw/net/allwinner_emac.c
index e055a661c4..e9bbff8710 100644
--- a/hw/net/allwinner_emac.c
+++ b/hw/net/allwinner_emac.c
@@ -519,7 +519,7 @@ static void aw_emac_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = aw_emac_realize;
- dc->props = aw_emac_properties;
+ device_class_set_props(dc, aw_emac_properties);
dc->reset = aw_emac_reset;
dc->vmsd = &vmstate_aw_emac;
}
diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
index b8be73dc55..871fcf2031 100644
--- a/hw/net/cadence_gem.c
+++ b/hw/net/cadence_gem.c
@@ -1627,7 +1627,7 @@ static void gem_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = gem_realize;
- dc->props = gem_properties;
+ device_class_set_props(dc, gem_properties);
dc->vmsd = &vmstate_cadence_gem;
dc->reset = gem_reset;
}
diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c
index cdc2631c0c..a134d431ae 100644
--- a/hw/net/dp8393x.c
+++ b/hw/net/dp8393x.c
@@ -963,7 +963,7 @@ static void dp8393x_class_init(ObjectClass *klass, void *data)
dc->realize = dp8393x_realize;
dc->reset = dp8393x_reset;
dc->vmsd = &vmstate_dp8393x;
- dc->props = dp8393x_properties;
+ device_class_set_props(dc, dp8393x_properties);
}
static const TypeInfo dp8393x_info = {
diff --git a/hw/net/e1000.c b/hw/net/e1000.c
index a73f8d404e..0b833d5a15 100644
--- a/hw/net/e1000.c
+++ b/hw/net/e1000.c
@@ -1764,7 +1764,7 @@ static void e1000_class_init(ObjectClass *klass, void *data)
dc->desc = "Intel Gigabit Ethernet";
dc->reset = qdev_e1000_reset;
dc->vmsd = &vmstate_e1000;
- dc->props = e1000_properties;
+ device_class_set_props(dc, e1000_properties);
}
static void e1000_instance_init(Object *obj)
diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c
index b69fd7d8ad..a91dbdca3c 100644
--- a/hw/net/e1000e.c
+++ b/hw/net/e1000e.c
@@ -684,7 +684,6 @@ static void e1000e_class_init(ObjectClass *class, void *data)
dc->desc = "Intel 82574L GbE Controller";
dc->reset = e1000e_qdev_reset;
dc->vmsd = &e1000e_vmstate;
- dc->props = e1000e_properties;
e1000e_prop_disable_vnet = qdev_prop_uint8;
e1000e_prop_disable_vnet.description = "Do not use virtio headers, "
@@ -697,6 +696,7 @@ static void e1000e_class_init(ObjectClass *class, void *data)
e1000e_prop_subsys = qdev_prop_uint16;
e1000e_prop_subsys.description = "PCI device Subsystem ID";
+ device_class_set_props(dc, e1000e_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c
index 6cc97769d9..f6474f0e68 100644
--- a/hw/net/eepro100.c
+++ b/hw/net/eepro100.c
@@ -2060,7 +2060,7 @@ static void eepro100_class_init(ObjectClass *klass, void *data)
info = eepro100_get_class_by_name(object_class_get_name(klass));
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
- dc->props = e100_properties;
+ device_class_set_props(dc, e100_properties);
dc->desc = info->desc;
k->vendor_id = PCI_VENDOR_ID_INTEL;
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
diff --git a/hw/net/etraxfs_eth.c b/hw/net/etraxfs_eth.c
index f30d963487..27fd069b96 100644
--- a/hw/net/etraxfs_eth.c
+++ b/hw/net/etraxfs_eth.c
@@ -639,7 +639,7 @@ static void etraxfs_eth_class_init(ObjectClass *klass, void *data)
dc->realize = etraxfs_eth_realize;
dc->reset = etraxfs_eth_reset;
- dc->props = etraxfs_eth_properties;
+ device_class_set_props(dc, etraxfs_eth_properties);
/* Reason: dma_out, dma_in are not user settable */
dc->user_creatable = false;
}
diff --git a/hw/net/fsl_etsec/etsec.c b/hw/net/fsl_etsec/etsec.c
index 717de76569..475f3c887a 100644
--- a/hw/net/fsl_etsec/etsec.c
+++ b/hw/net/fsl_etsec/etsec.c
@@ -423,7 +423,7 @@ static void etsec_class_init(ObjectClass *klass, void *data)
dc->realize = etsec_realize;
dc->reset = etsec_reset;
- dc->props = etsec_properties;
+ device_class_set_props(dc, etsec_properties);
/* Supported by ppce500 machine */
dc->user_creatable = true;
}
diff --git a/hw/net/ftgmac100.c b/hw/net/ftgmac100.c
index 86ac25894a..4ad2594d3a 100644
--- a/hw/net/ftgmac100.c
+++ b/hw/net/ftgmac100.c
@@ -1075,7 +1075,7 @@ static void ftgmac100_class_init(ObjectClass *klass, void *data)
dc->vmsd = &vmstate_ftgmac100;
dc->reset = ftgmac100_reset;
- dc->props = ftgmac100_properties;
+ device_class_set_props(dc, ftgmac100_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
dc->realize = ftgmac100_realize;
dc->desc = "Faraday FTGMAC100 Gigabit Ethernet emulation";
@@ -1237,7 +1237,7 @@ static void aspeed_mii_class_init(ObjectClass *klass, void *data)
dc->reset = aspeed_mii_reset;
dc->realize = aspeed_mii_realize;
dc->desc = "Aspeed MII controller";
- dc->props = aspeed_mii_properties;
+ device_class_set_props(dc, aspeed_mii_properties);
}
static const TypeInfo aspeed_mii_info = {
diff --git a/hw/net/imx_fec.c b/hw/net/imx_fec.c
index bd99236864..6a124a154a 100644
--- a/hw/net/imx_fec.c
+++ b/hw/net/imx_fec.c
@@ -901,15 +901,16 @@ static void imx_eth_write(void *opaque, hwaddr offset, uint64_t value,
s->regs[index] = 0;
}
break;
- case ENET_TDAR1: /* FALLTHROUGH */
- case ENET_TDAR2: /* FALLTHROUGH */
+ case ENET_TDAR1:
+ case ENET_TDAR2:
if (unlikely(single_tx_ring)) {
qemu_log_mask(LOG_GUEST_ERROR,
"[%s]%s: trying to access TDAR2 or TDAR1\n",
TYPE_IMX_FEC, __func__);
return;
}
- case ENET_TDAR: /* FALLTHROUGH */
+ /* fall through */
+ case ENET_TDAR:
if (s->regs[ENET_ECR] & ENET_ECR_ETHEREN) {
s->regs[index] = ENET_TDAR_TDAR;
imx_eth_do_tx(s, index);
@@ -1337,7 +1338,7 @@ static void imx_eth_class_init(ObjectClass *klass, void *data)
dc->vmsd = &vmstate_imx_eth;
dc->reset = imx_eth_reset;
- dc->props = imx_eth_properties;
+ device_class_set_props(dc, imx_eth_properties);
dc->realize = imx_eth_realize;
dc->desc = "i.MX FEC/ENET Ethernet Controller";
}
diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c
index ed551f2178..da7e0bb0e8 100644
--- a/hw/net/lan9118.c
+++ b/hw/net/lan9118.c
@@ -1369,7 +1369,7 @@ static void lan9118_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = lan9118_reset;
- dc->props = lan9118_properties;
+ device_class_set_props(dc, lan9118_properties);
dc->vmsd = &vmstate_lan9118;
dc->realize = lan9118_realize;
}
diff --git a/hw/net/lance.c b/hw/net/lance.c
index 4d96299041..688724db0b 100644
--- a/hw/net/lance.c
+++ b/hw/net/lance.c
@@ -153,7 +153,7 @@ static void lance_class_init(ObjectClass *klass, void *data)
dc->fw_name = "ethernet";
dc->reset = lance_reset;
dc->vmsd = &vmstate_lance;
- dc->props = lance_properties;
+ device_class_set_props(dc, lance_properties);
}
static const TypeInfo lance_info = {
diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c
index 8fcf354a4b..9327ac8a30 100644
--- a/hw/net/mcf_fec.c
+++ b/hw/net/mcf_fec.c
@@ -670,7 +670,7 @@ static void mcf_fec_class_init(ObjectClass *oc, void *data)
dc->realize = mcf_fec_realize;
dc->desc = "MCF Fast Ethernet Controller network device";
dc->reset = mcf_fec_reset;
- dc->props = mcf_fec_properties;
+ device_class_set_props(dc, mcf_fec_properties);
}
static const TypeInfo mcf_fec_info = {
diff --git a/hw/net/milkymist-minimac2.c b/hw/net/milkymist-minimac2.c
index 86b6d28033..1ba01754ee 100644
--- a/hw/net/milkymist-minimac2.c
+++ b/hw/net/milkymist-minimac2.c
@@ -530,7 +530,7 @@ static void milkymist_minimac2_class_init(ObjectClass *klass, void *data)
dc->realize = milkymist_minimac2_realize;
dc->reset = milkymist_minimac2_reset;
dc->vmsd = &vmstate_milkymist_minimac2;
- dc->props = milkymist_minimac2_properties;
+ device_class_set_props(dc, milkymist_minimac2_properties);
}
static const TypeInfo milkymist_minimac2_info = {
diff --git a/hw/net/mipsnet.c b/hw/net/mipsnet.c
index 380ff5a5f4..0c578c430c 100644
--- a/hw/net/mipsnet.c
+++ b/hw/net/mipsnet.c
@@ -278,7 +278,7 @@ static void mipsnet_class_init(ObjectClass *klass, void *data)
dc->desc = "MIPS Simulator network device";
dc->reset = mipsnet_sysbus_reset;
dc->vmsd = &vmstate_mipsnet;
- dc->props = mipsnet_properties;
+ device_class_set_props(dc, mipsnet_properties);
}
static const TypeInfo mipsnet_info = {
diff --git a/hw/net/ne2000-isa.c b/hw/net/ne2000-isa.c
index 6fcf3d5cd9..e744eff153 100644
--- a/hw/net/ne2000-isa.c
+++ b/hw/net/ne2000-isa.c
@@ -89,7 +89,7 @@ static void isa_ne2000_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = isa_ne2000_realizefn;
- dc->props = ne2000_isa_properties;
+ device_class_set_props(dc, ne2000_isa_properties);
dc->vmsd = &vmstate_isa_ne2000;
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/ne2000-pci.c b/hw/net/ne2000-pci.c
index 9a20d427e3..e11d67bf75 100644
--- a/hw/net/ne2000-pci.c
+++ b/hw/net/ne2000-pci.c
@@ -112,7 +112,7 @@ static void ne2000_class_init(ObjectClass *klass, void *data)
k->device_id = PCI_DEVICE_ID_REALTEK_8029;
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
dc->vmsd = &vmstate_pci_ne2000;
- dc->props = ne2000_properties;
+ device_class_set_props(dc, ne2000_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c
index 84a95da1d5..6b338c2f29 100644
--- a/hw/net/opencores_eth.c
+++ b/hw/net/opencores_eth.c
@@ -755,7 +755,7 @@ static void open_eth_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
dc->desc = "Opencores 10/100 Mbit Ethernet";
dc->reset = qdev_open_eth_reset;
- dc->props = open_eth_properties;
+ device_class_set_props(dc, open_eth_properties);
}
static const TypeInfo open_eth_info = {
diff --git a/hw/net/pcnet-pci.c b/hw/net/pcnet-pci.c
index d067d21e2c..d1f31e0272 100644
--- a/hw/net/pcnet-pci.c
+++ b/hw/net/pcnet-pci.c
@@ -272,7 +272,7 @@ static void pcnet_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
dc->reset = pci_reset;
dc->vmsd = &vmstate_pci_pcnet;
- dc->props = pcnet_properties;
+ device_class_set_props(dc, pcnet_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c
index 50f9e33e2f..81dd3b5f14 100644
--- a/hw/net/rocker/rocker.c
+++ b/hw/net/rocker/rocker.c
@@ -1519,7 +1519,7 @@ static void rocker_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
dc->desc = "Rocker Switch";
dc->reset = rocker_reset;
- dc->props = rocker_properties;
+ device_class_set_props(dc, rocker_properties);
dc->vmsd = &rocker_vmsd;
}
diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c
index 88a97d756d..ae4739bc09 100644
--- a/hw/net/rtl8139.c
+++ b/hw/net/rtl8139.c
@@ -3435,7 +3435,7 @@ static void rtl8139_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
dc->reset = rtl8139_reset;
dc->vmsd = &vmstate_rtl8139;
- dc->props = rtl8139_properties;
+ device_class_set_props(dc, rtl8139_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c
index e574635969..e9eb6f6c05 100644
--- a/hw/net/smc91c111.c
+++ b/hw/net/smc91c111.c
@@ -798,7 +798,7 @@ static void smc91c111_class_init(ObjectClass *klass, void *data)
dc->realize = smc91c111_realize;
dc->reset = smc91c111_reset;
dc->vmsd = &vmstate_smc91c111;
- dc->props = smc91c111_properties;
+ device_class_set_props(dc, smc91c111_properties);
}
static const TypeInfo smc91c111_info = {
diff --git a/hw/net/spapr_llan.c b/hw/net/spapr_llan.c
index 3d96884d66..80f5a1dd37 100644
--- a/hw/net/spapr_llan.c
+++ b/hw/net/spapr_llan.c
@@ -856,7 +856,7 @@ static void spapr_vlan_class_init(ObjectClass *klass, void *data)
k->dt_compatible = "IBM,l-lan";
k->signal_mask = 0x1;
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
- dc->props = spapr_vlan_properties;
+ device_class_set_props(dc, spapr_vlan_properties);
k->rtce_window_size = 0x10000000;
dc->vmsd = &vmstate_spapr_llan;
}
diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c
index 3aca2a09f3..cb6e2509ea 100644
--- a/hw/net/stellaris_enet.c
+++ b/hw/net/stellaris_enet.c
@@ -507,7 +507,7 @@ static void stellaris_enet_class_init(ObjectClass *klass, void *data)
dc->realize = stellaris_enet_realize;
dc->reset = stellaris_enet_reset;
- dc->props = stellaris_enet_properties;
+ device_class_set_props(dc, stellaris_enet_properties);
dc->vmsd = &vmstate_stellaris_enet;
}
diff --git a/hw/net/sungem.c b/hw/net/sungem.c
index f31d41ac5b..89da51f7f6 100644
--- a/hw/net/sungem.c
+++ b/hw/net/sungem.c
@@ -1429,7 +1429,7 @@ static void sungem_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
dc->vmsd = &vmstate_sungem;
dc->reset = sungem_reset;
- dc->props = sungem_properties;
+ device_class_set_props(dc, sungem_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/sunhme.c b/hw/net/sunhme.c
index 2243b7cf7b..8863601f6c 100644
--- a/hw/net/sunhme.c
+++ b/hw/net/sunhme.c
@@ -958,7 +958,7 @@ static void sunhme_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
dc->vmsd = &vmstate_hme;
dc->reset = sunhme_reset;
- dc->props = sunhme_properties;
+ device_class_set_props(dc, sunhme_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/tulip.c b/hw/net/tulip.c
index f85f54341f..cfac2719d3 100644
--- a/hw/net/tulip.c
+++ b/hw/net/tulip.c
@@ -1004,7 +1004,7 @@ static void tulip_class_init(ObjectClass *klass, void *data)
k->subsystem_id = 0x104f;
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
dc->vmsd = &vmstate_pci_tulip;
- dc->props = tulip_properties;
+ device_class_set_props(dc, tulip_properties);
dc->reset = tulip_qdev_reset;
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index d7d3ad6dc7..3627bb1717 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -3236,7 +3236,7 @@ static void virtio_net_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = virtio_net_properties;
+ device_class_set_props(dc, virtio_net_properties);
dc->vmsd = &vmstate_virtio_net;
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
vdc->realize = virtio_net_device_realize;
diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 39ff6624c5..6d91cd8309 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -2506,7 +2506,7 @@ static void vmxnet3_class_init(ObjectClass *class, void *data)
dc->desc = "VMWare Paravirtualized Ethernet v3";
dc->reset = vmxnet3_qdev_reset;
dc->vmsd = &vmstate_vmxnet3;
- dc->props = vmxnet3_properties;
+ device_class_set_props(dc, vmxnet3_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c
index 2ea8d2ec72..574dd47b41 100644
--- a/hw/net/xgmac.c
+++ b/hw/net/xgmac.c
@@ -414,7 +414,7 @@ static void xgmac_enet_class_init(ObjectClass *klass, void *data)
dc->realize = xgmac_enet_realize;
dc->vmsd = &vmstate_xgmac;
- dc->props = xgmac_properties;
+ device_class_set_props(dc, xgmac_properties);
}
static const TypeInfo xgmac_enet_info = {
diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c
index 2c8c065401..704788811a 100644
--- a/hw/net/xilinx_axienet.c
+++ b/hw/net/xilinx_axienet.c
@@ -1025,7 +1025,7 @@ static void xilinx_enet_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = xilinx_enet_realize;
- dc->props = xilinx_enet_properties;
+ device_class_set_props(dc, xilinx_enet_properties);
dc->reset = xilinx_axienet_reset;
}
diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c
index 384e72b157..cf07e698b3 100644
--- a/hw/net/xilinx_ethlite.c
+++ b/hw/net/xilinx_ethlite.c
@@ -262,7 +262,7 @@ static void xilinx_ethlite_class_init(ObjectClass *klass, void *data)
dc->realize = xilinx_ethlite_realize;
dc->reset = xilinx_ethlite_reset;
- dc->props = xilinx_ethlite_properties;
+ device_class_set_props(dc, xilinx_ethlite_properties);
}
static const TypeInfo xilinx_ethlite_info = {
diff --git a/hw/nvram/ds1225y.c b/hw/nvram/ds1225y.c
index 934e09bf75..d5cb922287 100644
--- a/hw/nvram/ds1225y.c
+++ b/hw/nvram/ds1225y.c
@@ -153,7 +153,7 @@ static void nvram_sysbus_class_init(ObjectClass *klass, void *data)
dc->realize = nvram_sysbus_realize;
dc->vmsd = &vmstate_nvram;
- dc->props = nvram_sysbus_properties;
+ device_class_set_props(dc, nvram_sysbus_properties);
}
static const TypeInfo nvram_sysbus_info = {
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
index 3416367523..d46a2bec3f 100644
--- a/hw/nvram/eeprom_at24c.c
+++ b/hw/nvram/eeprom_at24c.c
@@ -182,7 +182,7 @@ void at24c_eeprom_class_init(ObjectClass *klass, void *data)
k->recv = &at24c_eeprom_recv;
k->send = &at24c_eeprom_send;
- dc->props = at24c_eeprom_props;
+ device_class_set_props(dc, at24c_eeprom_props);
dc->reset = at24c_eeprom_reset;
}
diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
index 5d879c471e..179b302f01 100644
--- a/hw/nvram/fw_cfg.c
+++ b/hw/nvram/fw_cfg.c
@@ -1171,7 +1171,7 @@ static void fw_cfg_io_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = fw_cfg_io_realize;
- dc->props = fw_cfg_io_properties;
+ device_class_set_props(dc, fw_cfg_io_properties);
}
static const TypeInfo fw_cfg_io_info = {
@@ -1234,7 +1234,7 @@ static void fw_cfg_mem_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = fw_cfg_mem_realize;
- dc->props = fw_cfg_mem_properties;
+ device_class_set_props(dc, fw_cfg_mem_properties);
}
static const TypeInfo fw_cfg_mem_info = {
diff --git a/hw/nvram/mac_nvram.c b/hw/nvram/mac_nvram.c
index 9a47e35b8e..2e8a1e3812 100644
--- a/hw/nvram/mac_nvram.c
+++ b/hw/nvram/mac_nvram.c
@@ -128,7 +128,7 @@ static void macio_nvram_class_init(ObjectClass *oc, void *data)
dc->unrealize = macio_nvram_unrealizefn;
dc->reset = macio_nvram_reset;
dc->vmsd = &vmstate_macio_nvram;
- dc->props = macio_nvram_properties;
+ device_class_set_props(dc, macio_nvram_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/nvram/nrf51_nvm.c b/hw/nvram/nrf51_nvm.c
index 4d678f994e..f2283c1a8d 100644
--- a/hw/nvram/nrf51_nvm.c
+++ b/hw/nvram/nrf51_nvm.c
@@ -369,7 +369,7 @@ static void nrf51_nvm_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = nrf51_nvm_properties;
+ device_class_set_props(dc, nrf51_nvm_properties);
dc->vmsd = &vmstate_nvm;
dc->realize = nrf51_nvm_realize;
dc->reset = nrf51_nvm_reset;
diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
index 838082b451..877ddef7b9 100644
--- a/hw/nvram/spapr_nvram.c
+++ b/hw/nvram/spapr_nvram.c
@@ -269,7 +269,7 @@ static void spapr_nvram_class_init(ObjectClass *klass, void *data)
k->dt_type = "nvram";
k->dt_compatible = "qemu,spapr-nvram";
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
- dc->props = spapr_nvram_properties;
+ device_class_set_props(dc, spapr_nvram_properties);
dc->vmsd = &vmstate_spapr_nvram;
/* Reason: Internal device only, uses spapr_rtas_register() in realize() */
dc->user_creatable = false;
diff --git a/hw/pci-bridge/gen_pcie_root_port.c b/hw/pci-bridge/gen_pcie_root_port.c
index 9eaefebca8..bb26e272c1 100644
--- a/hw/pci-bridge/gen_pcie_root_port.c
+++ b/hw/pci-bridge/gen_pcie_root_port.c
@@ -147,7 +147,7 @@ static void gen_rp_dev_class_init(ObjectClass *klass, void *data)
k->device_id = PCI_DEVICE_ID_REDHAT_PCIE_RP;
dc->desc = "PCI Express Root Port";
dc->vmsd = &vmstate_rp_dev;
- dc->props = gen_rp_props;
+ device_class_set_props(dc, gen_rp_props);
device_class_set_parent_realize(dc, gen_rp_realize, &rpc->parent_realize);
diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c
index cc80cb4898..4a080b7c7b 100644
--- a/hw/pci-bridge/pci_bridge_dev.c
+++ b/hw/pci-bridge/pci_bridge_dev.c
@@ -258,7 +258,7 @@ static void pci_bridge_dev_class_init(ObjectClass *klass, void *data)
k->is_bridge = true;
dc->desc = "Standard PCI Bridge";
dc->reset = qdev_pci_bridge_dev_reset;
- dc->props = pci_bridge_dev_properties;
+ device_class_set_props(dc, pci_bridge_dev_properties);
dc->vmsd = &pci_bridge_dev_vmstate;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
hc->plug = pci_bridge_dev_plug_cb;
diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expander_bridge.c
index 0592818447..47aaaf8fd1 100644
--- a/hw/pci-bridge/pci_expander_bridge.c
+++ b/hw/pci-bridge/pci_expander_bridge.c
@@ -309,7 +309,7 @@ static void pxb_dev_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_BRIDGE_HOST;
dc->desc = "PCI Expander Bridge";
- dc->props = pxb_dev_properties;
+ device_class_set_props(dc, pxb_dev_properties);
dc->hotpluggable = false;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
}
@@ -347,7 +347,7 @@ static void pxb_pcie_dev_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_BRIDGE_HOST;
dc->desc = "PCI Express Expander Bridge";
- dc->props = pxb_dev_properties;
+ device_class_set_props(dc, pxb_dev_properties);
dc->hotpluggable = false;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
}
diff --git a/hw/pci-bridge/pcie_pci_bridge.c b/hw/pci-bridge/pcie_pci_bridge.c
index 7679bef6c1..eade133968 100644
--- a/hw/pci-bridge/pcie_pci_bridge.c
+++ b/hw/pci-bridge/pcie_pci_bridge.c
@@ -152,7 +152,7 @@ static void pcie_pci_bridge_class_init(ObjectClass *klass, void *data)
k->exit = pcie_pci_bridge_exit;
k->config_write = pcie_pci_bridge_write_config;
dc->vmsd = &pcie_pci_bridge_dev_vmstate;
- dc->props = pcie_pci_bridge_dev_properties;
+ device_class_set_props(dc, pcie_pci_bridge_dev_properties);
dc->reset = &pcie_pci_bridge_reset;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
hc->plug = pci_bridge_dev_plug_cb;
diff --git a/hw/pci-bridge/pcie_root_port.c b/hw/pci-bridge/pcie_root_port.c
index 012c2cb12c..0ba4e4dea4 100644
--- a/hw/pci-bridge/pcie_root_port.c
+++ b/hw/pci-bridge/pcie_root_port.c
@@ -174,7 +174,7 @@ static void rp_class_init(ObjectClass *klass, void *data)
k->exit = rp_exit;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->reset = rp_reset;
- dc->props = rp_props;
+ device_class_set_props(dc, rp_props);
}
static const TypeInfo rp_info = {
diff --git a/hw/pci-bridge/xio3130_downstream.c b/hw/pci-bridge/xio3130_downstream.c
index a9f084b863..153a4acad2 100644
--- a/hw/pci-bridge/xio3130_downstream.c
+++ b/hw/pci-bridge/xio3130_downstream.c
@@ -169,7 +169,7 @@ static void xio3130_downstream_class_init(ObjectClass *klass, void *data)
dc->desc = "TI X3130 Downstream Port of PCI Express Switch";
dc->reset = xio3130_downstream_reset;
dc->vmsd = &vmstate_xio3130_downstream;
- dc->props = xio3130_downstream_props;
+ device_class_set_props(dc, xio3130_downstream_props);
}
static const TypeInfo xio3130_downstream_info = {
diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c
index 71e9b0d9b5..dd245516dd 100644
--- a/hw/pci-host/designware.c
+++ b/hw/pci-host/designware.c
@@ -182,7 +182,7 @@ designware_pcie_root_config_read(PCIDevice *d, uint32_t address, int len)
break;
case DESIGNWARE_PCIE_ATU_CR1:
- case DESIGNWARE_PCIE_ATU_CR2: /* FALLTHROUGH */
+ case DESIGNWARE_PCIE_ATU_CR2:
val = viewport->cr[(address - DESIGNWARE_PCIE_ATU_CR1) /
sizeof(uint32_t)];
break;
diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c
index 537273e578..24ccdf6ceb 100644
--- a/hw/pci-host/grackle.c
+++ b/hw/pci-host/grackle.c
@@ -168,7 +168,7 @@ static void grackle_class_init(ObjectClass *klass, void *data)
SysBusDeviceClass *sbc = SYS_BUS_DEVICE_CLASS(klass);
dc->realize = grackle_realize;
- dc->props = grackle_properties;
+ device_class_set_props(dc, grackle_properties);
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->fw_name = "pci";
sbc->explicit_ofw_unit_address = grackle_ofw_unit_address;
diff --git a/hw/pci-host/i440fx.c b/hw/pci-host/i440fx.c
index bae7b42327..11050a0f8b 100644
--- a/hw/pci-host/i440fx.c
+++ b/hw/pci-host/i440fx.c
@@ -396,7 +396,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->props = i440fx_props;
+ device_class_set_props(dc, i440fx_props);
/* Reason: needs to be wired up by pc_init1 */
dc->user_creatable = false;
}
diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c
index 8bed8e8941..d71072731d 100644
--- a/hw/pci-host/ppce500.c
+++ b/hw/pci-host/ppce500.c
@@ -531,7 +531,7 @@ static void e500_pcihost_class_init(ObjectClass *klass, void *data)
dc->realize = e500_pcihost_realize;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
- dc->props = pcihost_properties;
+ device_class_set_props(dc, pcihost_properties);
dc->vmsd = &vmstate_ppce500_pci;
}
diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c
index afa136ded3..f2f8821109 100644
--- a/hw/pci-host/prep.c
+++ b/hw/pci-host/prep.c
@@ -415,7 +415,7 @@ static void raven_pcihost_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->realize = raven_pcihost_realizefn;
- dc->props = raven_pcihost_properties;
+ device_class_set_props(dc, raven_pcihost_properties);
dc->fw_name = "pci";
}
diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
index 6342f73b9f..a9b9ccc876 100644
--- a/hw/pci-host/q35.c
+++ b/hw/pci-host/q35.c
@@ -202,7 +202,7 @@ static void q35_host_class_init(ObjectClass *klass, void *data)
hc->root_bus_path = q35_host_root_bus_path;
dc->realize = q35_host_realize;
- dc->props = q35_host_props;
+ device_class_set_props(dc, q35_host_props);
/* Reason: needs to be wired up by pc_q35_init */
dc->user_creatable = false;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
@@ -682,7 +682,7 @@ static void mch_class_init(ObjectClass *klass, void *data)
k->realize = mch_realize;
k->config_write = mch_write_config;
dc->reset = mch_reset;
- dc->props = mch_props;
+ device_class_set_props(dc, mch_props);
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->desc = "Host bridge";
dc->vmsd = &vmstate_mch;
diff --git a/hw/pci-host/sabre.c b/hw/pci-host/sabre.c
index fae20ee97c..2b8503b709 100644
--- a/hw/pci-host/sabre.c
+++ b/hw/pci-host/sabre.c
@@ -521,7 +521,7 @@ static void sabre_class_init(ObjectClass *klass, void *data)
dc->realize = sabre_realize;
dc->reset = sabre_reset;
- dc->props = sabre_properties;
+ device_class_set_props(dc, sabre_properties);
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->fw_name = "pci";
sbc->explicit_ofw_unit_address = sabre_ofw_unit_address;
diff --git a/hw/pci-host/uninorth.c b/hw/pci-host/uninorth.c
index 75bc506965..cf70b76fe2 100644
--- a/hw/pci-host/uninorth.c
+++ b/hw/pci-host/uninorth.c
@@ -476,7 +476,7 @@ static void pci_unin_main_class_init(ObjectClass *klass, void *data)
SysBusDeviceClass *sbc = SYS_BUS_DEVICE_CLASS(klass);
dc->realize = pci_unin_main_realize;
- dc->props = pci_unin_main_pci_host_props;
+ device_class_set_props(dc, pci_unin_main_pci_host_props);
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->fw_name = "pci";
sbc->explicit_ofw_unit_address = pci_unin_main_ofw_unit_address;
diff --git a/hw/pci-host/versatile.c b/hw/pci-host/versatile.c
index b731d0544f..cfb9a78ea6 100644
--- a/hw/pci-host/versatile.c
+++ b/hw/pci-host/versatile.c
@@ -509,7 +509,7 @@ static void pci_vpb_class_init(ObjectClass *klass, void *data)
dc->realize = pci_vpb_realize;
dc->reset = pci_vpb_reset;
dc->vmsd = &pci_vpb_vmstate;
- dc->props = pci_vpb_properties;
+ device_class_set_props(dc, pci_vpb_properties);
}
static const TypeInfo pci_vpb_info = {
diff --git a/hw/pci-host/xilinx-pcie.c b/hw/pci-host/xilinx-pcie.c
index 17d5024349..e06f2b59cf 100644
--- a/hw/pci-host/xilinx-pcie.c
+++ b/hw/pci-host/xilinx-pcie.c
@@ -177,7 +177,7 @@ static void xilinx_pcie_host_class_init(ObjectClass *klass, void *data)
dc->realize = xilinx_pcie_host_realize;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->fw_name = "pci";
- dc->props = xilinx_pcie_host_props;
+ device_class_set_props(dc, xilinx_pcie_host_props);
}
static const TypeInfo xilinx_pcie_host_info = {
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 3ac7961451..e1ed6677e1 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -2624,7 +2624,7 @@ static void pci_device_class_init(ObjectClass *klass, void *data)
k->realize = pci_qdev_realize;
k->unrealize = pci_qdev_unrealize;
k->bus_type = TYPE_PCI_BUS;
- k->props = pci_props;
+ device_class_set_props(k, pci_props);
}
static void pci_device_class_base_init(ObjectClass *klass, void *data)
diff --git a/hw/pci/pcie_port.c b/hw/pci/pcie_port.c
index c19a9be592..f8263cb306 100644
--- a/hw/pci/pcie_port.c
+++ b/hw/pci/pcie_port.c
@@ -133,7 +133,7 @@ static void pcie_port_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
- dc->props = pcie_port_props;
+ device_class_set_props(dc, pcie_port_props);
}
static const TypeInfo pcie_port_type_info = {
@@ -155,7 +155,7 @@ static void pcie_slot_class_init(ObjectClass *oc, void *data)
DeviceClass *dc = DEVICE_CLASS(oc);
HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc);
- dc->props = pcie_slot_props;
+ device_class_set_props(dc, pcie_slot_props);
hc->pre_plug = pcie_cap_slot_pre_plug_cb;
hc->plug = pcie_cap_slot_plug_cb;
hc->unplug = pcie_cap_slot_unplug_cb;
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index e2735bb8dd..e61994cf5a 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -1614,7 +1614,7 @@ static void pnv_chip_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_CPU, dc->categories);
dc->realize = pnv_chip_realize;
- dc->props = pnv_chip_properties;
+ device_class_set_props(dc, pnv_chip_properties);
dc->desc = "PowerNV Chip";
}
diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
index 2651044278..8ca5fbd1a9 100644
--- a/hw/ppc/pnv_core.c
+++ b/hw/ppc/pnv_core.c
@@ -323,7 +323,7 @@ static void pnv_core_class_init(ObjectClass *oc, void *data)
dc->realize = pnv_core_realize;
dc->unrealize = pnv_core_unrealize;
- dc->props = pnv_core_properties;
+ device_class_set_props(dc, pnv_core_properties);
}
#define DEFINE_PNV_CORE_TYPE(family, cpu_model) \
@@ -421,7 +421,7 @@ static void pnv_quad_class_init(ObjectClass *oc, void *data)
DeviceClass *dc = DEVICE_CLASS(oc);
dc->realize = pnv_quad_realize;
- dc->props = pnv_quad_properties;
+ device_class_set_props(dc, pnv_quad_properties);
}
static const TypeInfo pnv_quad_info = {
diff --git a/hw/ppc/pnv_homer.c b/hw/ppc/pnv_homer.c
index a08b7914f7..93ae42f7e4 100644
--- a/hw/ppc/pnv_homer.c
+++ b/hw/ppc/pnv_homer.c
@@ -359,7 +359,7 @@ static void pnv_homer_class_init(ObjectClass *klass, void *data)
dc->realize = pnv_homer_realize;
dc->desc = "PowerNV HOMER Memory";
- dc->props = pnv_homer_properties;
+ device_class_set_props(dc, pnv_homer_properties);
}
static const TypeInfo pnv_homer_type_info = {
diff --git a/hw/ppc/pnv_lpc.c b/hw/ppc/pnv_lpc.c
index 18256d9ba3..22b205532b 100644
--- a/hw/ppc/pnv_lpc.c
+++ b/hw/ppc/pnv_lpc.c
@@ -761,7 +761,7 @@ static void pnv_lpc_class_init(ObjectClass *klass, void *data)
dc->realize = pnv_lpc_realize;
dc->desc = "PowerNV LPC Controller";
- dc->props = pnv_lpc_properties;
+ device_class_set_props(dc, pnv_lpc_properties);
}
static const TypeInfo pnv_lpc_info = {
diff --git a/hw/ppc/pnv_occ.c b/hw/ppc/pnv_occ.c
index 924fdabc9e..2173fac0e7 100644
--- a/hw/ppc/pnv_occ.c
+++ b/hw/ppc/pnv_occ.c
@@ -279,7 +279,7 @@ static void pnv_occ_class_init(ObjectClass *klass, void *data)
dc->realize = pnv_occ_realize;
dc->desc = "PowerNV OCC Controller";
- dc->props = pnv_occ_properties;
+ device_class_set_props(dc, pnv_occ_properties);
}
static const TypeInfo pnv_occ_type_info = {
diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c
index b061106d1c..f761d8dc26 100644
--- a/hw/ppc/pnv_pnor.c
+++ b/hw/ppc/pnv_pnor.c
@@ -121,7 +121,7 @@ static void pnv_pnor_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = pnv_pnor_realize;
- dc->props = pnv_pnor_properties;
+ device_class_set_props(dc, pnv_pnor_properties);
}
static const TypeInfo pnv_pnor_info = {
diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c
index 1d8da31738..6baf9503a1 100644
--- a/hw/ppc/pnv_psi.c
+++ b/hw/ppc/pnv_psi.c
@@ -937,7 +937,7 @@ static void pnv_psi_class_init(ObjectClass *klass, void *data)
xdc->dt_xscom = pnv_psi_dt_xscom;
dc->desc = "PowerNV PSI Controller";
- dc->props = pnv_psi_properties;
+ device_class_set_props(dc, pnv_psi_properties);
dc->reset = pnv_psi_reset;
}
diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c
index 95475c9c5f..1a6a8fac22 100644
--- a/hw/ppc/ppc440_uc.c
+++ b/hw/ppc/ppc440_uc.c
@@ -1296,7 +1296,7 @@ static void ppc460ex_pcie_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->realize = ppc460ex_pcie_realize;
- dc->props = ppc460ex_pcie_props;
+ device_class_set_props(dc, ppc460ex_pcie_props);
dc->hotpluggable = false;
}
diff --git a/hw/ppc/prep_systemio.c b/hw/ppc/prep_systemio.c
index 86e83e278f..bbc51b6e9a 100644
--- a/hw/ppc/prep_systemio.c
+++ b/hw/ppc/prep_systemio.c
@@ -289,7 +289,7 @@ static void prep_systemio_class_initfn(ObjectClass *klass, void *data)
dc->realize = prep_systemio_realize;
dc->vmsd = &vmstate_prep_systemio;
- dc->props = prep_systemio_properties;
+ device_class_set_props(dc, prep_systemio_properties);
}
static TypeInfo prep_systemio800_info = {
diff --git a/hw/ppc/rs6000_mc.c b/hw/ppc/rs6000_mc.c
index 66b14db5fa..f8a498bd8a 100644
--- a/hw/ppc/rs6000_mc.c
+++ b/hw/ppc/rs6000_mc.c
@@ -222,7 +222,7 @@ static void rs6000mc_class_initfn(ObjectClass *klass, void *data)
dc->realize = rs6000mc_realize;
dc->vmsd = &vmstate_rs6000mc;
- dc->props = rs6000mc_properties;
+ device_class_set_props(dc, rs6000mc_properties);
}
static const TypeInfo rs6000mc_info = {
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index 8339c4c0f8..d09125d9af 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -383,7 +383,7 @@ static void spapr_cpu_core_class_init(ObjectClass *oc, void *data)
dc->realize = spapr_cpu_core_realize;
dc->unrealize = spapr_cpu_core_unrealize;
dc->reset = spapr_cpu_core_reset;
- dc->props = spapr_cpu_core_properties;
+ device_class_set_props(dc, spapr_cpu_core_properties);
scc->cpu_type = data;
}
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 723373de73..e82bfc5ca7 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -2217,7 +2217,7 @@ static void spapr_phb_class_init(ObjectClass *klass, void *data)
hc->root_bus_path = spapr_phb_root_bus_path;
dc->realize = spapr_phb_realize;
dc->unrealize = spapr_phb_unrealize;
- dc->props = spapr_phb_properties;
+ device_class_set_props(dc, spapr_phb_properties);
dc->reset = spapr_phb_reset;
dc->vmsd = &vmstate_spapr_pci;
/* Supported by TYPE_SPAPR_MACHINE */
diff --git a/hw/ppc/spapr_rng.c b/hw/ppc/spapr_rng.c
index 954e4aec4b..e8e8d65ec0 100644
--- a/hw/ppc/spapr_rng.c
+++ b/hw/ppc/spapr_rng.c
@@ -146,7 +146,7 @@ static void spapr_rng_class_init(ObjectClass *oc, void *data)
dc->realize = spapr_rng_realize;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
- dc->props = spapr_rng_properties;
+ device_class_set_props(dc, spapr_rng_properties);
dc->hotpluggable = false;
}
diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 8d8d8cdfcb..85135e0e1a 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -267,8 +267,7 @@ static void rtas_ibm_get_system_parameter(PowerPCCPU *cpu,
uint32_t nret, target_ulong rets)
{
PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
- MachineState *ms = MACHINE(qdev_get_machine());
- unsigned int max_cpus = ms->smp.max_cpus;
+ MachineState *ms = MACHINE(spapr);
target_ulong parameter = rtas_ld(args, 0);
target_ulong buffer = rtas_ld(args, 1);
target_ulong length = rtas_ld(args, 2);
@@ -280,10 +279,10 @@ static void rtas_ibm_get_system_parameter(PowerPCCPU *cpu,
"DesMem=%" PRIu64 ","
"DesProcs=%d,"
"MaxPlatProcs=%d",
- max_cpus,
- current_machine->ram_size / MiB,
+ ms->smp.max_cpus,
+ ms->ram_size / MiB,
ms->smp.cpus,
- max_cpus);
+ ms->smp.max_cpus);
if (pcc->n_host_threads > 0) {
char *hostthr_val, *old = param_val;
diff --git a/hw/ppc/spapr_tpm_proxy.c b/hw/ppc/spapr_tpm_proxy.c
index ca1caec113..991615d77a 100644
--- a/hw/ppc/spapr_tpm_proxy.c
+++ b/hw/ppc/spapr_tpm_proxy.c
@@ -159,7 +159,7 @@ static void spapr_tpm_proxy_class_init(ObjectClass *k, void *data)
dk->realize = spapr_tpm_proxy_realize;
dk->unrealize = spapr_tpm_proxy_unrealize;
dk->user_creatable = true;
- dk->props = spapr_tpm_proxy_properties;
+ device_class_set_props(dk, spapr_tpm_proxy_properties);
}
static const TypeInfo spapr_tpm_proxy_info = {
diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c
index 6f0fc405c7..3254aadb6e 100644
--- a/hw/rdma/vmw/pvrdma_main.c
+++ b/hw/rdma/vmw/pvrdma_main.c
@@ -690,7 +690,7 @@ static void pvrdma_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_NETWORK_OTHER;
dc->desc = "RDMA Device";
- dc->props = pvrdma_dev_properties;
+ device_class_set_props(dc, pvrdma_dev_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
ir->print_statistics = pvrdma_print_statistics;
diff --git a/hw/riscv/riscv_hart.c b/hw/riscv/riscv_hart.c
index 5b98227db6..276a9baca0 100644
--- a/hw/riscv/riscv_hart.c
+++ b/hw/riscv/riscv_hart.c
@@ -74,7 +74,7 @@ static void riscv_harts_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = riscv_harts_props;
+ device_class_set_props(dc, riscv_harts_props);
dc->realize = riscv_harts_realize;
}
diff --git a/hw/riscv/sifive_clint.c b/hw/riscv/sifive_clint.c
index e5a8f75cee..e2feee871b 100644
--- a/hw/riscv/sifive_clint.c
+++ b/hw/riscv/sifive_clint.c
@@ -205,7 +205,7 @@ static void sifive_clint_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = sifive_clint_realize;
- dc->props = sifive_clint_properties;
+ device_class_set_props(dc, sifive_clint_properties);
}
static const TypeInfo sifive_clint_info = {
diff --git a/hw/riscv/sifive_plic.c b/hw/riscv/sifive_plic.c
index 98e4304b66..c1e04cbb98 100644
--- a/hw/riscv/sifive_plic.c
+++ b/hw/riscv/sifive_plic.c
@@ -466,7 +466,7 @@ static void sifive_plic_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = sifive_plic_properties;
+ device_class_set_props(dc, sifive_plic_properties);
dc->realize = sifive_plic_realize;
}
diff --git a/hw/riscv/sifive_u_otp.c b/hw/riscv/sifive_u_otp.c
index ea0eee5678..f6ecbaa2ca 100644
--- a/hw/riscv/sifive_u_otp.c
+++ b/hw/riscv/sifive_u_otp.c
@@ -171,7 +171,7 @@ static void sifive_u_otp_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = sifive_u_otp_properties;
+ device_class_set_props(dc, sifive_u_otp_properties);
dc->realize = sifive_u_otp_realize;
dc->reset = sifive_u_otp_reset;
}
diff --git a/hw/rtc/m48t59-isa.c b/hw/rtc/m48t59-isa.c
index 7fde854c0f..131eb5b7d3 100644
--- a/hw/rtc/m48t59-isa.c
+++ b/hw/rtc/m48t59-isa.c
@@ -137,7 +137,7 @@ static void m48txx_isa_class_init(ObjectClass *klass, void *data)
dc->realize = m48t59_isa_realize;
dc->reset = m48t59_reset_isa;
- dc->props = m48t59_isa_properties;
+ device_class_set_props(dc, m48t59_isa_properties);
nc->read = m48txx_isa_read;
nc->write = m48txx_isa_write;
nc->toggle_lock = m48txx_isa_toggle_lock;
diff --git a/hw/rtc/m48t59.c b/hw/rtc/m48t59.c
index fc592b9fb1..1269134bcb 100644
--- a/hw/rtc/m48t59.c
+++ b/hw/rtc/m48t59.c
@@ -667,7 +667,7 @@ static void m48txx_sysbus_class_init(ObjectClass *klass, void *data)
dc->realize = m48t59_realize;
dc->reset = m48t59_reset_sysbus;
- dc->props = m48t59_sysbus_properties;
+ device_class_set_props(dc, m48t59_sysbus_properties);
dc->vmsd = &vmstate_m48t59;
nc->read = m48txx_sysbus_read;
nc->write = m48txx_sysbus_write;
diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
index 74ae74bc5c..dc4269cc55 100644
--- a/hw/rtc/mc146818rtc.c
+++ b/hw/rtc/mc146818rtc.c
@@ -1015,7 +1015,7 @@ static void rtc_class_initfn(ObjectClass *klass, void *data)
dc->realize = rtc_realizefn;
dc->reset = rtc_resetdev;
dc->vmsd = &vmstate_rtc;
- dc->props = mc146818rtc_properties;
+ device_class_set_props(dc, mc146818rtc_properties);
}
static const TypeInfo mc146818rtc_info = {
diff --git a/hw/rtc/pl031.c b/hw/rtc/pl031.c
index c57cf83165..ae47f09635 100644
--- a/hw/rtc/pl031.c
+++ b/hw/rtc/pl031.c
@@ -321,7 +321,7 @@ static void pl031_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->vmsd = &vmstate_pl031;
- dc->props = pl031_properties;
+ device_class_set_props(dc, pl031_properties);
}
static const TypeInfo pl031_info = {
diff --git a/hw/s390x/3270-ccw.c b/hw/s390x/3270-ccw.c
index c19a75b9b7..821319eee6 100644
--- a/hw/s390x/3270-ccw.c
+++ b/hw/s390x/3270-ccw.c
@@ -155,7 +155,7 @@ static void emulated_ccw_3270_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = emulated_ccw_3270_properties;
+ device_class_set_props(dc, emulated_ccw_3270_properties);
dc->bus_type = TYPE_VIRTUAL_CSS_BUS;
dc->realize = emulated_ccw_3270_realize;
dc->hotpluggable = false;
diff --git a/hw/s390x/ccw-device.c b/hw/s390x/ccw-device.c
index 4d222ad202..c9707110e9 100644
--- a/hw/s390x/ccw-device.c
+++ b/hw/s390x/ccw-device.c
@@ -57,7 +57,7 @@ static void ccw_device_class_init(ObjectClass *klass, void *data)
k->realize = ccw_device_realize;
k->refill_ids = ccw_device_refill_ids;
- dc->props = ccw_device_properties;
+ device_class_set_props(dc, ccw_device_properties);
dc->reset = ccw_device_reset;
}
diff --git a/hw/s390x/css-bridge.c b/hw/s390x/css-bridge.c
index 15a8ed96de..a306a78e6c 100644
--- a/hw/s390x/css-bridge.c
+++ b/hw/s390x/css-bridge.c
@@ -139,7 +139,7 @@ static void virtual_css_bridge_class_init(ObjectClass *klass, void *data)
hc->unplug = ccw_device_unplug;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
- dc->props = virtual_css_bridge_properties;
+ device_class_set_props(dc, virtual_css_bridge_properties);
object_class_property_add_bool(klass, "cssid-unrestricted",
prop_get_true, NULL, NULL);
object_class_property_set_description(klass, "cssid-unrestricted",
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index ca544d64c5..b3ae901529 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -666,7 +666,7 @@ static void s390_ipl_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = s390_ipl_realize;
- dc->props = s390_ipl_properties;
+ device_class_set_props(dc, s390_ipl_properties);
dc->reset = s390_ipl_reset;
dc->vmsd = &vmstate_ipl;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 2d2f4a7c41..7c6a2b3c63 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -1314,7 +1314,7 @@ static void s390_pci_device_class_init(ObjectClass *klass, void *data)
dc->reset = s390_pci_device_reset;
dc->bus_type = TYPE_S390_PCI_BUS;
dc->realize = s390_pci_device_realize;
- dc->props = s390_pci_device_properties;
+ device_class_set_props(dc, s390_pci_device_properties);
dc->vmsd = &s390_pci_device_vmstate;
}
diff --git a/hw/s390x/vhost-vsock-ccw.c b/hw/s390x/vhost-vsock-ccw.c
index 1835812bd1..12dee15e11 100644
--- a/hw/s390x/vhost-vsock-ccw.c
+++ b/hw/s390x/vhost-vsock-ccw.c
@@ -35,7 +35,7 @@ static void vhost_vsock_ccw_class_init(ObjectClass *klass, void *data)
k->realize = vhost_vsock_ccw_realize;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
- dc->props = vhost_vsock_ccw_properties;
+ device_class_set_props(dc, vhost_vsock_ccw_properties);
}
static void vhost_vsock_ccw_instance_init(Object *obj)
diff --git a/hw/s390x/virtio-ccw-9p.c b/hw/s390x/virtio-ccw-9p.c
index 5453a964d2..08e1d5d416 100644
--- a/hw/s390x/virtio-ccw-9p.c
+++ b/hw/s390x/virtio-ccw-9p.c
@@ -47,7 +47,7 @@ static void virtio_ccw_9p_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_9p_realize;
- dc->props = virtio_ccw_9p_properties;
+ device_class_set_props(dc, virtio_ccw_9p_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-balloon.c b/hw/s390x/virtio-ccw-balloon.c
index 7088612f6b..5d28e72345 100644
--- a/hw/s390x/virtio-ccw-balloon.c
+++ b/hw/s390x/virtio-ccw-balloon.c
@@ -52,7 +52,7 @@ static void virtio_ccw_balloon_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_balloon_realize;
- dc->props = virtio_ccw_balloon_properties;
+ device_class_set_props(dc, virtio_ccw_balloon_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-blk.c b/hw/s390x/virtio-ccw-blk.c
index 1512af8974..bf8520e60a 100644
--- a/hw/s390x/virtio-ccw-blk.c
+++ b/hw/s390x/virtio-ccw-blk.c
@@ -49,7 +49,7 @@ static void virtio_ccw_blk_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_blk_realize;
- dc->props = virtio_ccw_blk_properties;
+ device_class_set_props(dc, virtio_ccw_blk_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-crypto.c b/hw/s390x/virtio-ccw-crypto.c
index 086b397ad2..1a2690cf9e 100644
--- a/hw/s390x/virtio-ccw-crypto.c
+++ b/hw/s390x/virtio-ccw-crypto.c
@@ -57,7 +57,7 @@ static void virtio_ccw_crypto_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_crypto_realize;
- dc->props = virtio_ccw_crypto_properties;
+ device_class_set_props(dc, virtio_ccw_crypto_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-gpu.c b/hw/s390x/virtio-ccw-gpu.c
index be46ca7a96..f69e3ff5a0 100644
--- a/hw/s390x/virtio-ccw-gpu.c
+++ b/hw/s390x/virtio-ccw-gpu.c
@@ -48,7 +48,7 @@ static void virtio_ccw_gpu_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_gpu_realize;
- dc->props = virtio_ccw_gpu_properties;
+ device_class_set_props(dc, virtio_ccw_gpu_properties);
dc->hotpluggable = false;
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-input.c b/hw/s390x/virtio-ccw-input.c
index 370b776790..b257dfd467 100644
--- a/hw/s390x/virtio-ccw-input.c
+++ b/hw/s390x/virtio-ccw-input.c
@@ -38,7 +38,7 @@ static void virtio_ccw_input_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_input_realize;
- dc->props = virtio_ccw_input_properties;
+ device_class_set_props(dc, virtio_ccw_input_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-net.c b/hw/s390x/virtio-ccw-net.c
index 12c03d73c4..cd02699934 100644
--- a/hw/s390x/virtio-ccw-net.c
+++ b/hw/s390x/virtio-ccw-net.c
@@ -52,7 +52,7 @@ static void virtio_ccw_net_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_net_realize;
- dc->props = virtio_ccw_net_properties;
+ device_class_set_props(dc, virtio_ccw_net_properties);
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-rng.c b/hw/s390x/virtio-ccw-rng.c
index 854254dd50..d575e30cc6 100644
--- a/hw/s390x/virtio-ccw-rng.c
+++ b/hw/s390x/virtio-ccw-rng.c
@@ -56,7 +56,7 @@ static void virtio_ccw_rng_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_rng_realize;
- dc->props = virtio_ccw_rng_properties;
+ device_class_set_props(dc, virtio_ccw_rng_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-scsi.c b/hw/s390x/virtio-ccw-scsi.c
index 4662288b5b..3cb3ad669d 100644
--- a/hw/s390x/virtio-ccw-scsi.c
+++ b/hw/s390x/virtio-ccw-scsi.c
@@ -59,7 +59,7 @@ static void virtio_ccw_scsi_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_scsi_realize;
- dc->props = virtio_ccw_scsi_properties;
+ device_class_set_props(dc, virtio_ccw_scsi_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
@@ -102,7 +102,7 @@ static void vhost_ccw_scsi_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = vhost_ccw_scsi_realize;
- dc->props = vhost_ccw_scsi_properties;
+ device_class_set_props(dc, vhost_ccw_scsi_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/s390x/virtio-ccw-serial.c b/hw/s390x/virtio-ccw-serial.c
index eafb7d5c1f..1764db2e70 100644
--- a/hw/s390x/virtio-ccw-serial.c
+++ b/hw/s390x/virtio-ccw-serial.c
@@ -60,7 +60,7 @@ static void virtio_ccw_serial_class_init(ObjectClass *klass, void *data)
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
k->realize = virtio_ccw_serial_realize;
- dc->props = virtio_ccw_serial_properties;
+ device_class_set_props(dc, virtio_ccw_serial_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c
index de9bd20887..af18c88b65 100644
--- a/hw/scsi/megasas.c
+++ b/hw/scsi/megasas.c
@@ -2511,7 +2511,7 @@ static void megasas_class_init(ObjectClass *oc, void *data)
e->osts = info->osts;
e->product_name = info->product_name;
e->product_version = info->product_version;
- dc->props = info->props;
+ device_class_set_props(dc, info->props);
dc->reset = megasas_scsi_reset;
dc->vmsd = info->vmsd;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
diff --git a/hw/scsi/mptsas.c b/hw/scsi/mptsas.c
index b8a4b37cf3..14cbed84d0 100644
--- a/hw/scsi/mptsas.c
+++ b/hw/scsi/mptsas.c
@@ -1431,7 +1431,7 @@ static void mptsas1068_class_init(ObjectClass *oc, void *data)
pc->subsystem_vendor_id = PCI_VENDOR_ID_LSI_LOGIC;
pc->subsystem_id = 0x8000;
pc->class_id = PCI_CLASS_STORAGE_SCSI;
- dc->props = mptsas_properties;
+ device_class_set_props(dc, mptsas_properties);
dc->reset = mptsas_reset;
dc->vmsd = &vmstate_mptsas;
dc->desc = "LSI SAS 1068";
diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
index ad0e7f6d88..1c980cab38 100644
--- a/hw/scsi/scsi-bus.c
+++ b/hw/scsi/scsi-bus.c
@@ -1728,7 +1728,7 @@ static void scsi_device_class_init(ObjectClass *klass, void *data)
k->bus_type = TYPE_SCSI_BUS;
k->realize = scsi_qdev_realize;
k->unrealize = scsi_qdev_unrealize;
- k->props = scsi_props;
+ device_class_set_props(k, scsi_props);
}
static void scsi_dev_instance_init(Object *obj)
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index e44c61eeb4..10d0794d60 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -3036,7 +3036,7 @@ static void scsi_hd_class_initfn(ObjectClass *klass, void *data)
sc->alloc_req = scsi_new_request;
sc->unit_attention_reported = scsi_disk_unit_attention_reported;
dc->desc = "virtual SCSI disk";
- dc->props = scsi_hd_properties;
+ device_class_set_props(dc, scsi_hd_properties);
dc->vmsd = &vmstate_scsi_disk_state;
}
@@ -3067,7 +3067,7 @@ static void scsi_cd_class_initfn(ObjectClass *klass, void *data)
sc->alloc_req = scsi_new_request;
sc->unit_attention_reported = scsi_disk_unit_attention_reported;
dc->desc = "virtual SCSI CD-ROM";
- dc->props = scsi_cd_properties;
+ device_class_set_props(dc, scsi_cd_properties);
dc->vmsd = &vmstate_scsi_disk_state;
}
@@ -3106,7 +3106,7 @@ static void scsi_block_class_initfn(ObjectClass *klass, void *data)
sdc->update_sense = scsi_block_update_sense;
sdc->need_fua_emulation = scsi_block_no_fua;
dc->desc = "SCSI block device passthrough";
- dc->props = scsi_block_properties;
+ device_class_set_props(dc, scsi_block_properties);
dc->vmsd = &vmstate_scsi_disk_state;
}
@@ -3146,7 +3146,7 @@ static void scsi_disk_class_initfn(ObjectClass *klass, void *data)
dc->fw_name = "disk";
dc->desc = "virtual SCSI disk or CD-ROM (legacy)";
dc->reset = scsi_disk_reset;
- dc->props = scsi_disk_properties;
+ device_class_set_props(dc, scsi_disk_properties);
dc->vmsd = &vmstate_scsi_disk_state;
}
diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
index e7798ebcd0..86ed0a3822 100644
--- a/hw/scsi/scsi-generic.c
+++ b/hw/scsi/scsi-generic.c
@@ -768,7 +768,7 @@ static void scsi_generic_class_initfn(ObjectClass *klass, void *data)
dc->fw_name = "disk";
dc->desc = "pass through generic scsi device (/dev/sg*)";
dc->reset = scsi_generic_reset;
- dc->props = scsi_generic_properties;
+ device_class_set_props(dc, scsi_generic_properties);
dc->vmsd = &vmstate_scsi_device;
}
diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c
index 2120ceb051..7d584e7732 100644
--- a/hw/scsi/spapr_vscsi.c
+++ b/hw/scsi/spapr_vscsi.c
@@ -1267,7 +1267,7 @@ static void spapr_vscsi_class_init(ObjectClass *klass, void *data)
k->dt_compatible = "IBM,v-scsi";
k->signal_mask = 0x00000001;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
- dc->props = spapr_vscsi_properties;
+ device_class_set_props(dc, spapr_vscsi_properties);
k->rtce_window_size = 0x10000000;
dc->vmsd = &vmstate_spapr_vscsi;
}
diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c
index 26f710d3ec..f052377b7e 100644
--- a/hw/scsi/vhost-scsi.c
+++ b/hw/scsi/vhost-scsi.c
@@ -293,7 +293,7 @@ static void vhost_scsi_class_init(ObjectClass *klass, void *data)
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
FWPathProviderClass *fwc = FW_PATH_PROVIDER_CLASS(klass);
- dc->props = vhost_scsi_properties;
+ device_class_set_props(dc, vhost_scsi_properties);
dc->vmsd = &vmstate_virtio_vhost_scsi;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
vdc->realize = vhost_scsi_realize;
diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c
index 23f972df59..a01bf63a08 100644
--- a/hw/scsi/vhost-user-scsi.c
+++ b/hw/scsi/vhost-user-scsi.c
@@ -197,7 +197,7 @@ static void vhost_user_scsi_class_init(ObjectClass *klass, void *data)
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
FWPathProviderClass *fwc = FW_PATH_PROVIDER_CLASS(klass);
- dc->props = vhost_user_scsi_properties;
+ device_class_set_props(dc, vhost_user_scsi_properties);
dc->vmsd = &vmstate_vhost_scsi;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
vdc->realize = vhost_user_scsi_realize;
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
index d3af42ef92..3b61563609 100644
--- a/hw/scsi/virtio-scsi.c
+++ b/hw/scsi/virtio-scsi.c
@@ -1006,7 +1006,7 @@ static void virtio_scsi_class_init(ObjectClass *klass, void *data)
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass);
- dc->props = virtio_scsi_properties;
+ device_class_set_props(dc, virtio_scsi_properties);
dc->vmsd = &vmstate_virtio_scsi;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
vdc->realize = virtio_scsi_device_realize;
diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c
index 452a3b63b2..8f1aaf9c87 100644
--- a/hw/scsi/vmw_pvscsi.c
+++ b/hw/scsi/vmw_pvscsi.c
@@ -1292,7 +1292,7 @@ static void pvscsi_class_init(ObjectClass *klass, void *data)
&pvs_k->parent_dc_realize);
dc->reset = pvscsi_reset;
dc->vmsd = &vmstate_pvscsi;
- dc->props = pvscsi_properties;
+ device_class_set_props(dc, pvscsi_properties);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
hc->unplug = pvscsi_hot_unplug;
hc->plug = pvscsi_hotplug;
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index 49b83576e7..71a9af09ab 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -2118,7 +2118,7 @@ static void sd_class_init(ObjectClass *klass, void *data)
SDCardClass *sc = SD_CARD_CLASS(klass);
dc->realize = sd_realize;
- dc->props = sd_properties;
+ device_class_set_props(dc, sd_properties);
dc->vmsd = &sd_vmstate;
dc->reset = sd_reset;
dc->bus_type = TYPE_SD_BUS;
diff --git a/hw/sd/sdhci-pci.c b/hw/sd/sdhci-pci.c
index 2c8d8f59b5..19fa8bd8ed 100644
--- a/hw/sd/sdhci-pci.c
+++ b/hw/sd/sdhci-pci.c
@@ -64,7 +64,7 @@ static void sdhci_pci_class_init(ObjectClass *klass, void *data)
k->vendor_id = PCI_VENDOR_ID_REDHAT;
k->device_id = PCI_DEVICE_ID_REDHAT_SDHCI;
k->class_id = PCI_CLASS_SYSTEM_SDHCI;
- dc->props = sdhci_pci_properties;
+ device_class_set_props(dc, sdhci_pci_properties);
sdhci_common_class_init(klass, data);
}
diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index 18c0c052ce..69dc3e6b90 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -1499,7 +1499,7 @@ static void sdhci_sysbus_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = sdhci_sysbus_properties;
+ device_class_set_props(dc, sdhci_sysbus_properties);
dc->realize = sdhci_sysbus_realize;
dc->unrealize = sdhci_sysbus_unrealize;
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index 2aaa5bf1ae..df33b32dde 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -761,7 +761,7 @@ static void prom_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = prom_properties;
+ device_class_set_props(dc, prom_properties);
dc->realize = prom_realize;
}
@@ -827,7 +827,7 @@ static void ram_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = ram_realize;
- dc->props = ram_properties;
+ device_class_set_props(dc, ram_properties);
}
static const TypeInfo ram_info = {
diff --git a/hw/sparc/sun4m_iommu.c b/hw/sparc/sun4m_iommu.c
index ccf46a5147..71f5465249 100644
--- a/hw/sparc/sun4m_iommu.c
+++ b/hw/sparc/sun4m_iommu.c
@@ -379,7 +379,7 @@ static void iommu_class_init(ObjectClass *klass, void *data)
dc->reset = iommu_reset;
dc->vmsd = &vmstate_iommu;
- dc->props = iommu_properties;
+ device_class_set_props(dc, iommu_properties);
}
static const TypeInfo iommu_info = {
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index 955082773b..5d710d6b7a 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -389,7 +389,7 @@ static void ebus_class_init(ObjectClass *klass, void *data)
k->device_id = PCI_DEVICE_ID_SUN_EBUS;
k->revision = 0x01;
k->class_id = PCI_CLASS_BRIDGE_OTHER;
- dc->props = ebus_properties;
+ device_class_set_props(dc, ebus_properties);
}
static const TypeInfo ebus_info = {
@@ -479,7 +479,7 @@ static void prom_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = prom_properties;
+ device_class_set_props(dc, prom_properties);
dc->realize = prom_realize;
}
@@ -540,7 +540,7 @@ static void ram_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = ram_realize;
- dc->props = ram_properties;
+ device_class_set_props(dc, ram_properties);
}
static const TypeInfo ram_info = {
diff --git a/hw/ssi/aspeed_smc.c b/hw/ssi/aspeed_smc.c
index 7755eca349..23c8d2f062 100644
--- a/hw/ssi/aspeed_smc.c
+++ b/hw/ssi/aspeed_smc.c
@@ -1401,7 +1401,7 @@ static void aspeed_smc_class_init(ObjectClass *klass, void *data)
dc->realize = aspeed_smc_realize;
dc->reset = aspeed_smc_reset;
- dc->props = aspeed_smc_properties;
+ device_class_set_props(dc, aspeed_smc_properties);
dc->vmsd = &vmstate_aspeed_smc;
mc->ctrl = data;
}
diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c
index a1be0de039..eba7ccd46a 100644
--- a/hw/ssi/xilinx_spi.c
+++ b/hw/ssi/xilinx_spi.c
@@ -372,7 +372,7 @@ static void xilinx_spi_class_init(ObjectClass *klass, void *data)
dc->realize = xilinx_spi_realize;
dc->reset = xlx_spi_reset;
- dc->props = xilinx_spi_properties;
+ device_class_set_props(dc, xilinx_spi_properties);
dc->vmsd = &vmstate_xilinx_spi;
}
diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c
index 0d6c2e1a61..6c9ef59779 100644
--- a/hw/ssi/xilinx_spips.c
+++ b/hw/ssi/xilinx_spips.c
@@ -1455,7 +1455,7 @@ static void xilinx_spips_class_init(ObjectClass *klass, void *data)
dc->realize = xilinx_spips_realize;
dc->reset = xilinx_spips_reset;
- dc->props = xilinx_spips_properties;
+ device_class_set_props(dc, xilinx_spips_properties);
dc->vmsd = &vmstate_xilinx_spips;
xsc->reg_ops = &spips_ops;
@@ -1471,7 +1471,7 @@ static void xlnx_zynqmp_qspips_class_init(ObjectClass *klass, void * data)
dc->realize = xlnx_zynqmp_qspips_realize;
dc->reset = xlnx_zynqmp_qspips_reset;
dc->vmsd = &vmstate_xlnx_zynqmp_qspips;
- dc->props = xilinx_zynqmp_qspips_properties;
+ device_class_set_props(dc, xilinx_zynqmp_qspips_properties);
xsc->reg_ops = &xlnx_zynqmp_qspips_ops;
xsc->rx_fifo_size = RXFF_A_Q;
xsc->tx_fifo_size = TXFF_A_Q;
diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c
index 4c634c83b1..7233068a37 100644
--- a/hw/timer/a9gtimer.c
+++ b/hw/timer/a9gtimer.c
@@ -359,7 +359,7 @@ static void a9_gtimer_class_init(ObjectClass *klass, void *data)
dc->realize = a9_gtimer_realize;
dc->vmsd = &vmstate_a9_gtimer;
dc->reset = a9_gtimer_reset;
- dc->props = a9_gtimer_properties;
+ device_class_set_props(dc, a9_gtimer_properties);
}
static const TypeInfo a9_gtimer_info = {
diff --git a/hw/timer/allwinner-a10-pit.c b/hw/timer/allwinner-a10-pit.c
index aae880f5b3..f84fc0ea25 100644
--- a/hw/timer/allwinner-a10-pit.c
+++ b/hw/timer/allwinner-a10-pit.c
@@ -284,7 +284,7 @@ static void a10_pit_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = a10_pit_reset;
- dc->props = a10_pit_properties;
+ device_class_set_props(dc, a10_pit_properties);
dc->desc = "allwinner a10 timer";
dc->vmsd = &vmstate_a10_pit;
}
diff --git a/hw/timer/altera_timer.c b/hw/timer/altera_timer.c
index 79fc381252..be81b7a518 100644
--- a/hw/timer/altera_timer.c
+++ b/hw/timer/altera_timer.c
@@ -224,7 +224,7 @@ static void altera_timer_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = altera_timer_realize;
- dc->props = altera_timer_properties;
+ device_class_set_props(dc, altera_timer_properties);
dc->reset = altera_timer_reset;
}
diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c
index 2bf11f788c..cdfca3000b 100644
--- a/hw/timer/arm_mptimer.c
+++ b/hw/timer/arm_mptimer.c
@@ -312,7 +312,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->props = arm_mptimer_properties;
+ device_class_set_props(dc, arm_mptimer_properties);
}
static const TypeInfo arm_mptimer_info = {
diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c
index beaa285685..9607366d78 100644
--- a/hw/timer/arm_timer.c
+++ b/hw/timer/arm_timer.c
@@ -397,7 +397,7 @@ static void sp804_class_init(ObjectClass *klass, void *data)
DeviceClass *k = DEVICE_CLASS(klass);
k->realize = sp804_realize;
- k->props = sp804_properties;
+ device_class_set_props(k, sp804_properties);
k->vmsd = &vmstate_sp804;
}
diff --git a/hw/timer/aspeed_timer.c b/hw/timer/aspeed_timer.c
index a8c38cc118..42c47d2ce6 100644
--- a/hw/timer/aspeed_timer.c
+++ b/hw/timer/aspeed_timer.c
@@ -283,7 +283,7 @@ static void aspeed_timer_set_value(AspeedTimerCtrlState *s, int timer, int reg,
if (old_reload || !t->reload) {
break;
}
-
+ /* fall through to re-enable */
case TIMER_REG_STATUS:
if (timer_enabled(t)) {
uint64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
@@ -685,7 +685,7 @@ static void timer_class_init(ObjectClass *klass, void *data)
dc->reset = aspeed_timer_reset;
dc->desc = "ASPEED Timer";
dc->vmsd = &vmstate_aspeed_timer_state;
- dc->props = aspeed_timer_properties;
+ device_class_set_props(dc, aspeed_timer_properties);
}
static const TypeInfo aspeed_timer_info = {
diff --git a/hw/timer/cmsdk-apb-dualtimer.c b/hw/timer/cmsdk-apb-dualtimer.c
index e28ba9c90a..f6534241b9 100644
--- a/hw/timer/cmsdk-apb-dualtimer.c
+++ b/hw/timer/cmsdk-apb-dualtimer.c
@@ -510,7 +510,7 @@ static void cmsdk_apb_dualtimer_class_init(ObjectClass *klass, void *data)
dc->realize = cmsdk_apb_dualtimer_realize;
dc->vmsd = &cmsdk_apb_dualtimer_vmstate;
dc->reset = cmsdk_apb_dualtimer_reset;
- dc->props = cmsdk_apb_dualtimer_properties;
+ device_class_set_props(dc, cmsdk_apb_dualtimer_properties);
}
static const TypeInfo cmsdk_apb_dualtimer_info = {
diff --git a/hw/timer/cmsdk-apb-timer.c b/hw/timer/cmsdk-apb-timer.c
index 40728e85e2..f85f1309f3 100644
--- a/hw/timer/cmsdk-apb-timer.c
+++ b/hw/timer/cmsdk-apb-timer.c
@@ -260,7 +260,7 @@ static void cmsdk_apb_timer_class_init(ObjectClass *klass, void *data)
dc->realize = cmsdk_apb_timer_realize;
dc->vmsd = &cmsdk_apb_timer_vmstate;
dc->reset = cmsdk_apb_timer_reset;
- dc->props = cmsdk_apb_timer_properties;
+ device_class_set_props(dc, cmsdk_apb_timer_properties);
}
static const TypeInfo cmsdk_apb_timer_info = {
diff --git a/hw/timer/grlib_gptimer.c b/hw/timer/grlib_gptimer.c
index 7a9371c0e3..eff0ee3491 100644
--- a/hw/timer/grlib_gptimer.c
+++ b/hw/timer/grlib_gptimer.c
@@ -415,7 +415,7 @@ static void grlib_gptimer_class_init(ObjectClass *klass, void *data)
dc->realize = grlib_gptimer_realize;
dc->reset = grlib_gptimer_reset;
- dc->props = grlib_gptimer_properties;
+ device_class_set_props(dc, grlib_gptimer_properties);
}
static const TypeInfo grlib_gptimer_info = {
diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
index 9f17aaa278..8dbcbdca16 100644
--- a/hw/timer/hpet.c
+++ b/hw/timer/hpet.c
@@ -800,7 +800,7 @@ static void hpet_device_class_init(ObjectClass *klass, void *data)
dc->realize = hpet_realize;
dc->reset = hpet_reset;
dc->vmsd = &vmstate_hpet;
- dc->props = hpet_device_properties;
+ device_class_set_props(dc, hpet_device_properties);
}
static const TypeInfo hpet_device_info = {
diff --git a/hw/timer/i8254.c b/hw/timer/i8254.c
index a4be7330ef..29f62e5356 100644
--- a/hw/timer/i8254.c
+++ b/hw/timer/i8254.c
@@ -364,7 +364,7 @@ static void pit_class_initfn(ObjectClass *klass, void *data)
k->get_channel_info = pit_get_channel_info_common;
k->post_load = pit_post_load;
dc->reset = pit_reset;
- dc->props = pit_properties;
+ device_class_set_props(dc, pit_properties);
}
static const TypeInfo pit_info = {
diff --git a/hw/timer/lm32_timer.c b/hw/timer/lm32_timer.c
index 3fdecd09fe..f703f407f5 100644
--- a/hw/timer/lm32_timer.c
+++ b/hw/timer/lm32_timer.c
@@ -230,7 +230,7 @@ static void lm32_timer_class_init(ObjectClass *klass, void *data)
dc->realize = lm32_timer_realize;
dc->reset = timer_reset;
dc->vmsd = &vmstate_lm32_timer;
- dc->props = lm32_timer_properties;
+ device_class_set_props(dc, lm32_timer_properties);
}
static const TypeInfo lm32_timer_info = {
diff --git a/hw/timer/milkymist-sysctl.c b/hw/timer/milkymist-sysctl.c
index 7a62e212c3..94389820b2 100644
--- a/hw/timer/milkymist-sysctl.c
+++ b/hw/timer/milkymist-sysctl.c
@@ -343,7 +343,7 @@ static void milkymist_sysctl_class_init(ObjectClass *klass, void *data)
dc->realize = milkymist_sysctl_realize;
dc->reset = milkymist_sysctl_reset;
dc->vmsd = &vmstate_milkymist_sysctl;
- dc->props = milkymist_sysctl_properties;
+ device_class_set_props(dc, milkymist_sysctl_properties);
}
static const TypeInfo milkymist_sysctl_info = {
diff --git a/hw/timer/mss-timer.c b/hw/timer/mss-timer.c
index b1c9a80501..29943fd744 100644
--- a/hw/timer/mss-timer.c
+++ b/hw/timer/mss-timer.c
@@ -278,7 +278,7 @@ static void mss_timer_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = mss_timer_properties;
+ device_class_set_props(dc, mss_timer_properties);
dc->vmsd = &vmstate_mss_timer;
}
diff --git a/hw/timer/pxa2xx_timer.c b/hw/timer/pxa2xx_timer.c
index 311cd38aac..cd172cc1e9 100644
--- a/hw/timer/pxa2xx_timer.c
+++ b/hw/timer/pxa2xx_timer.c
@@ -562,7 +562,7 @@ static void pxa25x_timer_dev_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->desc = "PXA25x timer";
- dc->props = pxa25x_timer_dev_properties;
+ device_class_set_props(dc, pxa25x_timer_dev_properties);
}
static const TypeInfo pxa25x_timer_dev_info = {
@@ -584,7 +584,7 @@ static void pxa27x_timer_dev_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->desc = "PXA27x timer";
- dc->props = pxa27x_timer_dev_properties;
+ device_class_set_props(dc, pxa27x_timer_dev_properties);
}
static const TypeInfo pxa27x_timer_dev_info = {
diff --git a/hw/timer/slavio_timer.c b/hw/timer/slavio_timer.c
index c55e8d0bf4..4c5d65e391 100644
--- a/hw/timer/slavio_timer.c
+++ b/hw/timer/slavio_timer.c
@@ -427,7 +427,7 @@ static void slavio_timer_class_init(ObjectClass *klass, void *data)
dc->reset = slavio_timer_reset;
dc->vmsd = &vmstate_slavio_timer;
- dc->props = slavio_timer_properties;
+ device_class_set_props(dc, slavio_timer_properties);
}
static const TypeInfo slavio_timer_info = {
diff --git a/hw/timer/stm32f2xx_timer.c b/hw/timer/stm32f2xx_timer.c
index edc557a4b9..fb370ce0f0 100644
--- a/hw/timer/stm32f2xx_timer.c
+++ b/hw/timer/stm32f2xx_timer.c
@@ -323,7 +323,7 @@ static void stm32f2xx_timer_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = stm32f2xx_timer_reset;
- dc->props = stm32f2xx_timer_properties;
+ device_class_set_props(dc, stm32f2xx_timer_properties);
dc->vmsd = &vmstate_stm32f2xx_timer;
}
diff --git a/hw/timer/xilinx_timer.c b/hw/timer/xilinx_timer.c
index 7191ea54f5..0190aa47d0 100644
--- a/hw/timer/xilinx_timer.c
+++ b/hw/timer/xilinx_timer.c
@@ -253,7 +253,7 @@ static void xilinx_timer_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->realize = xilinx_timer_realize;
- dc->props = xilinx_timer_properties;
+ device_class_set_props(dc, xilinx_timer_properties);
}
static const TypeInfo xilinx_timer_info = {
diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c
index faae733120..cd004e7f8e 100644
--- a/hw/tpm/tpm_crb.c
+++ b/hw/tpm/tpm_crb.c
@@ -313,7 +313,7 @@ static void tpm_crb_class_init(ObjectClass *klass, void *data)
TPMIfClass *tc = TPM_IF_CLASS(klass);
dc->realize = tpm_crb_realize;
- dc->props = tpm_crb_properties;
+ device_class_set_props(dc, tpm_crb_properties);
dc->vmsd = &vmstate_tpm_crb;
dc->user_creatable = true;
tc->model = TPM_MODEL_TPM_CRB;
diff --git a/hw/tpm/tpm_tis.c b/hw/tpm/tpm_tis.c
index 7aaf9b946d..5362df2711 100644
--- a/hw/tpm/tpm_tis.c
+++ b/hw/tpm/tpm_tis.c
@@ -1023,7 +1023,7 @@ static void tpm_tis_class_init(ObjectClass *klass, void *data)
TPMIfClass *tc = TPM_IF_CLASS(klass);
dc->realize = tpm_tis_realizefn;
- dc->props = tpm_tis_properties;
+ device_class_set_props(dc, tpm_tis_properties);
dc->reset = tpm_tis_reset;
dc->vmsd = &vmstate_tpm_tis;
tc->model = TPM_MODEL_TPM_TIS;
diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index a6522f5429..c9a390063f 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -768,7 +768,7 @@ static void usb_device_class_init(ObjectClass *klass, void *data)
k->bus_type = TYPE_USB_BUS;
k->realize = usb_qdev_realize;
k->unrealize = usb_qdev_unrealize;
- k->props = usb_props;
+ device_class_set_props(k, usb_props);
}
static const TypeInfo usb_device_type_info = {
diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
index 291e41db8a..3083124556 100644
--- a/hw/usb/ccid-card-emulated.c
+++ b/hw/usb/ccid-card-emulated.c
@@ -603,7 +603,7 @@ static void emulated_class_initfn(ObjectClass *klass, void *data)
cc->apdu_from_guest = emulated_apdu_from_guest;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
dc->desc = "emulated smartcard";
- dc->props = emulated_card_properties;
+ device_class_set_props(dc, emulated_card_properties);
}
static const TypeInfo emulated_card_info = {
diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
index 3d40b700db..bb325dbc4a 100644
--- a/hw/usb/ccid-card-passthru.c
+++ b/hw/usb/ccid-card-passthru.c
@@ -403,7 +403,7 @@ static void passthru_class_initfn(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
dc->desc = "passthrough smartcard";
dc->vmsd = &passthru_vmstate;
- dc->props = passthru_card_properties;
+ device_class_set_props(dc, passthru_card_properties);
}
static const TypeInfo passthru_card_info = {
diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c
index ea604bbb8e..6fa213fad5 100644
--- a/hw/usb/dev-audio.c
+++ b/hw/usb/dev-audio.c
@@ -1002,7 +1002,7 @@ static void usb_audio_class_init(ObjectClass *klass, void *data)
USBDeviceClass *k = USB_DEVICE_CLASS(klass);
dc->vmsd = &vmstate_usb_audio;
- dc->props = usb_audio_properties;
+ device_class_set_props(dc, usb_audio_properties);
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
k->product_desc = "QEMU USB Audio Interface";
k->realize = usb_audio_realize;
diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c
index 88492f26e6..67ec8b69ec 100644
--- a/hw/usb/dev-hid.c
+++ b/hw/usb/dev-hid.c
@@ -819,7 +819,7 @@ static void usb_tablet_class_initfn(ObjectClass *klass, void *data)
uc->realize = usb_tablet_realize;
uc->product_desc = "QEMU USB Tablet";
dc->vmsd = &vmstate_usb_ptr;
- dc->props = usb_tablet_properties;
+ device_class_set_props(dc, usb_tablet_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
@@ -842,7 +842,7 @@ static void usb_mouse_class_initfn(ObjectClass *klass, void *data)
uc->realize = usb_mouse_realize;
uc->product_desc = "QEMU USB Mouse";
dc->vmsd = &vmstate_usb_ptr;
- dc->props = usb_mouse_properties;
+ device_class_set_props(dc, usb_mouse_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
@@ -866,7 +866,7 @@ static void usb_keyboard_class_initfn(ObjectClass *klass, void *data)
uc->realize = usb_keyboard_realize;
uc->product_desc = "QEMU USB Keyboard";
dc->vmsd = &vmstate_usb_kbd;
- dc->props = usb_keyboard_properties;
+ device_class_set_props(dc, usb_keyboard_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c
index 07ecfefc12..49a573b346 100644
--- a/hw/usb/dev-hub.c
+++ b/hw/usb/dev-hub.c
@@ -686,7 +686,7 @@ static void usb_hub_class_initfn(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
dc->fw_name = "hub";
dc->vmsd = &vmstate_usb_hub;
- dc->props = usb_hub_properties;
+ device_class_set_props(dc, usb_hub_properties);
}
static const TypeInfo hub_info = {
diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c
index 7c07295519..20717f026b 100644
--- a/hw/usb/dev-mtp.c
+++ b/hw/usb/dev-mtp.c
@@ -2105,7 +2105,7 @@ static void usb_mtp_class_initfn(ObjectClass *klass, void *data)
dc->desc = "USB Media Transfer Protocol device";
dc->fw_name = "mtp";
dc->vmsd = &vmstate_usb_mtp;
- dc->props = mtp_properties;
+ device_class_set_props(dc, mtp_properties);
}
static TypeInfo mtp_info = {
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
index b81a8abe83..9a78ad928b 100644
--- a/hw/usb/dev-network.c
+++ b/hw/usb/dev-network.c
@@ -1409,7 +1409,7 @@ static void usb_net_class_initfn(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
dc->fw_name = "network";
dc->vmsd = &vmstate_usb_net;
- dc->props = net_properties;
+ device_class_set_props(dc, net_properties);
}
static const TypeInfo net_info = {
diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
index 9646fe77da..98465990ef 100644
--- a/hw/usb/dev-serial.c
+++ b/hw/usb/dev-serial.c
@@ -567,7 +567,7 @@ static void usb_serial_class_initfn(ObjectClass *klass, void *data)
uc->product_desc = "QEMU USB Serial";
uc->usb_desc = &desc_serial;
- dc->props = serial_properties;
+ device_class_set_props(dc, serial_properties);
}
static const TypeInfo serial_info = {
@@ -588,7 +588,7 @@ static void usb_braille_class_initfn(ObjectClass *klass, void *data)
uc->product_desc = "QEMU USB Braille";
uc->usb_desc = &desc_braille;
- dc->props = braille_properties;
+ device_class_set_props(dc, braille_properties);
}
static const TypeInfo braille_info = {
diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c
index 4568db2568..02693a26ad 100644
--- a/hw/usb/dev-smartcard-reader.c
+++ b/hw/usb/dev-smartcard-reader.c
@@ -1456,7 +1456,7 @@ static void ccid_class_initfn(ObjectClass *klass, void *data)
uc->unrealize = ccid_unrealize;
dc->desc = "CCID Rev 1.1 smartcard reader";
dc->vmsd = &ccid_vmstate;
- dc->props = ccid_properties;
+ device_class_set_props(dc, ccid_properties);
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
hc->unplug = qdev_simple_device_unplug_cb;
}
@@ -1478,7 +1478,7 @@ static void ccid_card_class_init(ObjectClass *klass, void *data)
k->bus_type = TYPE_CCID_BUS;
k->realize = ccid_card_realize;
k->unrealize = ccid_card_unrealize;
- k->props = ccid_props;
+ device_class_set_props(k, ccid_props);
}
static const TypeInfo ccid_card_type_info = {
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 8545193488..90da008df1 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -702,7 +702,7 @@ static void usb_msd_class_storage_initfn(ObjectClass *klass, void *data)
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
uc->realize = usb_msd_storage_realize;
- dc->props = msd_properties;
+ device_class_set_props(dc, msd_properties);
}
static void usb_msd_get_bootindex(Object *obj, Visitor *v, const char *name,
diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c
index 6d6d1073b9..9825ec37d0 100644
--- a/hw/usb/dev-uas.c
+++ b/hw/usb/dev-uas.c
@@ -952,7 +952,7 @@ static void usb_uas_class_initfn(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
dc->fw_name = "storage";
dc->vmsd = &vmstate_usb_uas;
- dc->props = uas_properties;
+ device_class_set_props(dc, uas_properties);
}
static const TypeInfo uas_info = {
diff --git a/hw/usb/hcd-ehci-pci.c b/hw/usb/hcd-ehci-pci.c
index 5b9a8d3dc1..fc73a054c6 100644
--- a/hw/usb/hcd-ehci-pci.c
+++ b/hw/usb/hcd-ehci-pci.c
@@ -161,7 +161,7 @@ static void ehci_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_SERIAL_USB;
k->config_write = usb_ehci_pci_write_config;
dc->vmsd = &vmstate_ehci_pci;
- dc->props = ehci_pci_properties;
+ device_class_set_props(dc, ehci_pci_properties);
dc->reset = usb_ehci_pci_reset;
}
diff --git a/hw/usb/hcd-ehci-sysbus.c b/hw/usb/hcd-ehci-sysbus.c
index 020211fd10..8d4738565e 100644
--- a/hw/usb/hcd-ehci-sysbus.c
+++ b/hw/usb/hcd-ehci-sysbus.c
@@ -82,7 +82,7 @@ static void ehci_sysbus_class_init(ObjectClass *klass, void *data)
dc->realize = usb_ehci_sysbus_realize;
dc->vmsd = &vmstate_ehci_sysbus;
- dc->props = ehci_sysbus_properties;
+ device_class_set_props(dc, ehci_sysbus_properties);
dc->reset = usb_ehci_sysbus_reset;
set_bit(DEVICE_CATEGORY_USB, dc->categories);
}
diff --git a/hw/usb/hcd-ohci-pci.c b/hw/usb/hcd-ohci-pci.c
index c052f10521..a7fb1666af 100644
--- a/hw/usb/hcd-ohci-pci.c
+++ b/hw/usb/hcd-ohci-pci.c
@@ -139,7 +139,7 @@ static void ohci_pci_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_SERIAL_USB;
set_bit(DEVICE_CATEGORY_USB, dc->categories);
dc->desc = "Apple USB Controller";
- dc->props = ohci_pci_properties;
+ device_class_set_props(dc, ohci_pci_properties);
dc->hotpluggable = false;
dc->vmsd = &vmstate_ohci;
dc->reset = usb_ohci_reset_pci;
diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c
index 145ee21fd6..8a94bd004a 100644
--- a/hw/usb/hcd-ohci.c
+++ b/hw/usb/hcd-ohci.c
@@ -2000,7 +2000,7 @@ static void ohci_sysbus_class_init(ObjectClass *klass, void *data)
dc->realize = ohci_realize_pxa;
set_bit(DEVICE_CATEGORY_USB, dc->categories);
dc->desc = "OHCI USB Controller";
- dc->props = ohci_sysbus_properties;
+ device_class_set_props(dc, ohci_sysbus_properties);
dc->reset = usb_ohci_reset_sysbus;
}
diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c
index 23507ad3b5..37f7beb3fa 100644
--- a/hw/usb/hcd-uhci.c
+++ b/hw/usb/hcd-uhci.c
@@ -1349,9 +1349,9 @@ static void uhci_data_class_init(ObjectClass *klass, void *data)
if (!info->unplug) {
/* uhci controllers in companion setups can't be hotplugged */
dc->hotpluggable = false;
- dc->props = uhci_properties_companion;
+ device_class_set_props(dc, uhci_properties_companion);
} else {
- dc->props = uhci_properties_standalone;
+ device_class_set_props(dc, uhci_properties_standalone);
}
u->info = *info;
}
diff --git a/hw/usb/hcd-xhci-nec.c b/hw/usb/hcd-xhci-nec.c
index 05fb3f54b3..e6a5a22b6d 100644
--- a/hw/usb/hcd-xhci-nec.c
+++ b/hw/usb/hcd-xhci-nec.c
@@ -44,7 +44,7 @@ static void nec_xhci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = nec_xhci_properties;
+ device_class_set_props(dc, nec_xhci_properties);
k->vendor_id = PCI_VENDOR_ID_NEC;
k->device_id = PCI_DEVICE_ID_NEC_UPD720200;
k->revision = 0x03;
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index fb05de4b05..b330e36fe6 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -3707,7 +3707,7 @@ static void xhci_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->vmsd = &vmstate_xhci;
- dc->props = xhci_properties;
+ device_class_set_props(dc, xhci_properties);
dc->reset = xhci_reset;
set_bit(DEVICE_CATEGORY_USB, dc->categories);
k->realize = usb_xhci_realize;
diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c
index 00e0e36369..2594700901 100644
--- a/hw/usb/host-libusb.c
+++ b/hw/usb/host-libusb.c
@@ -1635,7 +1635,7 @@ static void usb_host_class_initfn(ObjectClass *klass, void *data)
uc->alloc_streams = usb_host_alloc_streams;
uc->free_streams = usb_host_free_streams;
dc->vmsd = &vmstate_usb_host;
- dc->props = usb_host_dev_properties;
+ device_class_set_props(dc, usb_host_dev_properties);
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
}
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index efdbcc074c..45d8b76218 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -2584,7 +2584,7 @@ static void usbredir_class_initfn(ObjectClass *klass, void *data)
uc->alloc_streams = usbredir_alloc_streams;
uc->free_streams = usbredir_free_streams;
dc->vmsd = &usbredir_vmstate;
- dc->props = usbredir_properties;
+ device_class_set_props(dc, usbredir_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
}
diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c
index 8fbaa724c2..8649ac15f9 100644
--- a/hw/vfio/ap.c
+++ b/hw/vfio/ap.c
@@ -161,7 +161,7 @@ static void vfio_ap_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = vfio_ap_properties;
+ device_class_set_props(dc, vfio_ap_properties);
dc->vmsd = &vfio_ap_vmstate;
dc->desc = "VFIO-based AP device assignment";
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c
index 3b5520ae75..50cc2ec75c 100644
--- a/hw/vfio/ccw.c
+++ b/hw/vfio/ccw.c
@@ -561,7 +561,7 @@ static void vfio_ccw_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
S390CCWDeviceClass *cdc = S390_CCW_DEVICE_CLASS(klass);
- dc->props = vfio_ccw_properties;
+ device_class_set_props(dc, vfio_ccw_properties);
dc->vmsd = &vfio_ccw_vmstate;
dc->desc = "VFIO-based subchannel assignment";
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index 337a173ce7..5e75a95129 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -3199,7 +3199,7 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pdc = PCI_DEVICE_CLASS(klass);
dc->reset = vfio_pci_reset;
- dc->props = vfio_pci_dev_properties;
+ device_class_set_props(dc, vfio_pci_dev_properties);
dc->desc = "VFIO-based PCI device assignment";
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
pdc->realize = vfio_realize;
@@ -3231,7 +3231,7 @@ static void vfio_pci_nohotplug_dev_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = vfio_pci_dev_nohotplug_properties;
+ device_class_set_props(dc, vfio_pci_dev_nohotplug_properties);
dc->hotpluggable = false;
}
diff --git a/hw/vfio/platform.c b/hw/vfio/platform.c
index d7598c6152..6b2952c034 100644
--- a/hw/vfio/platform.c
+++ b/hw/vfio/platform.c
@@ -699,7 +699,7 @@ static void vfio_platform_class_init(ObjectClass *klass, void *data)
SysBusDeviceClass *sbc = SYS_BUS_DEVICE_CLASS(klass);
dc->realize = vfio_platform_realize;
- dc->props = vfio_platform_dev_properties;
+ device_class_set_props(dc, vfio_platform_dev_properties);
dc->vmsd = &vfio_platform_vmstate;
dc->desc = "VFIO-based platform device assignment";
sbc->connect_irq_notifier = vfio_start_irqfd_injection;
diff --git a/hw/virtio/vhost-scsi-pci.c b/hw/virtio/vhost-scsi-pci.c
index e8dfbfc60f..5dce640eaf 100644
--- a/hw/virtio/vhost-scsi-pci.c
+++ b/hw/virtio/vhost-scsi-pci.c
@@ -64,7 +64,7 @@ static void vhost_scsi_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
k->realize = vhost_scsi_pci_realize;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
- dc->props = vhost_scsi_pci_properties;
+ device_class_set_props(dc, vhost_scsi_pci_properties);
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI;
pcidev_k->revision = 0x00;
diff --git a/hw/virtio/vhost-user-blk-pci.c b/hw/virtio/vhost-user-blk-pci.c
index 1dc834a3ff..8d3d766427 100644
--- a/hw/virtio/vhost-user-blk-pci.c
+++ b/hw/virtio/vhost-user-blk-pci.c
@@ -69,7 +69,7 @@ static void vhost_user_blk_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
- dc->props = vhost_user_blk_pci_properties;
+ device_class_set_props(dc, vhost_user_blk_pci_properties);
k->realize = vhost_user_blk_pci_realize;
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_BLOCK;
diff --git a/hw/virtio/vhost-user-fs-pci.c b/hw/virtio/vhost-user-fs-pci.c
index e3a649d4a6..ae36f1172d 100644
--- a/hw/virtio/vhost-user-fs-pci.c
+++ b/hw/virtio/vhost-user-fs-pci.c
@@ -55,7 +55,7 @@ static void vhost_user_fs_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
k->realize = vhost_user_fs_pci_realize;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
- dc->props = vhost_user_fs_pci_properties;
+ device_class_set_props(dc, vhost_user_fs_pci_properties);
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = 0; /* Set by virtio-pci based on virtio id */
pcidev_k->revision = 0x00;
diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c
index ca0b7fc9de..33b17848c2 100644
--- a/hw/virtio/vhost-user-fs.c
+++ b/hw/virtio/vhost-user-fs.c
@@ -271,7 +271,7 @@ static void vuf_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = vuf_properties;
+ device_class_set_props(dc, vuf_properties);
dc->vmsd = &vuf_vmstate;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
vdc->realize = vuf_device_realize;
diff --git a/hw/virtio/vhost-user-scsi-pci.c b/hw/virtio/vhost-user-scsi-pci.c
index ff13af7030..32febb2daa 100644
--- a/hw/virtio/vhost-user-scsi-pci.c
+++ b/hw/virtio/vhost-user-scsi-pci.c
@@ -70,7 +70,7 @@ static void vhost_user_scsi_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
k->realize = vhost_user_scsi_pci_realize;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
- dc->props = vhost_user_scsi_pci_properties;
+ device_class_set_props(dc, vhost_user_scsi_pci_properties);
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI;
pcidev_k->revision = 0x00;
diff --git a/hw/virtio/vhost-vsock-pci.c b/hw/virtio/vhost-vsock-pci.c
index 4ca097ffff..01effe3d52 100644
--- a/hw/virtio/vhost-vsock-pci.c
+++ b/hw/virtio/vhost-vsock-pci.c
@@ -55,7 +55,7 @@ static void vhost_vsock_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
k->realize = vhost_vsock_pci_realize;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
- dc->props = vhost_vsock_pci_properties;
+ device_class_set_props(dc, vhost_vsock_pci_properties);
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_VSOCK;
pcidev_k->revision = 0x00;
diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c
index b6cee479bb..66da96583b 100644
--- a/hw/virtio/vhost-vsock.c
+++ b/hw/virtio/vhost-vsock.c
@@ -401,7 +401,7 @@ static void vhost_vsock_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = vhost_vsock_properties;
+ device_class_set_props(dc, vhost_vsock_properties);
dc->vmsd = &vmstate_virtio_vhost_vsock;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
vdc->realize = vhost_vsock_device_realize;
diff --git a/hw/virtio/virtio-9p-pci.c b/hw/virtio/virtio-9p-pci.c
index 22a183cca7..6507ce340b 100644
--- a/hw/virtio/virtio-9p-pci.c
+++ b/hw/virtio/virtio-9p-pci.c
@@ -61,7 +61,7 @@ static void virtio_9p_pci_class_init(ObjectClass *klass, void *data)
pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
pcidev_k->class_id = 0x2;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
- dc->props = virtio_9p_pci_properties;
+ device_class_set_props(dc, virtio_9p_pci_properties);
}
static void virtio_9p_pci_instance_init(Object *obj)
diff --git a/hw/virtio/virtio-balloon-pci.c b/hw/virtio/virtio-balloon-pci.c
index 69ca057911..56962aeb43 100644
--- a/hw/virtio/virtio-balloon-pci.c
+++ b/hw/virtio/virtio-balloon-pci.c
@@ -59,7 +59,7 @@ static void virtio_balloon_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
k->realize = virtio_balloon_pci_realize;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
- dc->props = virtio_balloon_pci_properties;
+ device_class_set_props(dc, virtio_balloon_pci_properties);
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_BALLOON;
pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index 57f3b9f22d..a4729f7fc9 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -932,7 +932,7 @@ static void virtio_balloon_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = virtio_balloon_properties;
+ device_class_set_props(dc, virtio_balloon_properties);
dc->vmsd = &vmstate_virtio_balloon;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
vdc->realize = virtio_balloon_device_realize;
diff --git a/hw/virtio/virtio-blk-pci.c b/hw/virtio/virtio-blk-pci.c
index d9b69a5af3..efb2c22a1d 100644
--- a/hw/virtio/virtio-blk-pci.c
+++ b/hw/virtio/virtio-blk-pci.c
@@ -66,7 +66,7 @@ static void virtio_blk_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
- dc->props = virtio_blk_pci_properties;
+ device_class_set_props(dc, virtio_blk_pci_properties);
k->realize = virtio_blk_pci_realize;
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_BLOCK;
diff --git a/hw/virtio/virtio-crypto-pci.c b/hw/virtio/virtio-crypto-pci.c
index d853dc460c..0bebe0149d 100644
--- a/hw/virtio/virtio-crypto-pci.c
+++ b/hw/virtio/virtio-crypto-pci.c
@@ -69,7 +69,7 @@ static void virtio_crypto_pci_class_init(ObjectClass *klass, void *data)
k->realize = virtio_crypto_pci_realize;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
- dc->props = virtio_crypto_pci_properties;
+ device_class_set_props(dc, virtio_crypto_pci_properties);
pcidev_k->class_id = PCI_CLASS_OTHERS;
}
diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c
index 6d42f95a89..7351ab0a19 100644
--- a/hw/virtio/virtio-crypto.c
+++ b/hw/virtio/virtio-crypto.c
@@ -955,7 +955,7 @@ static void virtio_crypto_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = virtio_crypto_properties;
+ device_class_set_props(dc, virtio_crypto_properties);
dc->vmsd = &vmstate_virtio_crypto;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
vdc->realize = virtio_crypto_device_realize;
diff --git a/hw/virtio/virtio-input-pci.c b/hw/virtio/virtio-input-pci.c
index 80b1172c90..5a965408df 100644
--- a/hw/virtio/virtio-input-pci.c
+++ b/hw/virtio/virtio-input-pci.c
@@ -60,7 +60,7 @@ static void virtio_input_pci_class_init(ObjectClass *klass, void *data)
VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
- dc->props = virtio_input_pci_properties;
+ device_class_set_props(dc, virtio_input_pci_properties);
k->realize = virtio_input_pci_realize;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
index 872f2cd237..f12d1595aa 100644
--- a/hw/virtio/virtio-mmio.c
+++ b/hw/virtio/virtio-mmio.c
@@ -712,7 +712,7 @@ static void virtio_mmio_class_init(ObjectClass *klass, void *data)
dc->realize = virtio_mmio_realizefn;
dc->reset = virtio_mmio_reset;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
- dc->props = virtio_mmio_properties;
+ device_class_set_props(dc, virtio_mmio_properties);
}
static const TypeInfo virtio_mmio_info = {
diff --git a/hw/virtio/virtio-net-pci.c b/hw/virtio/virtio-net-pci.c
index f670aed0a7..5ca71d4c34 100644
--- a/hw/virtio/virtio-net-pci.c
+++ b/hw/virtio/virtio-net-pci.c
@@ -68,7 +68,7 @@ static void virtio_net_pci_class_init(ObjectClass *klass, void *data)
k->revision = VIRTIO_PCI_ABI_VERSION;
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
- dc->props = virtio_net_properties;
+ device_class_set_props(dc, virtio_net_properties);
vpciklass->realize = virtio_net_pci_realize;
}
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index f723b9f631..4cb784389c 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1886,7 +1886,7 @@ static void virtio_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
VirtioPCIClass *vpciklass = VIRTIO_PCI_CLASS(klass);
- dc->props = virtio_pci_properties;
+ device_class_set_props(dc, virtio_pci_properties);
k->realize = virtio_pci_realize;
k->exit = virtio_pci_exit;
k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
@@ -1925,7 +1925,7 @@ static void virtio_pci_generic_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = virtio_pci_generic_properties;
+ device_class_set_props(dc, virtio_pci_generic_properties);
}
static void virtio_pci_transitional_instance_init(Object *obj)
diff --git a/hw/virtio/virtio-pmem.c b/hw/virtio/virtio-pmem.c
index c0c9395e55..97287e923b 100644
--- a/hw/virtio/virtio-pmem.c
+++ b/hw/virtio/virtio-pmem.c
@@ -165,7 +165,7 @@ static void virtio_pmem_class_init(ObjectClass *klass, void *data)
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
VirtIOPMEMClass *vpc = VIRTIO_PMEM_CLASS(klass);
- dc->props = virtio_pmem_properties;
+ device_class_set_props(dc, virtio_pmem_properties);
vdc->realize = virtio_pmem_realize;
vdc->unrealize = virtio_pmem_unrealize;
diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c
index b498a20332..1e363ad07b 100644
--- a/hw/virtio/virtio-rng.c
+++ b/hw/virtio/virtio-rng.c
@@ -269,7 +269,7 @@ static void virtio_rng_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
- dc->props = virtio_rng_properties;
+ device_class_set_props(dc, virtio_rng_properties);
dc->vmsd = &vmstate_virtio_rng;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
vdc->realize = virtio_rng_device_realize;
diff --git a/hw/virtio/virtio-scsi-pci.c b/hw/virtio/virtio-scsi-pci.c
index 3c55dc19a1..e82e7e5680 100644
--- a/hw/virtio/virtio-scsi-pci.c
+++ b/hw/virtio/virtio-scsi-pci.c
@@ -76,7 +76,7 @@ static void virtio_scsi_pci_class_init(ObjectClass *klass, void *data)
k->realize = virtio_scsi_pci_realize;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
- dc->props = virtio_scsi_pci_properties;
+ device_class_set_props(dc, virtio_scsi_pci_properties);
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI;
pcidev_k->revision = 0x00;
diff --git a/hw/virtio/virtio-serial-pci.c b/hw/virtio/virtio-serial-pci.c
index 953abbd13a..22ab4d8562 100644
--- a/hw/virtio/virtio-serial-pci.c
+++ b/hw/virtio/virtio-serial-pci.c
@@ -84,7 +84,7 @@ static void virtio_serial_pci_class_init(ObjectClass *klass, void *data)
PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
k->realize = virtio_serial_pci_realize;
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
- dc->props = virtio_serial_pci_properties;
+ device_class_set_props(dc, virtio_serial_pci_properties);
pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_CONSOLE;
pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 7b861e0ca0..2c5410e981 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -3713,7 +3713,7 @@ static void virtio_device_class_init(ObjectClass *klass, void *data)
dc->realize = virtio_device_realize;
dc->unrealize = virtio_device_unrealize;
dc->bus_type = TYPE_VIRTIO_BUS;
- dc->props = virtio_properties;
+ device_class_set_props(dc, virtio_properties);
vdc->start_ioeventfd = virtio_device_start_ioeventfd_impl;
vdc->stop_ioeventfd = virtio_device_stop_ioeventfd_impl;
diff --git a/hw/watchdog/cmsdk-apb-watchdog.c b/hw/watchdog/cmsdk-apb-watchdog.c
index e6f3b93c44..1541365914 100644
--- a/hw/watchdog/cmsdk-apb-watchdog.c
+++ b/hw/watchdog/cmsdk-apb-watchdog.c
@@ -371,7 +371,7 @@ static void cmsdk_apb_watchdog_class_init(ObjectClass *klass, void *data)
dc->realize = cmsdk_apb_watchdog_realize;
dc->vmsd = &cmsdk_apb_watchdog_vmstate;
dc->reset = cmsdk_apb_watchdog_reset;
- dc->props = cmsdk_apb_watchdog_properties;
+ device_class_set_props(dc, cmsdk_apb_watchdog_properties);
}
static const TypeInfo cmsdk_apb_watchdog_info = {
diff --git a/hw/watchdog/wdt_aspeed.c b/hw/watchdog/wdt_aspeed.c
index f50dab922e..6352ba1b0e 100644
--- a/hw/watchdog/wdt_aspeed.c
+++ b/hw/watchdog/wdt_aspeed.c
@@ -271,7 +271,7 @@ static void aspeed_wdt_class_init(ObjectClass *klass, void *data)
dc->reset = aspeed_wdt_reset;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
dc->vmsd = &vmstate_aspeed_wdt;
- dc->props = aspeed_wdt_properties;
+ device_class_set_props(dc, aspeed_wdt_properties);
}
static const TypeInfo aspeed_wdt_info = {
diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c
index c2ad22a42d..919e66162a 100644
--- a/hw/xen/xen-bus.c
+++ b/hw/xen/xen-bus.c
@@ -1332,7 +1332,7 @@ static void xen_device_class_init(ObjectClass *class, void *data)
dev_class->realize = xen_device_realize;
dev_class->unrealize = xen_device_unrealize;
- dev_class->props = xen_device_props;
+ device_class_set_props(dev_class, xen_device_props);
dev_class->bus_type = TYPE_XEN_BUS;
}
diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c
index 4412d7aa76..4a373b2373 100644
--- a/hw/xen/xen-legacy-backend.c
+++ b/hw/xen/xen-legacy-backend.c
@@ -786,7 +786,7 @@ static void xendev_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = xendev_properties;
+ device_class_set_props(dc, xendev_properties);
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
/* xen-backend devices can be plugged/unplugged dynamically */
dc->user_creatable = true;
@@ -824,7 +824,7 @@ static void xen_sysdev_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- dc->props = xen_sysdev_properties;
+ device_class_set_props(dc, xen_sysdev_properties);
dc->bus_type = TYPE_XENSYSBUS;
}
diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index 9e767d4244..b91082cb8b 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -964,7 +964,7 @@ static void xen_pci_passthrough_class_init(ObjectClass *klass, void *data)
k->config_write = xen_pt_pci_write_config;
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
dc->desc = "Assign an host PCI device with Xen";
- dc->props = xen_pci_passthrough_properties;
+ device_class_set_props(dc, xen_pci_passthrough_properties);
};
static void xen_pci_passthrough_finalize(Object *obj)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 77c6f05299..73e9a869a4 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -1135,6 +1135,10 @@ void cpu_exec_unrealizefn(CPUState *cpu);
*/
bool target_words_bigendian(void);
+void cpu_class_set_parent_reset(CPUClass *cc,
+ void (*child_reset)(CPUState *cpu),
+ void (**parent_reset)(CPUState *cpu));
+
#ifdef NEED_CPU_H
#ifdef CONFIG_SOFTMMU
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 1518495b1e..5da94f872a 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -100,7 +100,12 @@ typedef struct DeviceClass {
DECLARE_BITMAP(categories, DEVICE_CATEGORY_MAX);
const char *fw_name;
const char *desc;
- Property *props;
+
+ /*
+ * The underscore at the end ensures a compile-time error if someone
+ * assigns to dc->props instead of using device_class_set_props.
+ */
+ Property *props_;
/*
* Can this device be instantiated with -device / device_add?
@@ -258,8 +263,8 @@ struct PropertyInfo {
const char *description;
const QEnumLookup *enum_table;
int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
- void (*set_default_value)(Object *obj, const Property *prop);
- void (*create)(Object *obj, Property *prop, Error **errp);
+ void (*set_default_value)(ObjectProperty *op, const Property *prop);
+ void (*create)(ObjectClass *oc, Property *prop, Error **errp);
ObjectPropertyAccessor *get;
ObjectPropertyAccessor *set;
ObjectPropertyRelease *release;
@@ -433,6 +438,8 @@ void qdev_machine_init(void);
*/
void device_reset(DeviceState *dev);
+void device_class_set_props(DeviceClass *dc, Property *props);
+
void device_class_set_parent_reset(DeviceClass *dc,
DeviceReset dev_reset,
DeviceReset *parent_reset);
@@ -457,8 +464,6 @@ extern bool qdev_hot_removed;
char *qdev_get_dev_path(DeviceState *dev);
-GSList *qdev_build_hotpluggable_device_list(Object *peripheral);
-
void qbus_set_hotplug_handler(BusState *bus, Object *handler, Error **errp);
void qbus_set_bus_hotplug_handler(BusState *bus, Error **errp);
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index a90a9cec80..906e697c58 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -253,13 +253,12 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
* qdev_property_add_static:
* @dev: Device to add the property to.
* @prop: The qdev property definition.
- * @errp: location to store error information.
*
* Add a static QOM property to @dev for qdev property @prop.
* On error, store error in @errp. Static properties access data in a struct.
* The type of the QOM property is derived from prop->info.
*/
-void qdev_property_add_static(DeviceState *dev, Property *prop, Error **errp);
+void qdev_property_add_static(DeviceState *dev, Property *prop);
void qdev_alias_all_properties(DeviceState *target, Object *source);
diff --git a/include/qapi/qmp/qstring.h b/include/qapi/qmp/qstring.h
index 3e83e3a95d..e2e356e5e7 100644
--- a/include/qapi/qmp/qstring.h
+++ b/include/qapi/qmp/qstring.h
@@ -33,6 +33,7 @@ void qstring_append_int(QString *qstring, int64_t value);
void qstring_append(QString *qstring, const char *str);
void qstring_append_chr(QString *qstring, int c);
bool qstring_is_equal(const QObject *x, const QObject *y);
+char *qstring_free(QString *qstring, bool return_str);
void qstring_destroy_obj(QObject *obj);
#endif /* QSTRING_H */
diff --git a/include/qom/object.h b/include/qom/object.h
index 54a548868c..29546496c1 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -309,6 +309,8 @@ typedef struct InterfaceInfo InterfaceInfo;
*/
+typedef struct ObjectProperty ObjectProperty;
+
/**
* ObjectPropertyAccessor:
* @obj: the object that owns the property
@@ -356,7 +358,16 @@ typedef void (ObjectPropertyRelease)(Object *obj,
const char *name,
void *opaque);
-typedef struct ObjectProperty
+/**
+ * ObjectPropertyInit:
+ * @obj: the object that owns the property
+ * @prop: the property to set
+ *
+ * Called when a property is initialized.
+ */
+typedef void (ObjectPropertyInit)(Object *obj, ObjectProperty *prop);
+
+struct ObjectProperty
{
gchar *name;
gchar *type;
@@ -365,8 +376,10 @@ typedef struct ObjectProperty
ObjectPropertyAccessor *set;
ObjectPropertyResolve *resolve;
ObjectPropertyRelease *release;
+ ObjectPropertyInit *init;
void *opaque;
-} ObjectProperty;
+ QObject *defval;
+};
/**
* ObjectUnparent:
@@ -992,8 +1005,9 @@ GSList *object_class_get_list_sorted(const char *implements_type,
*
* Increase the reference count of a object. A object cannot be freed as long
* as its reference count is greater than zero.
+ * Returns: @obj
*/
-void object_ref(Object *obj);
+Object *object_ref(Object *obj);
/**
* object_unref:
@@ -1044,6 +1058,42 @@ ObjectProperty *object_class_property_add(ObjectClass *klass, const char *name,
void *opaque, Error **errp);
/**
+ * object_property_set_default_bool:
+ * @prop: the property to set
+ * @value: the value to be written to the property
+ *
+ * Set the property default value.
+ */
+void object_property_set_default_bool(ObjectProperty *prop, bool value);
+
+/**
+ * object_property_set_default_str:
+ * @prop: the property to set
+ * @value: the value to be written to the property
+ *
+ * Set the property default value.
+ */
+void object_property_set_default_str(ObjectProperty *prop, const char *value);
+
+/**
+ * object_property_set_default_int:
+ * @prop: the property to set
+ * @value: the value to be written to the property
+ *
+ * Set the property default value.
+ */
+void object_property_set_default_int(ObjectProperty *prop, int64_t value);
+
+/**
+ * object_property_set_default_uint:
+ * @prop: the property to set
+ * @value: the value to be written to the property
+ *
+ * Set the property default value.
+ */
+void object_property_set_default_uint(ObjectProperty *prop, uint64_t value);
+
+/**
* object_property_find:
* @obj: the object
* @name: the name of the property
@@ -1462,6 +1512,10 @@ void object_property_add_child(Object *obj, const char *name,
typedef enum {
/* Unref the link pointer when the property is deleted */
OBJ_PROP_LINK_STRONG = 0x1,
+
+ /* private */
+ OBJ_PROP_LINK_DIRECT = 0x2,
+ OBJ_PROP_LINK_CLASS = 0x4,
} ObjectPropertyLinkFlags;
/**
@@ -1479,7 +1533,7 @@ void object_property_allow_set_link(const Object *, const char *,
* @obj: the object to add a property to
* @name: the name of the property
* @type: the qobj type of the link
- * @child: a pointer to where the link object reference is stored
+ * @targetp: a pointer to where the link object reference is stored
* @check: callback to veto setting or NULL if the property is read-only
* @flags: additional options for the link
* @errp: if an error occurs, a pointer to an area to store the error
@@ -1504,7 +1558,15 @@ void object_property_allow_set_link(const Object *, const char *,
* modified.
*/
void object_property_add_link(Object *obj, const char *name,
- const char *type, Object **child,
+ const char *type, Object **targetp,
+ void (*check)(const Object *obj, const char *name,
+ Object *val, Error **errp),
+ ObjectPropertyLinkFlags flags,
+ Error **errp);
+
+ObjectProperty *object_class_property_add_link(ObjectClass *oc,
+ const char *name,
+ const char *type, ptrdiff_t offset,
void (*check)(const Object *obj, const char *name,
Object *val, Error **errp),
ObjectPropertyLinkFlags flags,
@@ -1527,7 +1589,8 @@ void object_property_add_str(Object *obj, const char *name,
void (*set)(Object *, const char *, Error **),
Error **errp);
-void object_class_property_add_str(ObjectClass *klass, const char *name,
+ObjectProperty *object_class_property_add_str(ObjectClass *klass,
+ const char *name,
char *(*get)(Object *, Error **),
void (*set)(Object *, const char *,
Error **),
@@ -1549,7 +1612,8 @@ void object_property_add_bool(Object *obj, const char *name,
void (*set)(Object *, bool, Error **),
Error **errp);
-void object_class_property_add_bool(ObjectClass *klass, const char *name,
+ObjectProperty *object_class_property_add_bool(ObjectClass *klass,
+ const char *name,
bool (*get)(Object *, Error **),
void (*set)(Object *, bool, Error **),
Error **errp);
@@ -1573,7 +1637,8 @@ void object_property_add_enum(Object *obj, const char *name,
void (*set)(Object *, int, Error **),
Error **errp);
-void object_class_property_add_enum(ObjectClass *klass, const char *name,
+ObjectProperty *object_class_property_add_enum(ObjectClass *klass,
+ const char *name,
const char *typename,
const QEnumLookup *lookup,
int (*get)(Object *, Error **),
@@ -1594,7 +1659,8 @@ void object_property_add_tm(Object *obj, const char *name,
void (*get)(Object *, struct tm *, Error **),
Error **errp);
-void object_class_property_add_tm(ObjectClass *klass, const char *name,
+ObjectProperty *object_class_property_add_tm(ObjectClass *klass,
+ const char *name,
void (*get)(Object *, struct tm *, Error **),
Error **errp);
@@ -1610,7 +1676,8 @@ void object_class_property_add_tm(ObjectClass *klass, const char *name,
*/
void object_property_add_uint8_ptr(Object *obj, const char *name,
const uint8_t *v, Error **errp);
-void object_class_property_add_uint8_ptr(ObjectClass *klass, const char *name,
+ObjectProperty *object_class_property_add_uint8_ptr(ObjectClass *klass,
+ const char *name,
const uint8_t *v, Error **errp);
/**
@@ -1625,7 +1692,8 @@ void object_class_property_add_uint8_ptr(ObjectClass *klass, const char *name,
*/
void object_property_add_uint16_ptr(Object *obj, const char *name,
const uint16_t *v, Error **errp);
-void object_class_property_add_uint16_ptr(ObjectClass *klass, const char *name,
+ObjectProperty *object_class_property_add_uint16_ptr(ObjectClass *klass,
+ const char *name,
const uint16_t *v, Error **errp);
/**
@@ -1640,7 +1708,8 @@ void object_class_property_add_uint16_ptr(ObjectClass *klass, const char *name,
*/
void object_property_add_uint32_ptr(Object *obj, const char *name,
const uint32_t *v, Error **errp);
-void object_class_property_add_uint32_ptr(ObjectClass *klass, const char *name,
+ObjectProperty *object_class_property_add_uint32_ptr(ObjectClass *klass,
+ const char *name,
const uint32_t *v, Error **errp);
/**
@@ -1655,7 +1724,8 @@ void object_class_property_add_uint32_ptr(ObjectClass *klass, const char *name,
*/
void object_property_add_uint64_ptr(Object *obj, const char *name,
const uint64_t *v, Error **errp);
-void object_class_property_add_uint64_ptr(ObjectClass *klass, const char *name,
+ObjectProperty *object_class_property_add_uint64_ptr(ObjectClass *klass,
+ const char *name,
const uint64_t *v, Error **errp);
/**
@@ -1767,6 +1837,19 @@ Object *container_get(Object *root, const char *path);
*/
size_t object_type_get_instance_size(const char *typename);
+/**
+ * object_property_help:
+ * @name: the name of the property
+ * @type: the type of the property
+ * @defval: the default value
+ * @description: description of the property
+ *
+ * Returns: a user-friendly formatted string describing the property
+ * for help purposes.
+ */
+char *object_property_help(const char *name, const char *type,
+ QObject *defval, const char *description);
+
G_DEFINE_AUTOPTR_CLEANUP_FUNC(Object, object_unref)
#endif
diff --git a/include/sysemu/accel.h b/include/sysemu/accel.h
index d4c1429711..47e5788530 100644
--- a/include/sysemu/accel.h
+++ b/include/sysemu/accel.h
@@ -70,4 +70,6 @@ int accel_init_machine(AccelState *accel, MachineState *ms);
/* Called just before os_setup_post (ie just before drop OS privs) */
void accel_setup_post(MachineState *ms);
+AccelState *current_accel(void);
+
#endif
diff --git a/include/sysemu/runstate.h b/include/sysemu/runstate.h
index 0b41555609..f760094858 100644
--- a/include/sysemu/runstate.h
+++ b/include/sysemu/runstate.h
@@ -63,6 +63,7 @@ ShutdownCause qemu_reset_requested_get(void);
void qemu_system_killed(int signal, pid_t pid);
void qemu_system_reset(ShutdownCause reason);
void qemu_system_guest_panicked(GuestPanicInformation *info);
+void qemu_system_guest_crashloaded(GuestPanicInformation *info);
#endif
diff --git a/memory.c b/memory.c
index d7b9bb6951..854798791e 100644
--- a/memory.c
+++ b/memory.c
@@ -3104,7 +3104,7 @@ void mtree_info(bool flatview, bool dispatch_tree, bool owner)
};
GArray *fv_address_spaces;
GHashTable *views = g_hash_table_new(g_direct_hash, g_direct_equal);
- AccelClass *ac = ACCEL_GET_CLASS(current_machine->accelerator);
+ AccelClass *ac = ACCEL_GET_CLASS(current_accel());
if (ac->has_memory) {
fvi.ac = ac;
diff --git a/migration/migration.c b/migration/migration.c
index 990bff00c0..efd5350e84 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3514,7 +3514,7 @@ static void migration_class_init(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
dc->user_creatable = false;
- dc->props = migration_properties;
+ device_class_set_props(dc, migration_properties);
}
static void migration_instance_finalize(Object *obj)
diff --git a/monitor/misc.c b/monitor/misc.c
index de1ca4d114..4752150a67 100644
--- a/monitor/misc.c
+++ b/monitor/misc.c
@@ -1959,6 +1959,32 @@ void object_add_completion(ReadLineState *rs, int nb_args, const char *str)
g_slist_free(list);
}
+static int qdev_add_hotpluggable_device(Object *obj, void *opaque)
+{
+ GSList **list = opaque;
+ DeviceState *dev = (DeviceState *)object_dynamic_cast(OBJECT(obj),
+ TYPE_DEVICE);
+
+ if (dev == NULL) {
+ return 0;
+ }
+
+ if (dev->realized && object_property_get_bool(obj, "hotpluggable", NULL)) {
+ *list = g_slist_append(*list, dev);
+ }
+
+ return 0;
+}
+
+static GSList *qdev_build_hotpluggable_device_list(Object *peripheral)
+{
+ GSList *list = NULL;
+
+ object_child_foreach(peripheral, qdev_add_hotpluggable_device, &list);
+
+ return list;
+}
+
static void peripheral_device_del_completion(ReadLineState *rs,
const char *str, size_t len)
{
diff --git a/qapi/qom.json b/qapi/qom.json
index 32db96ffc4..1e3c2ad555 100644
--- a/qapi/qom.json
+++ b/qapi/qom.json
@@ -26,10 +26,15 @@
#
# @description: if specified, the description of the property.
#
+# @default-value: the default value, if any (since 5.0)
+#
# Since: 1.2
##
{ 'struct': 'ObjectPropertyInfo',
- 'data': { 'name': 'str', 'type': 'str', '*description': 'str' } }
+ 'data': { 'name': 'str',
+ 'type': 'str',
+ '*description': 'str',
+ '*default-value': 'any' } }
##
# @qom-list:
diff --git a/qapi/run-state.json b/qapi/run-state.json
index d7477cd715..b83a436a3e 100644
--- a/qapi/run-state.json
+++ b/qapi/run-state.json
@@ -357,16 +357,36 @@
'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } }
##
+# @GUEST_CRASHLOADED:
+#
+# Emitted when guest OS crash loaded is detected
+#
+# @action: action that has been taken, currently always "run"
+#
+# @info: information about a panic
+#
+# Since: 5.0
+#
+# Example:
+#
+# <- { "event": "GUEST_CRASHLOADED",
+# "data": { "action": "run" } }
+#
+##
+{ 'event': 'GUEST_CRASHLOADED',
+ 'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } }
+
+##
# @GuestPanicAction:
#
# An enumeration of the actions taken when guest OS panic is detected
#
# @pause: system pauses
#
-# Since: 2.1 (poweroff since 2.8)
+# Since: 2.1 (poweroff since 2.8, run since 5.0)
##
{ 'enum': 'GuestPanicAction',
- 'data': [ 'pause', 'poweroff' ] }
+ 'data': [ 'pause', 'poweroff', 'run' ] }
##
# @GuestPanicInformationType:
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 3465a1e2d0..8ce71a206b 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -37,6 +37,7 @@
#include "sysemu/sysemu.h"
#include "migration/misc.h"
#include "migration/migration.h"
+#include "qemu/cutils.h"
/*
* Aliases were a bad idea from the start. Let's keep them
@@ -256,6 +257,8 @@ int qdev_device_help(QemuOpts *opts)
const char *driver;
ObjectPropertyInfoList *prop_list;
ObjectPropertyInfoList *prop;
+ GPtrArray *array;
+ int i;
driver = qemu_opt_get(opts, "driver");
if (driver && is_help_option(driver)) {
@@ -285,19 +288,20 @@ int qdev_device_help(QemuOpts *opts)
} else {
qemu_printf("There are no options for %s.\n", driver);
}
+ array = g_ptr_array_new();
for (prop = prop_list; prop; prop = prop->next) {
- int len;
- qemu_printf(" %s=<%s>%n", prop->value->name, prop->value->type, &len);
- if (prop->value->has_description) {
- if (len < 24) {
- qemu_printf("%*s", 24 - len, "");
- }
- qemu_printf(" - %s\n", prop->value->description);
- } else {
- qemu_printf("\n");
- }
- }
-
+ g_ptr_array_add(array,
+ object_property_help(prop->value->name,
+ prop->value->type,
+ prop->value->default_value,
+ prop->value->description));
+ }
+ g_ptr_array_sort(array, (GCompareFunc)qemu_pstrcmp0);
+ for (i = 0; i < array->len; i++) {
+ printf("%s\n", (char *)array->pdata[i]);
+ }
+ g_ptr_array_set_free_func(array, g_free);
+ g_ptr_array_free(array, true);
qapi_free_ObjectPropertyInfoList(prop_list);
return 1;
@@ -748,7 +752,7 @@ static void qdev_print(Monitor *mon, DeviceState *dev, int indent)
}
class = object_get_class(OBJECT(dev));
do {
- qdev_print_props(mon, dev, DEVICE_CLASS(class)->props, indent);
+ qdev_print_props(mon, dev, DEVICE_CLASS(class)->props_, indent);
class = object_class_get_parent(class);
} while (class != object_class_by_name(TYPE_DEVICE));
bus_print_dev(dev->parent_bus, mon, dev, indent);
diff --git a/qga/vss-win32/Makefile.objs b/qga/vss-win32/Makefile.objs
index fd3ba1896b..c82676aeb8 100644
--- a/qga/vss-win32/Makefile.objs
+++ b/qga/vss-win32/Makefile.objs
@@ -5,9 +5,9 @@ qga-vss-dll-obj-y += requester.o provider.o install.o
obj-qga-vss-dll-obj-y = $(addprefix $(obj)/, $(qga-vss-dll-obj-y))
$(obj-qga-vss-dll-obj-y): QEMU_CXXFLAGS := $(filter-out -fstack-protector-all -fstack-protector-strong, $(QEMU_CXXFLAGS)) -Wno-unknown-pragmas -Wno-delete-non-virtual-dtor
-$(obj)/qga-vss.dll: LDFLAGS = -shared -Wl,--add-stdcall-alias,--enable-stdcall-fixup -lglib-2.0 -lole32 -loleaut32 -lshlwapi -luuid -lintl -lws2_32 -static
+QGA_VSS_LDFLAGS = -shared -Wl,--add-stdcall-alias,--enable-stdcall-fixup -lglib-2.0 -lole32 -loleaut32 -lshlwapi -luuid -lintl -lws2_32 -static
$(obj)/qga-vss.dll: $(obj-qga-vss-dll-obj-y) $(SRC_PATH)/$(obj)/qga-vss.def
- $(call quiet-command,$(CXX) -o $@ $(qga-vss-dll-obj-y) $(SRC_PATH)/qga/vss-win32/qga-vss.def $(CXXFLAGS) $(LDFLAGS),"LINK","$(TARGET_DIR)$@")
+ $(call quiet-command,$(CXX) -o $@ $(qga-vss-dll-obj-y) $(SRC_PATH)/qga/vss-win32/qga-vss.def $(CXXFLAGS) $(QGA_VSS_LDFLAGS),"LINK","$(TARGET_DIR)$@")
# rules to build qga-provider.tlb
diff --git a/qobject/qstring.c b/qobject/qstring.c
index 1c6897df00..b66a2c35f2 100644
--- a/qobject/qstring.c
+++ b/qobject/qstring.c
@@ -150,15 +150,32 @@ bool qstring_is_equal(const QObject *x, const QObject *y)
}
/**
+ * qstring_free(): Free the memory allocated by a QString object
+ *
+ * Return: if @return_str, return the underlying string, to be
+ * g_free(), otherwise NULL is returned.
+ */
+char *qstring_free(QString *qstring, bool return_str)
+{
+ char *rv = NULL;
+
+ if (return_str) {
+ rv = qstring->string;
+ } else {
+ g_free(qstring->string);
+ }
+
+ g_free(qstring);
+
+ return rv;
+}
+
+/**
* qstring_destroy_obj(): Free all memory allocated by a QString
* object
*/
void qstring_destroy_obj(QObject *obj)
{
- QString *qs;
-
assert(obj != NULL);
- qs = qobject_to(QString, obj);
- g_free(qs->string);
- g_free(qs);
+ qstring_free(qobject_to(QString, obj), FALSE);
}
diff --git a/qom/object.c b/qom/object.c
index 0d971ca897..555c8b9d07 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -19,8 +19,10 @@
#include "qapi/visitor.h"
#include "qapi/string-input-visitor.h"
#include "qapi/string-output-visitor.h"
+#include "qapi/qobject-input-visitor.h"
#include "qapi/qapi-builtin-visit.h"
#include "qapi/qmp/qerror.h"
+#include "qapi/qmp/qjson.h"
#include "trace.h"
/* TODO: replace QObject with a simpler visitor to avoid a dependency
@@ -173,7 +175,11 @@ static TypeImpl *type_get_parent(TypeImpl *type)
{
if (!type->parent_type && type->parent) {
type->parent_type = type_get_by_name(type->parent);
- g_assert(type->parent_type != NULL);
+ if (!type->parent_type) {
+ fprintf(stderr, "Type '%s' is missing its parent '%s'\n",
+ type->name, type->parent);
+ abort();
+ }
}
return type->parent_type;
@@ -264,6 +270,10 @@ static void object_property_free(gpointer data)
{
ObjectProperty *prop = data;
+ if (prop->defval) {
+ qobject_unref(prop->defval);
+ prop->defval = NULL;
+ }
g_free(prop->name);
g_free(prop->type);
g_free(prop->description);
@@ -303,10 +313,11 @@ static void type_initialize(TypeImpl *ti)
int i;
g_assert(parent->class_size <= ti->class_size);
+ g_assert(parent->instance_size <= ti->instance_size);
memcpy(ti->class, parent->class, parent->class_size);
ti->class->interfaces = NULL;
ti->class->properties = g_hash_table_new_full(
- g_str_hash, g_str_equal, g_free, object_property_free);
+ g_str_hash, g_str_equal, NULL, object_property_free);
for (e = parent->class->interfaces; e; e = e->next) {
InterfaceClass *iface = e->data;
@@ -317,6 +328,11 @@ static void type_initialize(TypeImpl *ti)
for (i = 0; i < ti->num_interfaces; i++) {
TypeImpl *t = type_get_by_name(ti->interfaces[i].typename);
+ if (!t) {
+ error_report("missing interface '%s' for object '%s'",
+ ti->interfaces[i].typename, parent->name);
+ abort();
+ }
for (e = ti->class->interfaces; e; e = e->next) {
TypeImpl *target_type = OBJECT_CLASS(e->data)->type;
@@ -333,7 +349,7 @@ static void type_initialize(TypeImpl *ti)
}
} else {
ti->class->properties = g_hash_table_new_full(
- g_str_hash, g_str_equal, g_free, object_property_free);
+ g_str_hash, g_str_equal, NULL, object_property_free);
}
ti->class->type = ti;
@@ -468,6 +484,19 @@ void object_apply_compat_props(Object *obj)
}
}
+static void object_class_property_init_all(Object *obj)
+{
+ ObjectPropertyIterator iter;
+ ObjectProperty *prop;
+
+ object_class_property_iter_init(&iter, object_get_class(obj));
+ while ((prop = object_property_iter_next(&iter))) {
+ if (prop->init) {
+ prop->init(obj, prop);
+ }
+ }
+}
+
static void object_initialize_with_type(void *data, size_t size, TypeImpl *type)
{
Object *obj = data;
@@ -481,6 +510,7 @@ static void object_initialize_with_type(void *data, size_t size, TypeImpl *type)
memset(obj, 0, type->instance_size);
obj->class = type->class;
object_ref(obj);
+ object_class_property_init_all(obj);
obj->properties = g_hash_table_new_full(g_str_hash, g_str_equal,
NULL, object_property_free);
object_init_with_type(obj, type);
@@ -562,23 +592,22 @@ static inline bool object_property_is_child(ObjectProperty *prop)
static void object_property_del_all(Object *obj)
{
+ g_autoptr(GHashTable) done = g_hash_table_new(NULL, NULL);
ObjectProperty *prop;
- GHashTableIter iter;
- gpointer key, value;
+ ObjectPropertyIterator iter;
bool released;
do {
released = false;
- g_hash_table_iter_init(&iter, obj->properties);
- while (g_hash_table_iter_next(&iter, &key, &value)) {
- prop = value;
- if (prop->release) {
- prop->release(obj, prop->name, prop->opaque);
- prop->release = NULL;
- released = true;
- break;
+ object_property_iter_init(&iter, obj);
+ while ((prop = object_property_iter_next(&iter)) != NULL) {
+ if (g_hash_table_add(done, prop)) {
+ if (prop->release) {
+ prop->release(obj, prop->name, prop->opaque);
+ released = true;
+ break;
+ }
}
- g_hash_table_iter_remove(&iter);
}
} while (released);
@@ -1078,12 +1107,13 @@ GSList *object_class_get_list_sorted(const char *implements_type,
object_class_cmp);
}
-void object_ref(Object *obj)
+Object *object_ref(Object *obj)
{
if (!obj) {
- return;
+ return NULL;
}
atomic_inc(&obj->ref);
+ return obj;
}
void object_unref(Object *obj)
@@ -1177,7 +1207,7 @@ object_class_property_add(ObjectClass *klass,
prop->release = release;
prop->opaque = opaque;
- g_hash_table_insert(klass->properties, g_strdup(name), prop);
+ g_hash_table_insert(klass->properties, prop->name, prop);
return prop;
}
@@ -1414,6 +1444,45 @@ int64_t object_property_get_int(Object *obj, const char *name,
return retval;
}
+static void object_property_init_defval(Object *obj, ObjectProperty *prop)
+{
+ Visitor *v = qobject_input_visitor_new(prop->defval);
+
+ assert(prop->set != NULL);
+ prop->set(obj, v, prop->name, prop->opaque, &error_abort);
+
+ visit_free(v);
+}
+
+static void object_property_set_default(ObjectProperty *prop, QObject *defval)
+{
+ assert(!prop->defval);
+ assert(!prop->init);
+
+ prop->defval = defval;
+ prop->init = object_property_init_defval;
+}
+
+void object_property_set_default_bool(ObjectProperty *prop, bool value)
+{
+ object_property_set_default(prop, QOBJECT(qbool_from_bool(value)));
+}
+
+void object_property_set_default_str(ObjectProperty *prop, const char *value)
+{
+ object_property_set_default(prop, QOBJECT(qstring_from_str(value)));
+}
+
+void object_property_set_default_int(ObjectProperty *prop, int64_t value)
+{
+ object_property_set_default(prop, QOBJECT(qnum_from_int(value)));
+}
+
+void object_property_set_default_uint(ObjectProperty *prop, uint64_t value)
+{
+ object_property_set_default(prop, QOBJECT(qnum_from_uint(value)));
+}
+
void object_property_set_uint(Object *obj, uint64_t value,
const char *name, Error **errp)
{
@@ -1644,21 +1713,37 @@ void object_property_allow_set_link(const Object *obj, const char *name,
}
typedef struct {
- Object **child;
+ union {
+ Object **targetp;
+ Object *target; /* if OBJ_PROP_LINK_DIRECT, when holding the pointer */
+ ptrdiff_t offset; /* if OBJ_PROP_LINK_CLASS */
+ };
void (*check)(const Object *, const char *, Object *, Error **);
ObjectPropertyLinkFlags flags;
} LinkProperty;
+static Object **
+object_link_get_targetp(Object *obj, LinkProperty *lprop)
+{
+ if (lprop->flags & OBJ_PROP_LINK_DIRECT) {
+ return &lprop->target;
+ } else if (lprop->flags & OBJ_PROP_LINK_CLASS) {
+ return (void *)obj + lprop->offset;
+ } else {
+ return lprop->targetp;
+ }
+}
+
static void object_get_link_property(Object *obj, Visitor *v,
const char *name, void *opaque,
Error **errp)
{
LinkProperty *lprop = opaque;
- Object **child = lprop->child;
+ Object **targetp = object_link_get_targetp(obj, lprop);
gchar *path;
- if (*child) {
- path = object_get_canonical_path(*child);
+ if (*targetp) {
+ path = object_get_canonical_path(*targetp);
visit_type_str(v, name, &path, errp);
g_free(path);
} else {
@@ -1713,8 +1798,8 @@ static void object_set_link_property(Object *obj, Visitor *v,
{
Error *local_err = NULL;
LinkProperty *prop = opaque;
- Object **child = prop->child;
- Object *old_target = *child;
+ Object **targetp = object_link_get_targetp(obj, prop);
+ Object *old_target = *targetp;
Object *new_target = NULL;
char *path = NULL;
@@ -1736,8 +1821,8 @@ static void object_set_link_property(Object *obj, Visitor *v,
return;
}
- *child = new_target;
- if (prop->flags == OBJ_PROP_LINK_STRONG) {
+ *targetp = new_target;
+ if (prop->flags & OBJ_PROP_LINK_STRONG) {
object_ref(new_target);
object_unref(old_target);
}
@@ -1747,33 +1832,40 @@ static Object *object_resolve_link_property(Object *parent, void *opaque, const
{
LinkProperty *lprop = opaque;
- return *lprop->child;
+ return *object_link_get_targetp(parent, lprop);
}
static void object_release_link_property(Object *obj, const char *name,
void *opaque)
{
LinkProperty *prop = opaque;
+ Object **targetp = object_link_get_targetp(obj, prop);
- if ((prop->flags & OBJ_PROP_LINK_STRONG) && *prop->child) {
- object_unref(*prop->child);
+ if ((prop->flags & OBJ_PROP_LINK_STRONG) && *targetp) {
+ object_unref(*targetp);
+ }
+ if (!(prop->flags & OBJ_PROP_LINK_CLASS)) {
+ g_free(prop);
}
- g_free(prop);
}
-void object_property_add_link(Object *obj, const char *name,
- const char *type, Object **child,
- void (*check)(const Object *, const char *,
- Object *, Error **),
- ObjectPropertyLinkFlags flags,
- Error **errp)
+static void object_add_link_prop(Object *obj, const char *name,
+ const char *type, void *ptr,
+ void (*check)(const Object *, const char *,
+ Object *, Error **),
+ ObjectPropertyLinkFlags flags,
+ Error **errp)
{
Error *local_err = NULL;
LinkProperty *prop = g_malloc(sizeof(*prop));
gchar *full_type;
ObjectProperty *op;
- prop->child = child;
+ if (flags & OBJ_PROP_LINK_DIRECT) {
+ prop->target = ptr;
+ } else {
+ prop->targetp = ptr;
+ }
prop->check = check;
prop->flags = flags;
@@ -1797,20 +1889,60 @@ out:
g_free(full_type);
}
-void object_property_add_const_link(Object *obj, const char *name,
- Object *target, Error **errp)
+void object_property_add_link(Object *obj, const char *name,
+ const char *type, Object **targetp,
+ void (*check)(const Object *, const char *,
+ Object *, Error **),
+ ObjectPropertyLinkFlags flags,
+ Error **errp)
{
- char *link_type;
+ object_add_link_prop(obj, name, type, targetp, check, flags, errp);
+}
+
+ObjectProperty *
+object_class_property_add_link(ObjectClass *oc,
+ const char *name,
+ const char *type, ptrdiff_t offset,
+ void (*check)(const Object *obj, const char *name,
+ Object *val, Error **errp),
+ ObjectPropertyLinkFlags flags,
+ Error **errp)
+{
+ Error *local_err = NULL;
+ LinkProperty *prop = g_new0(LinkProperty, 1);
+ gchar *full_type;
ObjectProperty *op;
- link_type = g_strdup_printf("link<%s>", object_get_typename(target));
- op = object_property_add(obj, name, link_type,
- object_get_child_property, NULL,
- NULL, target, errp);
- if (op != NULL) {
- op->resolve = object_resolve_child_property;
+ prop->offset = offset;
+ prop->check = check;
+ prop->flags = flags | OBJ_PROP_LINK_CLASS;
+
+ full_type = g_strdup_printf("link<%s>", type);
+
+ op = object_class_property_add(oc, name, full_type,
+ object_get_link_property,
+ check ? object_set_link_property : NULL,
+ object_release_link_property,
+ prop,
+ &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ g_free(prop);
+ goto out;
}
- g_free(link_type);
+
+ op->resolve = object_resolve_link_property;
+
+out:
+ g_free(full_type);
+ return op;
+}
+
+void object_property_add_const_link(Object *obj, const char *name,
+ Object *target, Error **errp)
+{
+ object_add_link_prop(obj, name, object_get_typename(target), target,
+ NULL, OBJ_PROP_LINK_DIRECT, errp);
}
gchar *object_get_canonical_path_component(Object *obj)
@@ -2041,7 +2173,8 @@ void object_property_add_str(Object *obj, const char *name,
}
}
-void object_class_property_add_str(ObjectClass *klass, const char *name,
+ObjectProperty *
+object_class_property_add_str(ObjectClass *klass, const char *name,
char *(*get)(Object *, Error **),
void (*set)(Object *, const char *,
Error **),
@@ -2049,19 +2182,22 @@ void object_class_property_add_str(ObjectClass *klass, const char *name,
{
Error *local_err = NULL;
StringProperty *prop = g_malloc0(sizeof(*prop));
+ ObjectProperty *rv;
prop->get = get;
prop->set = set;
- object_class_property_add(klass, name, "string",
+ rv = object_class_property_add(klass, name, "string",
get ? property_get_str : NULL,
set ? property_set_str : NULL,
- property_release_str,
+ NULL,
prop, &local_err);
if (local_err) {
error_propagate(errp, local_err);
g_free(prop);
}
+
+ return rv;
}
typedef struct BoolProperty
@@ -2131,26 +2267,30 @@ void object_property_add_bool(Object *obj, const char *name,
}
}
-void object_class_property_add_bool(ObjectClass *klass, const char *name,
+ObjectProperty *
+object_class_property_add_bool(ObjectClass *klass, const char *name,
bool (*get)(Object *, Error **),
void (*set)(Object *, bool, Error **),
Error **errp)
{
Error *local_err = NULL;
BoolProperty *prop = g_malloc0(sizeof(*prop));
+ ObjectProperty *rv;
prop->get = get;
prop->set = set;
- object_class_property_add(klass, name, "bool",
+ rv = object_class_property_add(klass, name, "bool",
get ? property_get_bool : NULL,
set ? property_set_bool : NULL,
- property_release_bool,
+ NULL,
prop, &local_err);
if (local_err) {
error_propagate(errp, local_err);
g_free(prop);
}
+
+ return rv;
}
static void property_get_enum(Object *obj, Visitor *v, const char *name,
@@ -2216,7 +2356,8 @@ void object_property_add_enum(Object *obj, const char *name,
}
}
-void object_class_property_add_enum(ObjectClass *klass, const char *name,
+ObjectProperty *
+object_class_property_add_enum(ObjectClass *klass, const char *name,
const char *typename,
const QEnumLookup *lookup,
int (*get)(Object *, Error **),
@@ -2225,20 +2366,23 @@ void object_class_property_add_enum(ObjectClass *klass, const char *name,
{
Error *local_err = NULL;
EnumProperty *prop = g_malloc(sizeof(*prop));
+ ObjectProperty *rv;
prop->lookup = lookup;
prop->get = get;
prop->set = set;
- object_class_property_add(klass, name, typename,
+ rv = object_class_property_add(klass, name, typename,
get ? property_get_enum : NULL,
set ? property_set_enum : NULL,
- property_release_enum,
+ NULL,
prop, &local_err);
if (local_err) {
error_propagate(errp, local_err);
g_free(prop);
}
+
+ return rv;
}
typedef struct TMProperty {
@@ -2319,23 +2463,27 @@ void object_property_add_tm(Object *obj, const char *name,
}
}
-void object_class_property_add_tm(ObjectClass *klass, const char *name,
+ObjectProperty *
+object_class_property_add_tm(ObjectClass *klass, const char *name,
void (*get)(Object *, struct tm *, Error **),
Error **errp)
{
Error *local_err = NULL;
TMProperty *prop = g_malloc0(sizeof(*prop));
+ ObjectProperty *rv;
prop->get = get;
- object_class_property_add(klass, name, "struct tm",
+ rv = object_class_property_add(klass, name, "struct tm",
get ? property_get_tm : NULL, NULL,
- property_release_tm,
+ NULL,
prop, &local_err);
if (local_err) {
error_propagate(errp, local_err);
g_free(prop);
}
+
+ return rv;
}
static char *qdev_get_type(Object *obj, Error **errp)
@@ -2378,11 +2526,13 @@ void object_property_add_uint8_ptr(Object *obj, const char *name,
NULL, NULL, (void *)v, errp);
}
-void object_class_property_add_uint8_ptr(ObjectClass *klass, const char *name,
+ObjectProperty *
+object_class_property_add_uint8_ptr(ObjectClass *klass, const char *name,
const uint8_t *v, Error **errp)
{
- object_class_property_add(klass, name, "uint8", property_get_uint8_ptr,
- NULL, NULL, (void *)v, errp);
+ return object_class_property_add(klass, name, "uint8",
+ property_get_uint8_ptr,
+ NULL, NULL, (void *)v, errp);
}
void object_property_add_uint16_ptr(Object *obj, const char *name,
@@ -2392,11 +2542,13 @@ void object_property_add_uint16_ptr(Object *obj, const char *name,
NULL, NULL, (void *)v, errp);
}
-void object_class_property_add_uint16_ptr(ObjectClass *klass, const char *name,
+ObjectProperty *
+object_class_property_add_uint16_ptr(ObjectClass *klass, const char *name,
const uint16_t *v, Error **errp)
{
- object_class_property_add(klass, name, "uint16", property_get_uint16_ptr,
- NULL, NULL, (void *)v, errp);
+ return object_class_property_add(klass, name, "uint16",
+ property_get_uint16_ptr,
+ NULL, NULL, (void *)v, errp);
}
void object_property_add_uint32_ptr(Object *obj, const char *name,
@@ -2406,11 +2558,13 @@ void object_property_add_uint32_ptr(Object *obj, const char *name,
NULL, NULL, (void *)v, errp);
}
-void object_class_property_add_uint32_ptr(ObjectClass *klass, const char *name,
+ObjectProperty *
+object_class_property_add_uint32_ptr(ObjectClass *klass, const char *name,
const uint32_t *v, Error **errp)
{
- object_class_property_add(klass, name, "uint32", property_get_uint32_ptr,
- NULL, NULL, (void *)v, errp);
+ return object_class_property_add(klass, name, "uint32",
+ property_get_uint32_ptr,
+ NULL, NULL, (void *)v, errp);
}
void object_property_add_uint64_ptr(Object *obj, const char *name,
@@ -2420,11 +2574,13 @@ void object_property_add_uint64_ptr(Object *obj, const char *name,
NULL, NULL, (void *)v, errp);
}
-void object_class_property_add_uint64_ptr(ObjectClass *klass, const char *name,
+ObjectProperty *
+object_class_property_add_uint64_ptr(ObjectClass *klass, const char *name,
const uint64_t *v, Error **errp)
{
- object_class_property_add(klass, name, "uint64", property_get_uint64_ptr,
- NULL, NULL, (void *)v, errp);
+ return object_class_property_add(klass, name, "uint64",
+ property_get_uint64_ptr,
+ NULL, NULL, (void *)v, errp);
}
typedef struct {
@@ -2501,6 +2657,9 @@ void object_property_add_alias(Object *obj, const char *name,
goto out;
}
op->resolve = property_resolve_alias;
+ if (target_prop->defval) {
+ op->defval = qobject_ref(target_prop->defval);
+ }
object_property_set_description(obj, op->name,
target_prop->description,
diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
index 46cd6eab5c..72cb9e32a9 100644
--- a/qom/object_interfaces.c
+++ b/qom/object_interfaces.c
@@ -4,6 +4,8 @@
#include "qapi/error.h"
#include "qapi/qmp/qdict.h"
#include "qapi/qmp/qerror.h"
+#include "qapi/qmp/qjson.h"
+#include "qapi/qmp/qstring.h"
#include "qom/object_interfaces.h"
#include "qemu/help_option.h"
#include "qemu/module.h"
@@ -158,6 +160,29 @@ int user_creatable_add_opts_foreach(void *opaque, QemuOpts *opts, Error **errp)
return 0;
}
+char *object_property_help(const char *name, const char *type,
+ QObject *defval, const char *description)
+{
+ GString *str = g_string_new(NULL);
+
+ g_string_append_printf(str, " %s=<%s>", name, type);
+ if (description || defval) {
+ if (str->len < 24) {
+ g_string_append_printf(str, "%*s", 24 - (int)str->len, "");
+ }
+ g_string_append(str, " - ");
+ }
+ if (description) {
+ g_string_append(str, description);
+ }
+ if (defval) {
+ g_autofree char *def_json = qstring_free(qobject_to_json(defval), TRUE);
+ g_string_append_printf(str, " (default: %s)", def_json);
+ }
+
+ return g_string_free(str, false);
+}
+
bool user_creatable_print_help(const char *type, QemuOpts *opts)
{
ObjectClass *klass;
@@ -184,21 +209,13 @@ bool user_creatable_print_help(const char *type, QemuOpts *opts)
object_class_property_iter_init(&iter, klass);
while ((prop = object_property_iter_next(&iter))) {
- GString *str;
-
if (!prop->set) {
continue;
}
- str = g_string_new(NULL);
- g_string_append_printf(str, " %s=<%s>", prop->name, prop->type);
- if (prop->description) {
- if (str->len < 24) {
- g_string_append_printf(str, "%*s", 24 - (int)str->len, "");
- }
- g_string_append_printf(str, " - %s", prop->description);
- }
- g_ptr_array_add(array, g_string_free(str, false));
+ g_ptr_array_add(array,
+ object_property_help(prop->name, prop->type,
+ prop->defval, prop->description));
}
g_ptr_array_sort(array, (GCompareFunc)qemu_pstrcmp0);
if (array->len > 0) {
diff --git a/qom/qom-qmp-cmds.c b/qom/qom-qmp-cmds.c
index f4494f98ac..6136efec16 100644
--- a/qom/qom-qmp-cmds.c
+++ b/qom/qom-qmp-cmds.c
@@ -121,48 +121,6 @@ ObjectTypeInfoList *qmp_qom_list_types(bool has_implements,
return ret;
}
-/* Return a DevicePropertyInfo for a qdev property.
- *
- * If a qdev property with the given name does not exist, use the given default
- * type. If the qdev property info should not be shown, return NULL.
- *
- * The caller must free the return value.
- */
-static ObjectPropertyInfo *make_device_property_info(ObjectClass *klass,
- const char *name,
- const char *default_type,
- const char *description)
-{
- ObjectPropertyInfo *info;
- Property *prop;
-
- do {
- for (prop = DEVICE_CLASS(klass)->props; prop && prop->name; prop++) {
- if (strcmp(name, prop->name) != 0) {
- continue;
- }
-
- info = g_malloc0(sizeof(*info));
- info->name = g_strdup(prop->name);
- info->type = default_type ? g_strdup(default_type)
- : g_strdup(prop->info->name);
- info->has_description = !!prop->info->description;
- info->description = g_strdup(prop->info->description);
- return info;
- }
- klass = object_class_get_parent(klass);
- } while (klass != object_class_by_name(TYPE_DEVICE));
-
- /* Not a qdev property, use the default type */
- info = g_malloc0(sizeof(*info));
- info->name = g_strdup(name);
- info->type = g_strdup(default_type);
- info->has_description = !!description;
- info->description = g_strdup(description);
-
- return info;
-}
-
ObjectPropertyInfoList *qmp_device_list_properties(const char *typename,
Error **errp)
{
@@ -214,11 +172,13 @@ ObjectPropertyInfoList *qmp_device_list_properties(const char *typename,
continue;
}
- info = make_device_property_info(klass, prop->name, prop->type,
- prop->description);
- if (!info) {
- continue;
- }
+ info = g_new0(ObjectPropertyInfo, 1);
+ info->name = g_strdup(prop->name);
+ info->type = g_strdup(prop->type);
+ info->has_description = !!prop->description;
+ info->description = g_strdup(prop->description);
+ info->default_value = qobject_ref(prop->defval);
+ info->has_default_value = !!info->default_value;
entry = g_malloc0(sizeof(*entry));
entry->value = info;
diff --git a/rules.mak b/rules.mak
index 967295dd2b..c8558876f3 100644
--- a/rules.mak
+++ b/rules.mak
@@ -76,7 +76,7 @@ expand-objs = $(strip $(sort $(filter %.o,$1)) \
# must link with the C++ compiler, not the plain C compiler.
LINKPROG = $(or $(CXX),$(CC))
-LINK = $(call quiet-command, $(LINKPROG) $(QEMU_LDFLAGS) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ \
+LINK = $(call quiet-command, $(LINKPROG) $(CFLAGS) $(QEMU_LDFLAGS) -o $@ \
$(call process-archive-undefs, $1) \
$(version-obj-y) $(call extract-libs,$1) $(LIBS),"LINK","$(TARGET_DIR)$@")
@@ -105,7 +105,7 @@ LINK = $(call quiet-command, $(LINKPROG) $(QEMU_LDFLAGS) $(QEMU_CFLAGS) $(CFLAGS
DSO_OBJ_CFLAGS := -fPIC -DBUILD_DSO
module-common.o: CFLAGS += $(DSO_OBJ_CFLAGS)
-%$(DSOSUF): LDFLAGS += $(LDFLAGS_SHARED)
+%$(DSOSUF): QEMU_LDFLAGS += $(LDFLAGS_SHARED)
%$(DSOSUF): %.mo
$(call LINK,$^)
@# Copy to build root so modules can be loaded when program started without install
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 64cd0a7d73..06907b36d7 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -1104,26 +1104,22 @@ void arm_cpu_post_init(Object *obj)
if (arm_feature(&cpu->env, ARM_FEATURE_CBAR) ||
arm_feature(&cpu->env, ARM_FEATURE_CBAR_RO)) {
- qdev_property_add_static(DEVICE(obj), &arm_cpu_reset_cbar_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_reset_cbar_property);
}
if (!arm_feature(&cpu->env, ARM_FEATURE_M)) {
- qdev_property_add_static(DEVICE(obj), &arm_cpu_reset_hivecs_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_reset_hivecs_property);
}
if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) {
- qdev_property_add_static(DEVICE(obj), &arm_cpu_rvbar_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_rvbar_property);
}
if (arm_feature(&cpu->env, ARM_FEATURE_EL3)) {
/* Add the has_el3 state CPU property only if EL3 is allowed. This will
* prevent "has_el3" from existing on CPUs which cannot support EL3.
*/
- qdev_property_add_static(DEVICE(obj), &arm_cpu_has_el3_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_has_el3_property);
#ifndef CONFIG_USER_ONLY
object_property_add_link(obj, "secure-memory",
@@ -1136,8 +1132,7 @@ void arm_cpu_post_init(Object *obj)
}
if (arm_feature(&cpu->env, ARM_FEATURE_EL2)) {
- qdev_property_add_static(DEVICE(obj), &arm_cpu_has_el2_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_has_el2_property);
}
if (arm_feature(&cpu->env, ARM_FEATURE_PMU)) {
@@ -1154,32 +1149,27 @@ void arm_cpu_post_init(Object *obj)
if (arm_feature(&cpu->env, ARM_FEATURE_VFP)) {
cpu->has_vfp = true;
if (!kvm_enabled()) {
- qdev_property_add_static(DEVICE(obj), &arm_cpu_has_vfp_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_has_vfp_property);
}
}
if (arm_feature(&cpu->env, ARM_FEATURE_NEON)) {
cpu->has_neon = true;
if (!kvm_enabled()) {
- qdev_property_add_static(DEVICE(obj), &arm_cpu_has_neon_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_has_neon_property);
}
}
if (arm_feature(&cpu->env, ARM_FEATURE_M) &&
arm_feature(&cpu->env, ARM_FEATURE_THUMB_DSP)) {
- qdev_property_add_static(DEVICE(obj), &arm_cpu_has_dsp_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_has_dsp_property);
}
if (arm_feature(&cpu->env, ARM_FEATURE_PMSA)) {
- qdev_property_add_static(DEVICE(obj), &arm_cpu_has_mpu_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_has_mpu_property);
if (arm_feature(&cpu->env, ARM_FEATURE_V7)) {
qdev_property_add_static(DEVICE(obj),
- &arm_cpu_pmsav7_dregion_property,
- &error_abort);
+ &arm_cpu_pmsav7_dregion_property);
}
}
@@ -1198,12 +1188,10 @@ void arm_cpu_post_init(Object *obj)
NULL, NULL, &error_abort);
}
- qdev_property_add_static(DEVICE(obj), &arm_cpu_cfgend_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_cfgend_property);
if (arm_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER)) {
- qdev_property_add_static(DEVICE(cpu), &arm_cpu_gt_cntfrq_property,
- &error_abort);
+ qdev_property_add_static(DEVICE(cpu), &arm_cpu_gt_cntfrq_property);
}
}
@@ -2706,10 +2694,9 @@ static void arm_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, arm_cpu_realizefn,
&acc->parent_realize);
- dc->props = arm_cpu_properties;
- acc->parent_reset = cc->reset;
- cc->reset = arm_cpu_reset;
+ device_class_set_props(dc, arm_cpu_properties);
+ cpu_class_set_parent_reset(cc, arm_cpu_reset, &acc->parent_reset);
cc->class_by_name = arm_cpu_class_by_name;
cc->has_work = arm_cpu_has_work;
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
index b87b59a02a..8d82889150 100644
--- a/target/arm/kvm.c
+++ b/target/arm/kvm.c
@@ -181,9 +181,7 @@ void kvm_arm_set_cpu_features_from_host(ARMCPU *cpu)
bool kvm_arm_pmu_supported(CPUState *cpu)
{
- KVMState *s = KVM_STATE(current_machine->accelerator);
-
- return kvm_check_extension(s, KVM_CAP_ARM_PMU_V3);
+ return kvm_check_extension(cpu->kvm_state, KVM_CAP_ARM_PMU_V3);
}
int kvm_arm_get_max_vm_ipa_size(MachineState *ms)
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
index e2da756e65..6344113a68 100644
--- a/target/arm/kvm64.c
+++ b/target/arm/kvm64.c
@@ -26,7 +26,6 @@
#include "sysemu/kvm.h"
#include "sysemu/kvm_int.h"
#include "kvm_arm.h"
-#include "hw/boards.h"
#include "internals.h"
static bool have_guest_debug;
@@ -613,14 +612,14 @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
bool kvm_arm_aarch32_supported(CPUState *cpu)
{
- KVMState *s = KVM_STATE(current_machine->accelerator);
+ KVMState *s = KVM_STATE(current_accel());
return kvm_check_extension(s, KVM_CAP_ARM_EL1_32BIT);
}
bool kvm_arm_sve_supported(CPUState *cpu)
{
- KVMState *s = KVM_STATE(current_machine->accelerator);
+ KVMState *s = KVM_STATE(current_accel());
return kvm_check_extension(s, KVM_CAP_ARM_SVE);
}
diff --git a/target/cris/cpu.c b/target/cris/cpu.c
index 6a857f548d..17c6712e29 100644
--- a/target/cris/cpu.c
+++ b/target/cris/cpu.c
@@ -264,8 +264,7 @@ static void cris_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, cris_cpu_realizefn,
&ccc->parent_realize);
- ccc->parent_reset = cc->reset;
- cc->reset = cris_cpu_reset;
+ cpu_class_set_parent_reset(cc, cris_cpu_reset, &ccc->parent_reset);
cc->class_by_name = cris_cpu_class_by_name;
cc->has_work = cris_cpu_has_work;
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 41f28cebf9..32efa46852 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -2905,6 +2905,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
.props = (PropValue[]) {
{ "hle", "off" },
{ "rtm", "off" },
+ { "model-id",
+ "Intel Core Processor (Skylake, IBRS, no TSX)" },
{ /* end of list */ }
}
},
@@ -3028,6 +3030,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
.props = (PropValue[]) {
{ "hle", "off" },
{ "rtm", "off" },
+ { "model-id",
+ "Intel Xeon Processor (Skylake, IBRS, no TSX)" },
{ /* end of list */ }
}
},
@@ -4144,7 +4148,7 @@ static void max_x86_cpu_class_init(ObjectClass *oc, void *data)
xcc->model_description =
"Enables all features supported by the accelerator in the current host";
- dc->props = max_x86_cpu_properties;
+ device_class_set_props(dc, max_x86_cpu_properties);
}
static void max_x86_cpu_initfn(Object *obj)
@@ -6416,6 +6420,19 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
&cpu->mwait.ecx, &cpu->mwait.edx);
env->features[FEAT_1_ECX] |= CPUID_EXT_MONITOR;
}
+ if (kvm_enabled() && cpu->ucode_rev == 0) {
+ cpu->ucode_rev = kvm_arch_get_supported_msr_feature(kvm_state,
+ MSR_IA32_UCODE_REV);
+ }
+ }
+
+ if (cpu->ucode_rev == 0) {
+ /* The default is the same as KVM's. */
+ if (IS_AMD_CPU(env)) {
+ cpu->ucode_rev = 0x01000065;
+ } else {
+ cpu->ucode_rev = 0x100000000ULL;
+ }
}
/* mwait extended info: needed for Core compatibility */
@@ -7100,6 +7117,7 @@ static Property x86_cpu_properties[] = {
DEFINE_PROP_UINT32("min-level", X86CPU, env.cpuid_min_level, 0),
DEFINE_PROP_UINT32("min-xlevel", X86CPU, env.cpuid_min_xlevel, 0),
DEFINE_PROP_UINT32("min-xlevel2", X86CPU, env.cpuid_min_xlevel2, 0),
+ DEFINE_PROP_UINT64("ucode-rev", X86CPU, ucode_rev, 0),
DEFINE_PROP_BOOL("full-cpuid-auto-level", X86CPU, full_cpuid_auto_level, true),
DEFINE_PROP_STRING("hv-vendor-id", X86CPU, hyperv_vendor_id),
DEFINE_PROP_BOOL("cpuid-0xb", X86CPU, enable_cpuid_0xb, true),
@@ -7147,10 +7165,9 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
&xcc->parent_realize);
device_class_set_parent_unrealize(dc, x86_cpu_unrealizefn,
&xcc->parent_unrealize);
- dc->props = x86_cpu_properties;
+ device_class_set_props(dc, x86_cpu_properties);
- xcc->parent_reset = cc->reset;
- cc->reset = x86_cpu_reset;
+ cpu_class_set_parent_reset(cc, x86_cpu_reset, &xcc->parent_reset);
cc->reset_dump_flags = CPU_DUMP_FPU | CPU_DUMP_CCOP;
cc->class_by_name = x86_cpu_class_by_name;
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index e6de38ae02..576f309bbf 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -348,6 +348,7 @@ typedef enum X86Seg {
#define MSR_IA32_SPEC_CTRL 0x48
#define MSR_VIRT_SSBD 0xc001011f
#define MSR_IA32_PRED_CMD 0x49
+#define MSR_IA32_UCODE_REV 0x8b
#define MSR_IA32_CORE_CAPABILITY 0xcf
#define MSR_IA32_ARCH_CAPABILITIES 0x10a
@@ -1627,6 +1628,8 @@ struct X86CPU {
CPUNegativeOffsetState neg;
CPUX86State env;
+ uint64_t ucode_rev;
+
uint32_t hyperv_spinlock_attempts;
char *hyperv_vendor_id;
bool hyperv_synic_kvm_only;
diff --git a/target/i386/hvf/x86_emu.c b/target/i386/hvf/x86_emu.c
index 3df767209d..92ab815f5d 100644
--- a/target/i386/hvf/x86_emu.c
+++ b/target/i386/hvf/x86_emu.c
@@ -664,8 +664,6 @@ static void exec_lods(struct CPUX86State *env, struct x86_decode *decode)
RIP(env) += decode->len;
}
-#define MSR_IA32_UCODE_REV 0x00000017
-
void simulate_rdmsr(struct CPUState *cpu)
{
X86CPU *x86_cpu = X86_CPU(cpu);
@@ -681,7 +679,7 @@ void simulate_rdmsr(struct CPUState *cpu)
val = cpu_get_apic_base(X86_CPU(cpu)->apic_state);
break;
case MSR_IA32_UCODE_REV:
- val = (0x100000000ULL << 32) | 0x100000000ULL;
+ val = x86_cpu->ucode_rev;
break;
case MSR_EFER:
val = rvmcs(cpu->hvf_fd, VMCS_GUEST_IA32_EFER);
diff --git a/target/i386/kvm.c b/target/i386/kvm.c
index 7ee3202634..6ef291d580 100644
--- a/target/i386/kvm.c
+++ b/target/i386/kvm.c
@@ -67,6 +67,8 @@
* 255 kvm_msr_entry structs */
#define MSR_BUF_SIZE 4096
+static void kvm_init_msrs(X86CPU *cpu);
+
const KVMCapabilityInfo kvm_arch_required_capabilities[] = {
KVM_CAP_INFO(SET_TSS_ADDR),
KVM_CAP_INFO(EXT_CPUID),
@@ -147,7 +149,7 @@ bool kvm_allows_irq0_override(void)
static bool kvm_x2apic_api_set_flags(uint64_t flags)
{
- KVMState *s = KVM_STATE(current_machine->accelerator);
+ KVMState *s = KVM_STATE(current_accel());
return !kvm_vm_enable_cap(s, KVM_CAP_X2APIC_API, 0, flags);
}
@@ -1842,6 +1844,8 @@ int kvm_arch_init_vcpu(CPUState *cs)
has_msr_tsc_aux = false;
}
+ kvm_init_msrs(cpu);
+
r = hyperv_init_vcpu(cpu);
if (r) {
goto fail;
@@ -2660,11 +2664,58 @@ static void kvm_msr_entry_add_vmx(X86CPU *cpu, FeatureWordArray f)
VMCS12_MAX_FIELD_INDEX << 1);
}
+static int kvm_buf_set_msrs(X86CPU *cpu)
+{
+ int ret = kvm_vcpu_ioctl(CPU(cpu), KVM_SET_MSRS, cpu->kvm_msr_buf);
+ if (ret < 0) {
+ return ret;
+ }
+
+ if (ret < cpu->kvm_msr_buf->nmsrs) {
+ struct kvm_msr_entry *e = &cpu->kvm_msr_buf->entries[ret];
+ error_report("error: failed to set MSR 0x%" PRIx32 " to 0x%" PRIx64,
+ (uint32_t)e->index, (uint64_t)e->data);
+ }
+
+ assert(ret == cpu->kvm_msr_buf->nmsrs);
+ return 0;
+}
+
+static void kvm_init_msrs(X86CPU *cpu)
+{
+ CPUX86State *env = &cpu->env;
+
+ kvm_msr_buf_reset(cpu);
+ if (has_msr_arch_capabs) {
+ kvm_msr_entry_add(cpu, MSR_IA32_ARCH_CAPABILITIES,
+ env->features[FEAT_ARCH_CAPABILITIES]);
+ }
+
+ if (has_msr_core_capabs) {
+ kvm_msr_entry_add(cpu, MSR_IA32_CORE_CAPABILITY,
+ env->features[FEAT_CORE_CAPABILITY]);
+ }
+
+ if (kvm_arch_get_supported_msr_feature(kvm_state,
+ MSR_IA32_UCODE_REV)) {
+ kvm_msr_entry_add(cpu, MSR_IA32_UCODE_REV, cpu->ucode_rev);
+ }
+
+ /*
+ * Older kernels do not include VMX MSRs in KVM_GET_MSR_INDEX_LIST, but
+ * all kernels with MSR features should have them.
+ */
+ if (kvm_feature_msrs && cpu_has_vmx(env)) {
+ kvm_msr_entry_add_vmx(cpu, env->features);
+ }
+
+ assert(kvm_buf_set_msrs(cpu) == 0);
+}
+
static int kvm_put_msrs(X86CPU *cpu, int level)
{
CPUX86State *env = &cpu->env;
int i;
- int ret;
kvm_msr_buf_reset(cpu);
@@ -2722,17 +2773,6 @@ static int kvm_put_msrs(X86CPU *cpu, int level)
}
#endif
- /* If host supports feature MSR, write down. */
- if (has_msr_arch_capabs) {
- kvm_msr_entry_add(cpu, MSR_IA32_ARCH_CAPABILITIES,
- env->features[FEAT_ARCH_CAPABILITIES]);
- }
-
- if (has_msr_core_capabs) {
- kvm_msr_entry_add(cpu, MSR_IA32_CORE_CAPABILITY,
- env->features[FEAT_CORE_CAPABILITY]);
- }
-
/*
* The following MSRs have side effects on the guest or are too heavy
* for normal writeback. Limit them to reset or full state updates.
@@ -2910,14 +2950,6 @@ static int kvm_put_msrs(X86CPU *cpu, int level)
/* Note: MSR_IA32_FEATURE_CONTROL is written separately, see
* kvm_put_msr_feature_control. */
-
- /*
- * Older kernels do not include VMX MSRs in KVM_GET_MSR_INDEX_LIST, but
- * all kernels with MSR features should have them.
- */
- if (kvm_feature_msrs && cpu_has_vmx(env)) {
- kvm_msr_entry_add_vmx(cpu, env->features);
- }
}
if (env->mcg_cap) {
@@ -2933,19 +2965,7 @@ static int kvm_put_msrs(X86CPU *cpu, int level)
}
}
- ret = kvm_vcpu_ioctl(CPU(cpu), KVM_SET_MSRS, cpu->kvm_msr_buf);
- if (ret < 0) {
- return ret;
- }
-
- if (ret < cpu->kvm_msr_buf->nmsrs) {
- struct kvm_msr_entry *e = &cpu->kvm_msr_buf->entries[ret];
- error_report("error: failed to set MSR 0x%" PRIx32 " to 0x%" PRIx64,
- (uint32_t)e->index, (uint64_t)e->data);
- }
-
- assert(ret == cpu->kvm_msr_buf->nmsrs);
- return 0;
+ return kvm_buf_set_msrs(cpu);
}
diff --git a/target/i386/kvm_i386.h b/target/i386/kvm_i386.h
index 7d0242f5fb..00bde7acaf 100644
--- a/target/i386/kvm_i386.h
+++ b/target/i386/kvm_i386.h
@@ -46,4 +46,5 @@ bool kvm_enable_x2apic(void);
bool kvm_has_x2apic_api(void);
bool kvm_hv_vpindex_settable(void);
+
#endif
diff --git a/target/i386/misc_helper.c b/target/i386/misc_helper.c
index 3eff6885f8..aed16fe3f0 100644
--- a/target/i386/misc_helper.c
+++ b/target/i386/misc_helper.c
@@ -229,6 +229,7 @@ void helper_rdmsr(CPUX86State *env)
#else
void helper_wrmsr(CPUX86State *env)
{
+ X86CPU *x86_cpu = env_archcpu(env);
uint64_t val;
cpu_svm_check_intercept_param(env, SVM_EXIT_MSR, 1, GETPC());
@@ -371,6 +372,9 @@ void helper_wrmsr(CPUX86State *env)
env->msr_bndcfgs = val;
cpu_sync_bndcs_hflags(env);
break;
+ case MSR_IA32_UCODE_REV:
+ val = x86_cpu->ucode_rev;
+ break;
default:
if ((uint32_t)env->regs[R_ECX] >= MSR_MC0_CTL
&& (uint32_t)env->regs[R_ECX] < MSR_MC0_CTL +
diff --git a/target/lm32/cpu.c b/target/lm32/cpu.c
index b35537de62..687bf35e65 100644
--- a/target/lm32/cpu.c
+++ b/target/lm32/cpu.c
@@ -218,8 +218,7 @@ static void lm32_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, lm32_cpu_realizefn,
&lcc->parent_realize);
- lcc->parent_reset = cc->reset;
- cc->reset = lm32_cpu_reset;
+ cpu_class_set_parent_reset(cc, lm32_cpu_reset, &lcc->parent_reset);
cc->class_by_name = lm32_cpu_class_by_name;
cc->has_work = lm32_cpu_has_work;
diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c
index f276335faf..f0653cda2f 100644
--- a/target/m68k/cpu.c
+++ b/target/m68k/cpu.c
@@ -273,8 +273,7 @@ static void m68k_cpu_class_init(ObjectClass *c, void *data)
device_class_set_parent_realize(dc, m68k_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = m68k_cpu_reset;
+ cpu_class_set_parent_reset(cc, m68k_cpu_reset, &mcc->parent_reset);
cc->class_by_name = m68k_cpu_class_by_name;
cc->has_work = m68k_cpu_has_work;
diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c
index 9cfd7445e7..8c90110e52 100644
--- a/target/microblaze/cpu.c
+++ b/target/microblaze/cpu.c
@@ -292,8 +292,7 @@ static void mb_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, mb_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = mb_cpu_reset;
+ cpu_class_set_parent_reset(cc, mb_cpu_reset, &mcc->parent_reset);
cc->class_by_name = mb_cpu_class_by_name;
cc->has_work = mb_cpu_has_work;
@@ -309,7 +308,7 @@ static void mb_cpu_class_init(ObjectClass *oc, void *data)
cc->get_phys_page_debug = mb_cpu_get_phys_page_debug;
#endif
dc->vmsd = &vmstate_mb_cpu;
- dc->props = mb_properties;
+ device_class_set_props(dc, mb_properties);
cc->gdb_num_core_regs = 32 + 5;
cc->disas_set_info = mb_disas_set_info;
diff --git a/target/mips/cpu.c b/target/mips/cpu.c
index bbcf7ca463..6cd6b9650b 100644
--- a/target/mips/cpu.c
+++ b/target/mips/cpu.c
@@ -189,8 +189,7 @@ static void mips_cpu_class_init(ObjectClass *c, void *data)
device_class_set_parent_realize(dc, mips_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = mips_cpu_reset;
+ cpu_class_set_parent_reset(cc, mips_cpu_reset, &mcc->parent_reset);
cc->class_by_name = mips_cpu_class_by_name;
cc->has_work = mips_cpu_has_work;
diff --git a/target/moxie/cpu.c b/target/moxie/cpu.c
index 48996d0554..cf47bc709b 100644
--- a/target/moxie/cpu.c
+++ b/target/moxie/cpu.c
@@ -101,8 +101,7 @@ static void moxie_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, moxie_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = moxie_cpu_reset;
+ cpu_class_set_parent_reset(cc, moxie_cpu_reset, &mcc->parent_reset);
cc->class_by_name = moxie_cpu_class_by_name;
diff --git a/target/nios2/cpu.c b/target/nios2/cpu.c
index ca9c7a6df5..1c0c855a6f 100644
--- a/target/nios2/cpu.c
+++ b/target/nios2/cpu.c
@@ -187,9 +187,8 @@ static void nios2_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, nios2_cpu_realizefn,
&ncc->parent_realize);
- dc->props = nios2_properties;
- ncc->parent_reset = cc->reset;
- cc->reset = nios2_cpu_reset;
+ device_class_set_props(dc, nios2_properties);
+ cpu_class_set_parent_reset(cc, nios2_cpu_reset, &ncc->parent_reset);
cc->class_by_name = nios2_cpu_class_by_name;
cc->has_work = nios2_cpu_has_work;
diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c
index 506aec6bfb..5cd04dafab 100644
--- a/target/openrisc/cpu.c
+++ b/target/openrisc/cpu.c
@@ -150,8 +150,7 @@ static void openrisc_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, openrisc_cpu_realizefn,
&occ->parent_realize);
- occ->parent_reset = cc->reset;
- cc->reset = openrisc_cpu_reset;
+ cpu_class_set_parent_reset(cc, openrisc_cpu_reset, &occ->parent_reset);
cc->class_by_name = openrisc_cpu_class_by_name;
cc->has_work = openrisc_cpu_has_work;
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index b5799e62b4..06fd0cc162 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -258,7 +258,7 @@ static void kvm_get_smmu_info(struct kvm_ppc_smmu_info *info, Error **errp)
struct ppc_radix_page_info *kvm_get_radix_page_info(void)
{
- KVMState *s = KVM_STATE(current_machine->accelerator);
+ KVMState *s = KVM_STATE(current_accel());
struct ppc_radix_page_info *radix_page_info;
struct kvm_ppc_rmmu_info rmmu_info;
int i;
@@ -2907,7 +2907,7 @@ void kvmppc_svm_off(Error **errp)
return;
}
- rc = kvm_vm_ioctl(KVM_STATE(current_machine->accelerator), KVM_PPC_SVM_OFF);
+ rc = kvm_vm_ioctl(KVM_STATE(current_accel()), KVM_PPC_SVM_OFF);
if (rc && rc != -ENOTTY) {
error_setg_errno(errp, -rc, "KVM_PPC_SVM_OFF ioctl failed");
}
diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c
index d33d65dff7..2d3efad233 100644
--- a/target/ppc/translate_init.inc.c
+++ b/target/ppc/translate_init.inc.c
@@ -8599,7 +8599,7 @@ POWERPC_FAMILY(POWER7)(ObjectClass *oc, void *data)
dc->fw_name = "PowerPC,POWER7";
dc->desc = "POWER7";
- dc->props = powerpc_servercpu_properties;
+ device_class_set_props(dc, powerpc_servercpu_properties);
pcc->pvr_match = ppc_pvr_match_power7;
pcc->pcr_mask = PCR_VEC_DIS | PCR_VSX_DIS | PCR_COMPAT_2_05;
pcc->pcr_supported = PCR_COMPAT_2_06 | PCR_COMPAT_2_05;
@@ -8764,7 +8764,7 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data)
dc->fw_name = "PowerPC,POWER8";
dc->desc = "POWER8";
- dc->props = powerpc_servercpu_properties;
+ device_class_set_props(dc, powerpc_servercpu_properties);
pcc->pvr_match = ppc_pvr_match_power8;
pcc->pcr_mask = PCR_TM_DIS | PCR_COMPAT_2_06 | PCR_COMPAT_2_05;
pcc->pcr_supported = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_COMPAT_2_05;
@@ -8976,7 +8976,7 @@ POWERPC_FAMILY(POWER9)(ObjectClass *oc, void *data)
dc->fw_name = "PowerPC,POWER9";
dc->desc = "POWER9";
- dc->props = powerpc_servercpu_properties;
+ device_class_set_props(dc, powerpc_servercpu_properties);
pcc->pvr_match = ppc_pvr_match_power9;
pcc->pcr_mask = PCR_COMPAT_2_05 | PCR_COMPAT_2_06 | PCR_COMPAT_2_07;
pcc->pcr_supported = PCR_COMPAT_3_00 | PCR_COMPAT_2_07 | PCR_COMPAT_2_06 |
@@ -9186,7 +9186,7 @@ POWERPC_FAMILY(POWER10)(ObjectClass *oc, void *data)
dc->fw_name = "PowerPC,POWER10";
dc->desc = "POWER10";
- dc->props = powerpc_servercpu_properties;
+ device_class_set_props(dc, powerpc_servercpu_properties);
pcc->pvr_match = ppc_pvr_match_power10;
pcc->pcr_mask = PCR_COMPAT_2_05 | PCR_COMPAT_2_06 | PCR_COMPAT_2_07 |
PCR_COMPAT_3_00;
@@ -10871,10 +10871,9 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data)
&pcc->parent_unrealize);
pcc->pvr_match = ppc_pvr_match_default;
pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_always;
- dc->props = ppc_cpu_properties;
+ device_class_set_props(dc, ppc_cpu_properties);
- pcc->parent_reset = cc->reset;
- cc->reset = ppc_cpu_reset;
+ cpu_class_set_parent_reset(cc, ppc_cpu_reset, &pcc->parent_reset);
cc->class_by_name = ppc_cpu_class_by_name;
pcc->parent_parse_features = cc->parse_features;
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index d37861a430..8c86ebc109 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -462,8 +462,7 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
device_class_set_parent_realize(dc, riscv_cpu_realize,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = riscv_cpu_reset;
+ cpu_class_set_parent_reset(cc, riscv_cpu_reset, &mcc->parent_reset);
cc->class_by_name = riscv_cpu_class_by_name;
cc->has_work = riscv_cpu_has_work;
@@ -493,7 +492,7 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
#endif
/* For now, mark unmigratable: */
cc->vmsd = &vmstate_riscv_cpu;
- dc->props = riscv_cpu_properties;
+ device_class_set_props(dc, riscv_cpu_properties);
}
char *riscv_isa_string(RISCVCPU *cpu)
diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
index 625daeedd1..cf84d307c6 100644
--- a/target/s390x/cpu.c
+++ b/target/s390x/cpu.c
@@ -453,15 +453,14 @@ static void s390_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, s390_cpu_realizefn,
&scc->parent_realize);
- dc->props = s390x_cpu_properties;
+ device_class_set_props(dc, s390x_cpu_properties);
dc->user_creatable = true;
- scc->parent_reset = cc->reset;
+ cpu_class_set_parent_reset(cc, s390_cpu_reset_full, &scc->parent_reset);
#if !defined(CONFIG_USER_ONLY)
scc->load_normal = s390_cpu_load_normal;
#endif
scc->reset = s390_cpu_reset;
- cc->reset = s390_cpu_reset_full;
cc->class_by_name = s390_cpu_class_by_name,
cc->has_work = s390_cpu_has_work;
#ifdef CONFIG_TCG
diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c
index d0a7707991..70c8d8170f 100644
--- a/target/sh4/cpu.c
+++ b/target/sh4/cpu.c
@@ -214,8 +214,7 @@ static void superh_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, superh_cpu_realizefn,
&scc->parent_realize);
- scc->parent_reset = cc->reset;
- cc->reset = superh_cpu_reset;
+ cpu_class_set_parent_reset(cc, superh_cpu_reset, &scc->parent_reset);
cc->class_by_name = superh_cpu_class_by_name;
cc->has_work = superh_cpu_has_work;
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index bc65929552..eeaecbd8d6 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -857,10 +857,9 @@ static void sparc_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, sparc_cpu_realizefn,
&scc->parent_realize);
- dc->props = sparc_cpu_properties;
+ device_class_set_props(dc, sparc_cpu_properties);
- scc->parent_reset = cc->reset;
- cc->reset = sparc_cpu_reset;
+ cpu_class_set_parent_reset(cc, sparc_cpu_reset, &scc->parent_reset);
cc->class_by_name = sparc_cpu_class_by_name;
cc->parse_features = sparc_cpu_parse_features;
diff --git a/target/tilegx/cpu.c b/target/tilegx/cpu.c
index 2b2a7ccc31..cd422a0467 100644
--- a/target/tilegx/cpu.c
+++ b/target/tilegx/cpu.c
@@ -142,8 +142,7 @@ static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, tilegx_cpu_realizefn,
&tcc->parent_realize);
- tcc->parent_reset = cc->reset;
- cc->reset = tilegx_cpu_reset;
+ cpu_class_set_parent_reset(cc, tilegx_cpu_reset, &tcc->parent_reset);
cc->class_by_name = tilegx_cpu_class_by_name;
cc->has_work = tilegx_cpu_has_work;
diff --git a/target/tricore/cpu.c b/target/tricore/cpu.c
index df807c1d74..85bc9f03a1 100644
--- a/target/tricore/cpu.c
+++ b/target/tricore/cpu.c
@@ -153,8 +153,7 @@ static void tricore_cpu_class_init(ObjectClass *c, void *data)
device_class_set_parent_realize(dc, tricore_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = tricore_cpu_reset;
+ cpu_class_set_parent_reset(cc, tricore_cpu_reset, &mcc->parent_reset);
cc->class_by_name = tricore_cpu_class_by_name;
cc->has_work = tricore_cpu_has_work;
diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c
index c65dcf9dd7..4856aee8ec 100644
--- a/target/xtensa/cpu.c
+++ b/target/xtensa/cpu.c
@@ -184,8 +184,7 @@ static void xtensa_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, xtensa_cpu_realizefn,
&xcc->parent_realize);
- xcc->parent_reset = cc->reset;
- cc->reset = xtensa_cpu_reset;
+ cpu_class_set_parent_reset(cc, xtensa_cpu_reset, &xcc->parent_reset);
cc->class_by_name = xtensa_cpu_class_by_name;
cc->has_work = xtensa_cpu_has_work;
diff --git a/tests/test-qdev-global-props.c b/tests/test-qdev-global-props.c
index 4ed3d06f4e..270c690479 100644
--- a/tests/test-qdev-global-props.c
+++ b/tests/test-qdev-global-props.c
@@ -55,7 +55,7 @@ static void static_prop_class_init(ObjectClass *oc, void *data)
DeviceClass *dc = DEVICE_CLASS(oc);
dc->realize = NULL;
- dc->props = static_props;
+ device_class_set_props(dc, static_props);
}
static const TypeInfo static_prop_type = {
diff --git a/vl.c b/vl.c
index 4c5033842c..b0f52c4d6e 100644
--- a/vl.c
+++ b/vl.c
@@ -1468,6 +1468,18 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
}
}
+void qemu_system_guest_crashloaded(GuestPanicInformation *info)
+{
+ qemu_log_mask(LOG_GUEST_ERROR, "Guest crash loaded");
+
+ qapi_event_send_guest_crashloaded(GUEST_PANIC_ACTION_RUN,
+ !!info, info);
+
+ if (info) {
+ qapi_free_GuestPanicInformation(info);
+ }
+}
+
void qemu_system_reset_request(ShutdownCause reason)
{
if (no_reboot && reason != SHUTDOWN_CAUSE_SUBSYSTEM_RESET) {
@@ -2817,7 +2829,7 @@ static void configure_accelerators(const char *progname)
}
if (init_failed) {
- AccelClass *ac = ACCEL_GET_CLASS(current_machine->accelerator);
+ AccelClass *ac = ACCEL_GET_CLASS(current_accel());
error_report("falling back to %s", ac->name);
}