Introduce qemuCheckBootIndex to check the new bootindex and is it nessary
to update the bootindex. Introduce qemuChangeDiskBootIndex to support update
disk's bootindex according to different disks' type.
Signed-off-by: Jiang Jiacheng <jiangjiacheng(a)huawei.com>
---
src/qemu/qemu_conf.c | 67 ++++++++++++++++++++++++++++++++++++++++++++
src/qemu/qemu_conf.h | 7 +++++
2 files changed, 74 insertions(+)
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 0071a95cb6..9a7992db01 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1681,3 +1681,70 @@ qemuDomainChangeBootIndex(virDomainObj *vm,
return ret;
}
+
+/**
+ * qemuCheckBootIndex:
+ * @devInfo: origin device info
+ * @new_bootindex: new bootIndex
+ *
+ * check whether the device's bootIndex could be changed or neet to
+ * be changed
+ *
+ * Returns: 1 on need to change
+ * 0 on don't need to change
+ * -1 on could not change with an error
+ */
+int
+qemuCheckBootIndex(virDomainDeviceInfo *devInfo,
+ const int new_bootindex)
+{
+ if (!devInfo->bootIndexSpecified) {
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+ _("this device does not set boot index, cannot change
it."));
+ return -1;
+ }
+
+ /* if the new bootindex is different from the old bootindex,
+ * we will update the bootindex. */
+ if (devInfo->bootIndex != new_bootindex) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/**
+ * qemuChangeDiskBootIndex:
+ * @vm: domain object
+ * @orig_disk: the origin disk
+ * @disk: the new disk to be updated to
+ *
+ * check device's type and if its type support update bootIndex, update it.
+ *
+ * Returns: 0 on success
+ * -1 on fail
+ */
+int
+qemuChangeDiskBootIndex(virDomainObj *vm,
+ virDomainDiskDef *orig_disk,
+ virDomainDiskDef *disk)
+{
+ switch (disk->device) {
+ case VIR_DOMAIN_DISK_DEVICE_CDROM:
+ case VIR_DOMAIN_DISK_DEVICE_DISK:
+ case VIR_DOMAIN_DISK_DEVICE_LUN:
+ if (qemuDomainChangeBootIndex(vm, &orig_disk->info,
+ disk->info.bootIndex) < 0)
+ return -1;
+
+ orig_disk->info.bootIndex = disk->info.bootIndex;
+ break;
+ case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
+ case VIR_DOMAIN_DISK_DEVICE_LAST:
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("The boot index of disk bus '%s' cannot be
changed."),
+ virDomainDiskBusTypeToString(disk->bus));
+ return -1;
+ }
+ return 0;
+}
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index e7447191df..5b05a7392b 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -380,3 +380,10 @@ int qemuDomainChangeBootIndex(virDomainObj *vm,
virDomainDeviceInfo *devInfo,
int newBootIndex)
ATTRIBUTE_NONNULL(2);
+
+int qemuCheckBootIndex(virDomainDeviceInfo *devInfo,
+ const int new_bootindex);
+
+int qemuChangeDiskBootIndex(virDomainObj *vm,
+ virDomainDiskDef *orig_disk,
+ virDomainDiskDef *disk);
--
2.33.0