summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Privoznik <mprivozn@redhat.com>2023-04-14 13:09:53 +0200
committerMichal Privoznik <mprivozn@redhat.com>2023-04-25 12:36:30 +0200
commitfea0d8c40d2fdaf6d6ae0c5fa7207cd05129910f (patch)
tree86223847bf8b49583b8ab417a28cf889fd84e87d
parent57e4e9791a09a34bd9a6f6ada5830127845e40ed (diff)
downloadlibvirt-fea0d8c40d2fdaf6d6ae0c5fa7207cd05129910f.tar.gz
qemu: Move <hostdev> SCSI path generation into qemuDomainPrepareHostdev()
When preparing a SCSI <hostdev/> with passthrough of a host SCSI adapter (i.e. no protocol), a virStorageSource structure is initialized and stored inside virDomainHostdevDef. But the source structure is filled in many places, with almost the same code. Firstly, qemuProcessPrepareHostHostdev() and qemuConnectDomainXMLToNativePrepareHostHostdev() are the same. Secondly, qemuDomainPrepareHostdev() allocates the src structure, only to let qemuProcessPrepareHostHostdev() fill src->path later. Well, src->path can be filled at the same place where the src structure is allocated (qemuDomainPrepareHostdev()) which renders the other two functions needless. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
-rw-r--r--src/qemu/qemu_domain.c10
-rw-r--r--src/qemu/qemu_driver.c34
-rw-r--r--src/qemu/qemu_process.c34
-rw-r--r--tests/qemuxml2argvmock.c10
-rw-r--r--tests/qemuxml2argvtest.c22
5 files changed, 24 insertions, 86 deletions
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 8dc9305b2a..d556e2186c 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -11244,7 +11244,9 @@ qemuDomainPrepareHostdevSCSI(virDomainHostdevDef *hostdev,
qemuDomainObjPrivate *priv)
{
virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
+ virDomainHostdevSubsysSCSIHost *scsihostsrc = &scsisrc->u.host;
virStorageSource *src = NULL;
+ g_autofree char *devstr = NULL;
switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE:
@@ -11252,7 +11254,15 @@ qemuDomainPrepareHostdevSCSI(virDomainHostdevDef *hostdev,
scsisrc->u.host.src = virStorageSourceNew();
src = scsisrc->u.host.src;
+ if (!(devstr = virSCSIDeviceGetSgName(NULL,
+ scsihostsrc->adapter,
+ scsihostsrc->bus,
+ scsihostsrc->target,
+ scsihostsrc->unit)))
+ return -1;
+
src->type = VIR_STORAGE_TYPE_BLOCK;
+ src->path = g_strdup_printf("/dev/%s", devstr);
break;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 5ee15bab7a..f74f7c206c 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6166,38 +6166,8 @@ static char
static int
-qemuConnectDomainXMLToNativePrepareHostHostdev(virDomainHostdevDef *hostdev)
-{
- if (virHostdevIsSCSIDevice(hostdev)) {
- virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
-
- switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE: {
- virDomainHostdevSubsysSCSIHost *scsihostsrc = &scsisrc->u.host;
- virStorageSource *src = scsisrc->u.host.src;
- g_autofree char *devstr = NULL;
-
- if (!(devstr = virSCSIDeviceGetSgName(NULL,
- scsihostsrc->adapter,
- scsihostsrc->bus,
- scsihostsrc->target,
- scsihostsrc->unit)))
- return -1;
-
- src->path = g_strdup_printf("/dev/%s", devstr);
- break;
- }
-
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI:
- break;
-
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST:
- default:
- virReportEnumRangeError(virDomainHostdevSCSIProtocolType, scsisrc->protocol);
- return -1;
- }
- }
-
+qemuConnectDomainXMLToNativePrepareHostHostdev(virDomainHostdevDef *hostdev G_GNUC_UNUSED)
+{
return 0;
}
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 05437c2161..a294171678 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -6510,38 +6510,8 @@ qemuProcessPrepareDomainHostdevs(virDomainObj *vm,
int
-qemuProcessPrepareHostHostdev(virDomainHostdevDef *hostdev)
-{
- if (virHostdevIsSCSIDevice(hostdev)) {
- virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
-
- switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE: {
- virDomainHostdevSubsysSCSIHost *scsihostsrc = &scsisrc->u.host;
- virStorageSource *src = scsisrc->u.host.src;
- g_autofree char *devstr = NULL;
-
- if (!(devstr = virSCSIDeviceGetSgName(NULL,
- scsihostsrc->adapter,
- scsihostsrc->bus,
- scsihostsrc->target,
- scsihostsrc->unit)))
- return -1;
-
- src->path = g_strdup_printf("/dev/%s", devstr);
- break;
- }
-
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI:
- break;
-
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST:
- default:
- virReportEnumRangeError(virDomainHostdevSCSIProtocolType, scsisrc->protocol);
- return -1;
- }
- }
-
+qemuProcessPrepareHostHostdev(virDomainHostdevDef *hostdev G_GNUC_UNUSED)
+{
return 0;
}
diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c
index f566ec539a..400dd5c020 100644
--- a/tests/qemuxml2argvmock.c
+++ b/tests/qemuxml2argvmock.c
@@ -82,6 +82,16 @@ virSCSIVHostOpenVhostSCSI(int *vhostfd)
return 0;
}
+char *
+virSCSIDeviceGetSgName(const char *sysfs_prefix G_GNUC_UNUSED,
+ const char *adapter G_GNUC_UNUSED,
+ unsigned int bus G_GNUC_UNUSED,
+ unsigned int target G_GNUC_UNUSED,
+ unsigned long long unit G_GNUC_UNUSED)
+{
+ return g_strdup_printf("sg0");
+}
+
int
virNetDevTapCreate(char **ifname,
const char *tunpath G_GNUC_UNUSED,
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 276b1ac68b..3c75a2dce2 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -404,28 +404,6 @@ testCompareXMLToArgvCreateArgs(virQEMUDriver *drv,
disk->src->hostcdrom = true;
}
- for (i = 0; i < vm->def->nhostdevs; i++) {
- virDomainHostdevDef *hostdev = vm->def->hostdevs[i];
-
- if (virHostdevIsSCSIDevice(hostdev)) {
- virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
-
- switch ((virDomainHostdevSCSIProtocolType) scsisrc->protocol) {
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE:
- scsisrc->u.host.src->path = g_strdup("/dev/sg0");
- break;
-
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI:
- break;
-
- case VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST:
- default:
- virReportEnumRangeError(virDomainHostdevSCSIProtocolType, scsisrc->protocol);
- return NULL;
- }
- }
- }
-
if (vm->def->vsock) {
virDomainVsockDef *vsock = vm->def->vsock;
qemuDomainVsockPrivate *vsockPriv =