diff --git a/hw/pci/pci-hotplug.c b/hw/pci/pci-hotplug.c
index 12287d1..0009190 100644
--- a/hw/pci/pci-hotplug.c
+++ b/hw/pci/pci-hotplug.c
@@ -129,7 +129,7 @@ int pci_drive_hot_add(Monitor *mon, const QDict *qdict, DriveInfo *dinfo)
             monitor_printf(mon, "no pci device with address %s\n", pci_addr);
             goto err;
         }
-        if (scsi_hot_add(mon, &dev->qdev, dinfo, 1) != 0) {
+        if (scsi_hot_add(mon, DEVICE(dev), dinfo, 1) != 0) {
             goto err;
         }
         break;
@@ -193,11 +193,12 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
     switch (type) {
     case IF_SCSI:
         dev = pci_create(bus, devfn, "lsi53c895a");
-        if (qdev_init(&dev->qdev) < 0)
+        if (qdev_init(DEVICE(dev)) < 0) {
             dev = NULL;
+        }
         if (dev && dinfo) {
-            if (scsi_hot_add(mon, &dev->qdev, dinfo, 0) != 0) {
-                qdev_unplug(&dev->qdev, NULL);
+            if (scsi_hot_add(mon, DEVICE(dev), dinfo, 0) != 0) {
+                qdev_unplug(DEVICE(dev), NULL);
                 dev = NULL;
             }
         }
@@ -208,13 +209,14 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
             return NULL;
         }
         dev = pci_create(bus, devfn, "virtio-blk-pci");
-        if (qdev_prop_set_drive(&dev->qdev, "drive", dinfo->bdrv) < 0) {
-            qdev_free(&dev->qdev);
+        if (qdev_prop_set_drive(DEVICE(dev), "drive", dinfo->bdrv) < 0) {
+            qdev_free(DEVICE(dev));
             dev = NULL;
             break;
         }
-        if (qdev_init(&dev->qdev) < 0)
+        if (qdev_init(DEVICE(dev)) < 0) {
             dev = NULL;
+        }
         break;
     default:
         dev = NULL;
@@ -276,7 +278,7 @@ static int pci_device_hot_remove(Monitor *mon, const char *pci_addr)
         return -1;
     }
 
-    qdev_unplug(&d->qdev, &local_err);
+    qdev_unplug(DEVICE(d), &local_err);
     if (error_is_set(&local_err)) {
         monitor_printf(mon, "%s\n", error_get_pretty(local_err));
         error_free(local_err);
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 61b681a..e3fd040 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -177,7 +177,7 @@ void pci_device_reset(PCIDevice *dev)
 {
     int r;
 
-    qdev_reset_all(&dev->qdev);
+    qdev_reset_all(DEVICE(dev));
 
     dev->irq_state = 0;
     pci_update_irq_status(dev);
@@ -1446,6 +1446,7 @@ static PciBridgeInfo *qmp_query_pci_bridge(PCIDevice *dev, PCIBus *bus,
 static PciDeviceInfo *qmp_query_pci_device(PCIDevice *dev, PCIBus *bus,
                                            int bus_num)
 {
+    DeviceState *d = DEVICE(dev);
     const pci_class_desc *desc;
     PciDeviceInfo *info;
     uint8_t type;
@@ -1467,7 +1468,7 @@ static PciDeviceInfo *qmp_query_pci_device(PCIDevice *dev, PCIBus *bus,
     info->id.vendor = pci_get_word(dev->config + PCI_VENDOR_ID);
     info->id.device = pci_get_word(dev->config + PCI_DEVICE_ID);
     info->regions = qmp_query_pci_regions(dev);
-    info->qdev_id = g_strdup(dev->qdev.id ? dev->qdev.id : "");
+    info->qdev_id = g_strdup(d->id ? d->id : "");
 
     if (dev->config[PCI_INTERRUPT_PIN] != 0) {
         info->has_irq = true;
@@ -1591,7 +1592,7 @@ PCIDevice *pci_nic_init(NICInfo *nd, const char *default_model,
     }
 
     pci_dev = pci_create(bus, devfn, pci_nic_names[i]);
-    dev = &pci_dev->qdev;
+    dev = DEVICE(pci_dev);
     qdev_set_nic_properties(dev, nd);
     if (qdev_init(dev) < 0)
         return NULL;
@@ -1731,7 +1732,7 @@ static int pci_qdev_init(DeviceState *qdev)
                           qdev->hotplugged ? PCI_HOTPLUG_ENABLED:
                           PCI_COLDPLUG_ENABLED);
         if (rc != 0) {
-            int r = pci_unregister_device(&pci_dev->qdev);
+            int r = pci_unregister_device(DEVICE(pci_dev));
             assert(!r);
             return rc;
         }
@@ -1768,7 +1769,7 @@ PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn,
                                            const char *name)
 {
     PCIDevice *dev = pci_create_multifunction(bus, devfn, multifunction, name);
-    qdev_init_nofail(&dev->qdev);
+    qdev_init_nofail(DEVICE(dev));
     return dev;
 }
 
@@ -1946,7 +1947,7 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom)
     }
     pdev->has_rom = true;
     memory_region_init_ram(&pdev->rom, name, size);
-    vmstate_register_ram(&pdev->rom, &pdev->qdev);
+    vmstate_register_ram(&pdev->rom, DEVICE(pdev));
     ptr = memory_region_get_ram_ptr(&pdev->rom);
     load_image(path, ptr);
     g_free(path);
@@ -1966,7 +1967,7 @@ static void pci_del_option_rom(PCIDevice *pdev)
     if (!pdev->has_rom)
         return;
 
-    vmstate_unregister_ram(&pdev->rom, &pdev->qdev);
+    vmstate_unregister_ram(&pdev->rom, DEVICE(pdev));
     memory_region_destroy(&pdev->rom);
     pdev->has_rom = false;
 }
@@ -2126,7 +2127,7 @@ static char *pcibus_get_fw_dev_path(DeviceState *dev)
 
 static char *pcibus_get_dev_path(DeviceState *dev)
 {
-    PCIDevice *d = container_of(dev, PCIDevice, qdev);
+    PCIDevice *d = PCI_DEVICE(dev);
     PCIDevice *t;
     int slot_depth;
     /* Path format: Domain:00:Slot.Function:Slot.Function....:Slot.Function.
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
index 62bd0b8..db4bca8 100644
--- a/hw/pci/pcie.c
+++ b/hw/pci/pcie.c
@@ -251,7 +251,7 @@ static int pcie_cap_slot_hotplug(DeviceState *qdev,
                                    PCI_EXP_SLTSTA_PDS);
         pcie_cap_slot_event(d, PCI_EXP_HP_EV_PDC);
     } else {
-        qdev_free(&pci_dev->qdev);
+        qdev_free(DEVICE(pci_dev));
         pci_word_test_and_clear_mask(exp_cap + PCI_EXP_SLTSTA,
                                      PCI_EXP_SLTSTA_PDS);
         pcie_cap_slot_event(d, PCI_EXP_HP_EV_PDC);
@@ -306,7 +306,7 @@ void pcie_cap_slot_init(PCIDevice *dev, uint16_t slot)
     dev->exp.hpev_notified = false;
 
     pci_bus_hotplug(pci_bridge_get_sec_bus(DO_UPCAST(PCIBridge, dev, dev)),
-                    pcie_cap_slot_hotplug, &dev->qdev);
+                    pcie_cap_slot_hotplug, DEVICE(dev));
 }
 
 void pcie_cap_slot_reset(PCIDevice *dev)
diff --git a/hw/pci/shpc.c b/hw/pci/shpc.c
index d35c2ee..aa45e77 100644
--- a/hw/pci/shpc.c
+++ b/hw/pci/shpc.c
@@ -252,9 +252,9 @@ static void shpc_free_devices_in_slot(SHPCDevice *shpc, int slot)
     for (devfn = PCI_DEVFN(pci_slot, 0);
          devfn <= PCI_DEVFN(pci_slot, PCI_FUNC_MAX - 1);
          ++devfn) {
-        PCIDevice *affected_dev = shpc->sec_bus->devices[devfn];
+        DeviceState *affected_dev = DEVICE(shpc->sec_bus->devices[devfn]);
         if (affected_dev) {
-            qdev_free(&affected_dev->qdev);
+            qdev_free(affected_dev);
         }
     }
 }
@@ -497,7 +497,7 @@ static int shpc_device_hotplug(DeviceState *qdev, PCIDevice *affected_dev,
     int pci_slot = PCI_SLOT(affected_dev->devfn);
     uint8_t state;
     uint8_t led;
-    PCIDevice *d = DO_UPCAST(PCIDevice, qdev, qdev);
+    PCIDevice *d = PCI_DEVICE(qdev);
     SHPCDevice *shpc = d->shpc;
     int slot = SHPC_PCI_TO_IDX(pci_slot);
     if (pci_slot < SHPC_IDX_TO_PCI(0) || slot >= shpc->nslots) {
@@ -616,7 +616,7 @@ int shpc_init(PCIDevice *d, PCIBus *sec_bus, MemoryRegion *bar, unsigned offset)
                           SHPC_SIZEOF(d));
     shpc_cap_update_dword(d);
     memory_region_add_subregion(bar, offset, &shpc->mmio);
-    pci_bus_hotplug(sec_bus, shpc_device_hotplug, &d->qdev);
+    pci_bus_hotplug(sec_bus, shpc_device_hotplug, DEVICE(d));
 
     d->cap_present |= QEMU_PCI_CAP_SHPC;
     return 0;
