提交 a623bff4 编写于 作者: D Daniel P. Berrange

Make QEMU hotplug use cached qemu capabilities data

* src/qemu/qemu_hotplug.h, src/qemu/qemu_hotplug.c: Remove
  qemuCaps parameters from all methods
* src/qemu/qemu_driver.c: Don't create & pass qemuCaps to
  hotplug methods
上级 43c01d38
...@@ -3794,8 +3794,7 @@ cleanup: ...@@ -3794,8 +3794,7 @@ cleanup:
static int static int
qemuDomainAttachDeviceDiskLive(struct qemud_driver *driver, qemuDomainAttachDeviceDiskLive(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev)
virBitmapPtr qemuCaps)
{ {
virDomainDiskDefPtr disk = dev->data.disk; virDomainDiskDefPtr disk = dev->data.disk;
virCgroupPtr cgroup = NULL; virCgroupPtr cgroup = NULL;
...@@ -3821,16 +3820,16 @@ qemuDomainAttachDeviceDiskLive(struct qemud_driver *driver, ...@@ -3821,16 +3820,16 @@ qemuDomainAttachDeviceDiskLive(struct qemud_driver *driver,
switch (disk->device) { switch (disk->device) {
case VIR_DOMAIN_DISK_DEVICE_CDROM: case VIR_DOMAIN_DISK_DEVICE_CDROM:
case VIR_DOMAIN_DISK_DEVICE_FLOPPY: case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
ret = qemuDomainChangeEjectableMedia(driver, vm, disk, qemuCaps, false); ret = qemuDomainChangeEjectableMedia(driver, vm, disk, false);
break; break;
case VIR_DOMAIN_DISK_DEVICE_DISK: case VIR_DOMAIN_DISK_DEVICE_DISK:
if (disk->bus == VIR_DOMAIN_DISK_BUS_USB) if (disk->bus == VIR_DOMAIN_DISK_BUS_USB)
ret = qemuDomainAttachUsbMassstorageDevice(driver, vm, ret = qemuDomainAttachUsbMassstorageDevice(driver, vm,
disk, qemuCaps); disk);
else if (disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO) else if (disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO)
ret = qemuDomainAttachPciDiskDevice(driver, vm, disk, qemuCaps); ret = qemuDomainAttachPciDiskDevice(driver, vm, disk);
else if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) else if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI)
ret = qemuDomainAttachSCSIDisk(driver, vm, disk, qemuCaps); ret = qemuDomainAttachSCSIDisk(driver, vm, disk);
else else
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("disk bus '%s' cannot be hotplugged."), _("disk bus '%s' cannot be hotplugged."),
...@@ -3857,15 +3856,14 @@ end: ...@@ -3857,15 +3856,14 @@ end:
static int static int
qemuDomainAttachDeviceControllerLive(struct qemud_driver *driver, qemuDomainAttachDeviceControllerLive(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev)
virBitmapPtr qemuCaps)
{ {
virDomainControllerDefPtr cont = dev->data.controller; virDomainControllerDefPtr cont = dev->data.controller;
int ret = -1; int ret = -1;
switch (cont->type) { switch (cont->type) {
case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
ret = qemuDomainAttachPciControllerDevice(driver, vm, cont, qemuCaps); ret = qemuDomainAttachPciControllerDevice(driver, vm, cont);
break; break;
default: default:
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
...@@ -3879,35 +3877,34 @@ qemuDomainAttachDeviceControllerLive(struct qemud_driver *driver, ...@@ -3879,35 +3877,34 @@ qemuDomainAttachDeviceControllerLive(struct qemud_driver *driver,
static int static int
qemuDomainAttachDeviceLive(virDomainObjPtr vm, qemuDomainAttachDeviceLive(virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev,
virDomainPtr dom, virDomainPtr dom)
virBitmapPtr qemuCaps)
{ {
struct qemud_driver *driver = dom->conn->privateData; struct qemud_driver *driver = dom->conn->privateData;
int ret = -1; int ret = -1;
switch (dev->type) { switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK: case VIR_DOMAIN_DEVICE_DISK:
ret = qemuDomainAttachDeviceDiskLive(driver, vm, dev, qemuCaps); ret = qemuDomainAttachDeviceDiskLive(driver, vm, dev);
if (!ret) if (!ret)
dev->data.disk = NULL; dev->data.disk = NULL;
break; break;
case VIR_DOMAIN_DEVICE_CONTROLLER: case VIR_DOMAIN_DEVICE_CONTROLLER:
ret = qemuDomainAttachDeviceControllerLive(driver, vm, dev, qemuCaps); ret = qemuDomainAttachDeviceControllerLive(driver, vm, dev);
if (!ret) if (!ret)
dev->data.controller = NULL; dev->data.controller = NULL;
break; break;
case VIR_DOMAIN_DEVICE_NET: case VIR_DOMAIN_DEVICE_NET:
ret = qemuDomainAttachNetDevice(dom->conn, driver, vm, ret = qemuDomainAttachNetDevice(dom->conn, driver, vm,
dev->data.net, qemuCaps); dev->data.net);
if (!ret) if (!ret)
dev->data.net = NULL; dev->data.net = NULL;
break; break;
case VIR_DOMAIN_DEVICE_HOSTDEV: case VIR_DOMAIN_DEVICE_HOSTDEV:
ret = qemuDomainAttachHostDevice(driver, vm, ret = qemuDomainAttachHostDevice(driver, vm,
dev->data.hostdev, qemuCaps); dev->data.hostdev);
if (!ret) if (!ret)
dev->data.hostdev = NULL; dev->data.hostdev = NULL;
break; break;
...@@ -3925,8 +3922,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, ...@@ -3925,8 +3922,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm,
static int static int
qemuDomainDetachDeviceDiskLive(struct qemud_driver *driver, qemuDomainDetachDeviceDiskLive(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev)
virBitmapPtr qemuCaps)
{ {
virDomainDiskDefPtr disk = dev->data.disk; virDomainDiskDefPtr disk = dev->data.disk;
int ret = -1; int ret = -1;
...@@ -3934,11 +3930,11 @@ qemuDomainDetachDeviceDiskLive(struct qemud_driver *driver, ...@@ -3934,11 +3930,11 @@ qemuDomainDetachDeviceDiskLive(struct qemud_driver *driver,
switch (disk->device) { switch (disk->device) {
case VIR_DOMAIN_DISK_DEVICE_DISK: case VIR_DOMAIN_DISK_DEVICE_DISK:
if (disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO) if (disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO)
ret = qemuDomainDetachPciDiskDevice(driver, vm, dev, qemuCaps); ret = qemuDomainDetachPciDiskDevice(driver, vm, dev);
else if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) else if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI)
ret = qemuDomainDetachDiskDevice(driver, vm, dev, qemuCaps); ret = qemuDomainDetachDiskDevice(driver, vm, dev);
else if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_USB) else if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_USB)
ret = qemuDomainDetachDiskDevice(driver, vm, dev, qemuCaps); ret = qemuDomainDetachDiskDevice(driver, vm, dev);
else else
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This type of disk cannot be hot unplugged")); _("This type of disk cannot be hot unplugged"));
...@@ -3955,15 +3951,14 @@ qemuDomainDetachDeviceDiskLive(struct qemud_driver *driver, ...@@ -3955,15 +3951,14 @@ qemuDomainDetachDeviceDiskLive(struct qemud_driver *driver,
static int static int
qemuDomainDetachDeviceControllerLive(struct qemud_driver *driver, qemuDomainDetachDeviceControllerLive(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev)
virBitmapPtr qemuCaps)
{ {
virDomainControllerDefPtr cont = dev->data.controller; virDomainControllerDefPtr cont = dev->data.controller;
int ret = -1; int ret = -1;
switch (cont->type) { switch (cont->type) {
case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
ret = qemuDomainDetachPciControllerDevice(driver, vm, dev, qemuCaps); ret = qemuDomainDetachPciControllerDevice(driver, vm, dev);
break; break;
default : default :
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
...@@ -3976,24 +3971,23 @@ qemuDomainDetachDeviceControllerLive(struct qemud_driver *driver, ...@@ -3976,24 +3971,23 @@ qemuDomainDetachDeviceControllerLive(struct qemud_driver *driver,
static int static int
qemuDomainDetachDeviceLive(virDomainObjPtr vm, qemuDomainDetachDeviceLive(virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev,
virDomainPtr dom, virDomainPtr dom)
virBitmapPtr qemuCaps)
{ {
struct qemud_driver *driver = dom->conn->privateData; struct qemud_driver *driver = dom->conn->privateData;
int ret = -1; int ret = -1;
switch (dev->type) { switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK: case VIR_DOMAIN_DEVICE_DISK:
ret = qemuDomainDetachDeviceDiskLive(driver, vm, dev, qemuCaps); ret = qemuDomainDetachDeviceDiskLive(driver, vm, dev);
break; break;
case VIR_DOMAIN_DEVICE_CONTROLLER: case VIR_DOMAIN_DEVICE_CONTROLLER:
ret = qemuDomainDetachDeviceControllerLive(driver, vm, dev, qemuCaps); ret = qemuDomainDetachDeviceControllerLive(driver, vm, dev);
break; break;
case VIR_DOMAIN_DEVICE_NET: case VIR_DOMAIN_DEVICE_NET:
ret = qemuDomainDetachNetDevice(driver, vm, dev, qemuCaps); ret = qemuDomainDetachNetDevice(driver, vm, dev);
break; break;
case VIR_DOMAIN_DEVICE_HOSTDEV: case VIR_DOMAIN_DEVICE_HOSTDEV:
ret = qemuDomainDetachHostDevice(driver, vm, dev, qemuCaps); ret = qemuDomainDetachHostDevice(driver, vm, dev);
break; break;
default: default:
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
...@@ -4008,7 +4002,6 @@ static int ...@@ -4008,7 +4002,6 @@ static int
qemuDomainChangeDiskMediaLive(virDomainObjPtr vm, qemuDomainChangeDiskMediaLive(virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev,
struct qemud_driver *driver, struct qemud_driver *driver,
virBitmapPtr qemuCaps,
bool force) bool force)
{ {
virDomainDiskDefPtr disk = dev->data.disk; virDomainDiskDefPtr disk = dev->data.disk;
...@@ -4030,7 +4023,7 @@ qemuDomainChangeDiskMediaLive(virDomainObjPtr vm, ...@@ -4030,7 +4023,7 @@ qemuDomainChangeDiskMediaLive(virDomainObjPtr vm,
switch (disk->device) { switch (disk->device) {
case VIR_DOMAIN_DISK_DEVICE_CDROM: case VIR_DOMAIN_DISK_DEVICE_CDROM:
case VIR_DOMAIN_DISK_DEVICE_FLOPPY: case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
ret = qemuDomainChangeEjectableMedia(driver, vm, disk, qemuCaps, force); ret = qemuDomainChangeEjectableMedia(driver, vm, disk, force);
if (ret == 0) if (ret == 0)
dev->data.disk = NULL; dev->data.disk = NULL;
break; break;
...@@ -4056,7 +4049,6 @@ static int ...@@ -4056,7 +4049,6 @@ static int
qemuDomainUpdateDeviceLive(virDomainObjPtr vm, qemuDomainUpdateDeviceLive(virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev,
virDomainPtr dom, virDomainPtr dom,
virBitmapPtr qemuCaps,
bool force) bool force)
{ {
struct qemud_driver *driver = dom->conn->privateData; struct qemud_driver *driver = dom->conn->privateData;
...@@ -4064,7 +4056,7 @@ qemuDomainUpdateDeviceLive(virDomainObjPtr vm, ...@@ -4064,7 +4056,7 @@ qemuDomainUpdateDeviceLive(virDomainObjPtr vm,
switch (dev->type) { switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK: case VIR_DOMAIN_DEVICE_DISK:
ret = qemuDomainChangeDiskMediaLive(vm, dev, driver, qemuCaps, force); ret = qemuDomainChangeDiskMediaLive(vm, dev, driver, force);
break; break;
case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_GRAPHICS:
ret = qemuDomainChangeGraphics(driver, vm, dev->data.graphics); ret = qemuDomainChangeGraphics(driver, vm, dev->data.graphics);
...@@ -4202,7 +4194,6 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml, ...@@ -4202,7 +4194,6 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
unsigned int flags, int action) unsigned int flags, int action)
{ {
struct qemud_driver *driver = dom->conn->privateData; struct qemud_driver *driver = dom->conn->privateData;
virBitmapPtr qemuCaps = NULL;
virDomainObjPtr vm = NULL; virDomainObjPtr vm = NULL;
virDomainDefPtr vmdef = NULL; virDomainDefPtr vmdef = NULL;
virDomainDeviceDefPtr dev = NULL; virDomainDeviceDefPtr dev = NULL;
...@@ -4253,11 +4244,6 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml, ...@@ -4253,11 +4244,6 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
if (dev == NULL) if (dev == NULL)
goto endjob; goto endjob;
if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch,
NULL,
&qemuCaps) < 0)
goto endjob;
if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) { if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
/* Make a copy for updated domain. */ /* Make a copy for updated domain. */
vmdef = virDomainObjCopyPersistentDef(driver->caps, vm); vmdef = virDomainObjCopyPersistentDef(driver->caps, vm);
...@@ -4284,13 +4270,13 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml, ...@@ -4284,13 +4270,13 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
if (!ret && (flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE)) { if (!ret && (flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE)) {
switch (action) { switch (action) {
case QEMU_DEVICE_ATTACH: case QEMU_DEVICE_ATTACH:
ret = qemuDomainAttachDeviceLive(vm, dev, dom, qemuCaps); ret = qemuDomainAttachDeviceLive(vm, dev, dom);
break; break;
case QEMU_DEVICE_DETACH: case QEMU_DEVICE_DETACH:
ret = qemuDomainDetachDeviceLive(vm, dev, dom, qemuCaps); ret = qemuDomainDetachDeviceLive(vm, dev, dom);
break; break;
case QEMU_DEVICE_UPDATE: case QEMU_DEVICE_UPDATE:
ret = qemuDomainUpdateDeviceLive(vm, dev, dom, qemuCaps, force); ret = qemuDomainUpdateDeviceLive(vm, dev, dom, force);
break; break;
default: default:
qemuReportError(VIR_ERR_INTERNAL_ERROR, qemuReportError(VIR_ERR_INTERNAL_ERROR,
...@@ -4319,7 +4305,6 @@ endjob: ...@@ -4319,7 +4305,6 @@ endjob:
vm = NULL; vm = NULL;
cleanup: cleanup:
qemuCapsFree(qemuCaps);
virDomainDefFree(vmdef); virDomainDefFree(vmdef);
virDomainDeviceDefFree(dev); virDomainDeviceDefFree(dev);
if (vm) if (vm)
......
此差异已折叠。
...@@ -30,41 +30,32 @@ ...@@ -30,41 +30,32 @@
int qemuDomainChangeEjectableMedia(struct qemud_driver *driver, int qemuDomainChangeEjectableMedia(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDiskDefPtr disk, virDomainDiskDefPtr disk,
virBitmapPtr qemuCaps,
bool force); bool force);
int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDiskDefPtr disk, virDomainDiskDefPtr disk);
virBitmapPtr qemuCaps);
int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainControllerDefPtr controller, virDomainControllerDefPtr controller);
virBitmapPtr qemuCaps);
int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, int qemuDomainAttachSCSIDisk(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDiskDefPtr disk, virDomainDiskDefPtr disk);
virBitmapPtr qemuCaps);
int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDiskDefPtr disk, virDomainDiskDefPtr disk);
virBitmapPtr qemuCaps);
int qemuDomainAttachNetDevice(virConnectPtr conn, int qemuDomainAttachNetDevice(virConnectPtr conn,
struct qemud_driver *driver, struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainNetDefPtr net, virDomainNetDefPtr net);
virBitmapPtr qemuCaps);
int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, int qemuDomainAttachHostPciDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainHostdevDefPtr hostdev, virDomainHostdevDefPtr hostdev);
virBitmapPtr qemuCaps);
int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainHostdevDefPtr hostdev, virDomainHostdevDefPtr hostdev);
virBitmapPtr qemuCaps);
int qemuDomainAttachHostDevice(struct qemud_driver *driver, int qemuDomainAttachHostDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainHostdevDefPtr hostdev, virDomainHostdevDefPtr hostdev);
virBitmapPtr qemuCaps);
int qemuDomainChangeGraphics(struct qemud_driver *driver, int qemuDomainChangeGraphics(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainGraphicsDefPtr dev); virDomainGraphicsDefPtr dev);
...@@ -75,32 +66,25 @@ int qemuDomainChangeGraphicsPasswords(struct qemud_driver *driver, ...@@ -75,32 +66,25 @@ int qemuDomainChangeGraphicsPasswords(struct qemud_driver *driver,
const char *defaultPasswd); const char *defaultPasswd);
int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev);
virBitmapPtr qemuCaps);
int qemuDomainDetachDiskDevice(struct qemud_driver *driver, int qemuDomainDetachDiskDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev);
virBitmapPtr qemuCaps);
int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev);
virBitmapPtr qemuCaps);
int qemuDomainDetachNetDevice(struct qemud_driver *driver, int qemuDomainDetachNetDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev);
virBitmapPtr qemuCaps);
int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, int qemuDomainDetachHostPciDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev);
virBitmapPtr qemuCaps);
int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev);
virBitmapPtr qemuCaps);
int qemuDomainDetachHostDevice(struct qemud_driver *driver, int qemuDomainDetachHostDevice(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
virDomainDeviceDefPtr dev, virDomainDeviceDefPtr dev);
virBitmapPtr qemuCaps);
#endif /* __QEMU_HOTPLUG_H__ */ #endif /* __QEMU_HOTPLUG_H__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册