Create a separate typedef for the hostdev union data describing USB.
Then adjust the code to use the new pointer
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/domain_audit.c | 4 ++--
src/conf/domain_conf.c | 50 +++++++++++++++++++---------------------
src/conf/domain_conf.h | 22 ++++++++++--------
src/lxc/lxc_cgroup.c | 4 ++--
src/lxc/lxc_controller.c | 10 ++++----
src/lxc/lxc_driver.c | 16 ++++++-------
src/qemu/qemu_cgroup.c | 4 ++--
src/qemu/qemu_command.c | 26 ++++++++++-----------
src/qemu/qemu_hotplug.c | 7 +++---
src/security/security_apparmor.c | 6 ++---
src/security/security_dac.c | 12 ++++------
src/security/security_selinux.c | 10 ++++----
src/security/virt-aa-helper.c | 5 ++--
src/util/virhostdev.c | 50 +++++++++++++++-------------------------
14 files changed, 104 insertions(+), 122 deletions(-)
diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c
index a3d6c67..8277b06 100644
--- a/src/conf/domain_audit.c
+++ b/src/conf/domain_audit.c
@@ -388,6 +388,7 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr
hostdev,
char *address = NULL;
char *device = NULL;
const char *virt;
+ virDomainHostdevSubsysUSBPtr usbsrc = &hostdev->source.subsys.u.usb;
virUUIDFormat(vm->def->uuid, uuidstr);
if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@@ -415,8 +416,7 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr
hostdev,
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
if (virAsprintfQuiet(&address, "%.3d.%.3d",
- hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device) < 0) {
+ usbsrc->bus, usbsrc->device) < 0) {
VIR_WARN("OOM while encoding audit message");
goto cleanup;
}
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b91ccf7..046b4f8 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -3800,6 +3800,7 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
xmlNodePtr cur;
char *startupPolicy = NULL;
char *autoAddress;
+ virDomainHostdevSubsysUSBPtr usbsrc = &def->source.subsys.u.usb;
if ((startupPolicy = virXMLPropString(node, "startupPolicy"))) {
def->startupPolicy =
@@ -3816,7 +3817,7 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
if ((autoAddress = virXMLPropString(node, "autoAddress"))) {
if (STREQ(autoAddress, "yes"))
- def->source.subsys.u.usb.autoAddress = true;
+ usbsrc->autoAddress = true;
VIR_FREE(autoAddress);
}
@@ -3833,8 +3834,7 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
if (vendor) {
got_vendor = true;
- if (virStrToLong_ui(vendor, NULL, 0,
- &def->source.subsys.u.usb.vendor) < 0) {
+ if (virStrToLong_ui(vendor, NULL, 0, &usbsrc->vendor) < 0)
{
virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse vendor id %s"),
vendor);
VIR_FREE(vendor);
@@ -3852,7 +3852,7 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
if (product) {
got_product = true;
if (virStrToLong_ui(product, NULL, 0,
- &def->source.subsys.u.usb.product) < 0)
{
+ &usbsrc->product) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse product %s"),
product);
@@ -3870,8 +3870,7 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
bus = virXMLPropString(cur, "bus");
if (bus) {
- if (virStrToLong_ui(bus, NULL, 0,
- &def->source.subsys.u.usb.bus) < 0) {
+ if (virStrToLong_ui(bus, NULL, 0, &usbsrc->bus) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse bus %s"), bus);
VIR_FREE(bus);
@@ -3886,8 +3885,7 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
device = virXMLPropString(cur, "device");
if (device) {
- if (virStrToLong_ui(device, NULL, 0,
- &def->source.subsys.u.usb.device) < 0)
{
+ if (virStrToLong_ui(device, NULL, 0, &usbsrc->device) < 0)
{
virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse device %s"),
device);
@@ -3910,7 +3908,7 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
cur = cur->next;
}
- if (got_vendor && def->source.subsys.u.usb.vendor == 0) {
+ if (got_vendor && usbsrc->vendor == 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("vendor cannot be 0."));
goto out;
@@ -10104,15 +10102,18 @@ static int
virDomainHostdevMatchSubsysUSB(virDomainHostdevDefPtr a,
virDomainHostdevDefPtr b)
{
- if (a->source.subsys.u.usb.bus && a->source.subsys.u.usb.device) {
+ virDomainHostdevSubsysUSBPtr ausbsrc = &a->source.subsys.u.usb;
+ virDomainHostdevSubsysUSBPtr busbsrc = &b->source.subsys.u.usb;
+
+ if (ausbsrc->bus && ausbsrc->device) {
/* specified by bus location on host */
- if (a->source.subsys.u.usb.bus == b->source.subsys.u.usb.bus &&
- a->source.subsys.u.usb.device == b->source.subsys.u.usb.device)
+ if (ausbsrc->bus == busbsrc->bus &&
+ ausbsrc->device == busbsrc->device)
return 1;
} else {
/* specified by product & vendor id */
- if (a->source.subsys.u.usb.product == b->source.subsys.u.usb.product
&&
- a->source.subsys.u.usb.vendor == b->source.subsys.u.usb.vendor)
+ if (ausbsrc->product == busbsrc->product &&
+ ausbsrc->vendor == busbsrc->vendor)
return 1;
}
return 0;
@@ -15484,6 +15485,8 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
unsigned int flags,
bool includeTypeInAddr)
{
+ virDomainHostdevSubsysUSBPtr usbsrc = &def->source.subsys.u.usb;
+
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
def->source.subsys.u.pci.backend != VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) {
const char *backend =
virDomainHostdevSubsysPCIBackendTypeToString(def->source.subsys.u.pci.backend);
@@ -15503,8 +15506,7 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
policy = virDomainStartupPolicyTypeToString(def->startupPolicy);
virBufferAsprintf(buf, " startupPolicy='%s'", policy);
}
- if (def->source.subsys.u.usb.autoAddress &&
- (flags & VIR_DOMAIN_XML_MIGRATABLE))
+ if (usbsrc->autoAddress && (flags & VIR_DOMAIN_XML_MIGRATABLE))
virBufferAddLit(buf, " autoAddress='yes'");
if (def->missing &&
@@ -15517,18 +15519,14 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
switch (def->source.subsys.type)
{
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
- if (def->source.subsys.u.usb.vendor) {
- virBufferAsprintf(buf, "<vendor id='0x%.4x'/>\n",
- def->source.subsys.u.usb.vendor);
- virBufferAsprintf(buf, "<product id='0x%.4x'/>\n",
- def->source.subsys.u.usb.product);
- }
- if (def->source.subsys.u.usb.bus ||
- def->source.subsys.u.usb.device) {
+ if (usbsrc->vendor) {
+ virBufferAsprintf(buf, "<vendor id='0x%.4x'/>\n",
usbsrc->vendor);
+ virBufferAsprintf(buf, "<product id='0x%.4x'/>\n",
usbsrc->product);
+ }
+ if (usbsrc->bus || usbsrc->device) {
virBufferAsprintf(buf, "<address %sbus='%d'
device='%d'/>\n",
includeTypeInAddr ? "type='usb' " :
"",
- def->source.subsys.u.usb.bus,
- def->source.subsys.u.usb.device);
+ usbsrc->bus, usbsrc->device);
}
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 32674e0..d955491 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -390,20 +390,24 @@ typedef enum {
VIR_ENUM_DECL(virDomainHostdevSubsysPCIBackend)
+typedef struct _virDomainHostdevSubsysUSB virDomainHostdevSubsysUSB;
+typedef virDomainHostdevSubsysUSB *virDomainHostdevSubsysUSBPtr;
+struct _virDomainHostdevSubsysUSB {
+ bool autoAddress; /* bus/device were filled automatically based
+ on vedor/product */
+ unsigned bus;
+ unsigned device;
+
+ unsigned vendor;
+ unsigned product;
+};
+
typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys;
typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr;
struct _virDomainHostdevSubsys {
int type; /* enum virDomainHostdevSubsysType */
union {
- struct {
- bool autoAddress; /* bus/device were filled automatically based
- on vedor/product */
- unsigned bus;
- unsigned device;
-
- unsigned vendor;
- unsigned product;
- } usb;
+ virDomainHostdevSubsysUSB usb;
struct {
virDevicePCIAddress addr; /* host address */
int backend; /* enum virDomainHostdevSubsysPCIBackendType */
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index 00ff807..9a86a85 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -403,6 +403,7 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def,
VIR_DEBUG("Allowing any hostdev block devs");
for (i = 0; i < def->nhostdevs; i++) {
virDomainHostdevDefPtr hostdev = def->hostdevs[i];
+ virDomainHostdevSubsysUSBPtr usbsrc = &hostdev->source.subsys.u.usb;
virUSBDevicePtr usb;
switch (hostdev->mode) {
@@ -412,8 +413,7 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def,
if (hostdev->missing)
continue;
- if ((usb = virUSBDeviceNew(hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device,
+ if ((usb = virUSBDeviceNew(usbsrc->bus, usbsrc->device,
NULL)) == NULL)
goto cleanup;
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index 4aa7e02..5ef41a6 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -1350,22 +1350,20 @@ virLXCControllerSetupHostdevSubsysUSB(virDomainDefPtr vmDef,
char *vroot = NULL;
struct stat sb;
mode_t mode;
+ virDomainHostdevSubsysUSBPtr usbsrc = &def->source.subsys.u.usb;
if (virAsprintf(&src, USB_DEVFS "/%03d/%03d",
- def->source.subsys.u.usb.bus,
- def->source.subsys.u.usb.device) < 0)
+ usbsrc->bus, usbsrc->device) < 0)
goto cleanup;
if (virAsprintf(&vroot, "/%s/%s.dev/bus/usb/",
LXC_STATE_DIR, vmDef->name) < 0)
goto cleanup;
- if (virAsprintf(&dstdir, "%s/%03d/", vroot,
- def->source.subsys.u.usb.bus) < 0)
+ if (virAsprintf(&dstdir, "%s/%03d/", vroot, usbsrc->bus) < 0)
goto cleanup;
- if (virAsprintf(&dstfile, "%s/%03d", dstdir,
- def->source.subsys.u.usb.device) < 0)
+ if (virAsprintf(&dstfile, "%s/%03d", dstdir, usbsrc->device) <
0)
goto cleanup;
if (stat(src, &sb) < 0) {
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 3253211..790a937 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -4229,6 +4229,7 @@ lxcDomainAttachDeviceHostdevSubsysUSBLive(virLXCDriverPtr driver,
char *src = NULL;
struct stat sb;
virUSBDevicePtr usb = NULL;
+ virDomainHostdevSubsysUSBPtr usbsrc;
if (virDomainHostdevFind(vm->def, def, NULL) >= 0) {
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
@@ -4236,13 +4237,12 @@ lxcDomainAttachDeviceHostdevSubsysUSBLive(virLXCDriverPtr driver,
return -1;
}
+ usbsrc = &def->source.subsys.u.usb;
if (virAsprintf(&src, "/dev/bus/usb/%03d/%03d",
- def->source.subsys.u.usb.bus,
- def->source.subsys.u.usb.device) < 0)
+ usbsrc->bus, usbsrc->device) < 0)
goto cleanup;
- if (!(usb = virUSBDeviceNew(def->source.subsys.u.usb.bus,
- def->source.subsys.u.usb.device, NULL)))
+ if (!(usb = virUSBDeviceNew(usbsrc->bus, usbsrc->device, NULL)))
goto cleanup;
if (stat(src, &sb) < 0) {
@@ -4673,6 +4673,7 @@ lxcDomainDetachDeviceHostdevUSBLive(virLXCDriverPtr driver,
char *dst = NULL;
virUSBDevicePtr usb = NULL;
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
+ virDomainHostdevSubsysUSBPtr usbsrc;
if ((idx = virDomainHostdevFind(vm->def,
dev->data.hostdev,
@@ -4682,9 +4683,9 @@ lxcDomainDetachDeviceHostdevUSBLive(virLXCDriverPtr driver,
goto cleanup;
}
+ usbsrc = &def->source.subsys.u.usb;
if (virAsprintf(&dst, "/dev/bus/usb/%03d/%03d",
- def->source.subsys.u.usb.bus,
- def->source.subsys.u.usb.device) < 0)
+ usbsrc->bus, usbsrc->device) < 0)
goto cleanup;
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES)) {
@@ -4693,8 +4694,7 @@ lxcDomainDetachDeviceHostdevUSBLive(virLXCDriverPtr driver,
goto cleanup;
}
- if (!(usb = virUSBDeviceNew(def->source.subsys.u.usb.bus,
- def->source.subsys.u.usb.device, NULL)))
+ if (!(usb = virUSBDeviceNew(usbsrc->bus, usbsrc->device, NULL)))
goto cleanup;
if (lxcDomainAttachDeviceUnlink(vm, dst) < 0) {
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index 79f5f55..8f03078 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -242,6 +242,7 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm,
{
int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
virPCIDevicePtr pci = NULL;
virUSBDevicePtr usb = NULL;
virSCSIDevicePtr scsi = NULL;
@@ -290,8 +291,7 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm,
*/
if (dev->missing)
break;
- if ((usb = virUSBDeviceNew(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device,
+ if ((usb = virUSBDeviceNew(usbsrc->bus, usbsrc->device,
NULL)) == NULL) {
goto cleanup;
}
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 2185ef4..208d49d 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5035,10 +5035,9 @@ qemuBuildUSBHostdevDevStr(virDomainDefPtr def,
virQEMUCapsPtr qemuCaps)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
- if (!dev->missing &&
- !dev->source.subsys.u.usb.bus &&
- !dev->source.subsys.u.usb.device) {
+ if (!dev->missing && !usbsrc->bus && !usbsrc->device) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("USB host device is missing bus/device
information"));
return NULL;
@@ -5047,8 +5046,7 @@ qemuBuildUSBHostdevDevStr(virDomainDefPtr def,
virBufferAddLit(&buf, "usb-host");
if (!dev->missing) {
virBufferAsprintf(&buf, ",hostbus=%d,hostaddr=%d",
- dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device);
+ usbsrc->bus, usbsrc->device);
}
virBufferAsprintf(&buf, ",id=%s", dev->info->alias);
if (dev->info->bootIndex)
@@ -5108,6 +5106,7 @@ char *
qemuBuildUSBHostdevUSBDevStr(virDomainHostdevDefPtr dev)
{
char *ret = NULL;
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
if (dev->missing) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -5115,16 +5114,13 @@ qemuBuildUSBHostdevUSBDevStr(virDomainHostdevDefPtr dev)
return NULL;
}
- if (!dev->source.subsys.u.usb.bus &&
- !dev->source.subsys.u.usb.device) {
+ if (!usbsrc->bus && !usbsrc->device) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("USB host device is missing bus/device
information"));
return NULL;
}
- ignore_value(virAsprintf(&ret, "host:%d.%d",
- dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device));
+ ignore_value(virAsprintf(&ret, "host:%d.%d", usbsrc->bus,
usbsrc->device));
return ret;
}
@@ -10083,12 +10079,14 @@ static virDomainHostdevDefPtr
qemuParseCommandLineUSB(const char *val)
{
virDomainHostdevDefPtr def = virDomainHostdevDefAlloc();
+ virDomainHostdevSubsysUSBPtr usbsrc;
int first = 0, second = 0;
const char *start;
char *end;
if (!def)
goto error;
+ usbsrc = &def->source.subsys.u.usb;
if (!STRPREFIX(val, "host:")) {
virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -10127,11 +10125,11 @@ qemuParseCommandLineUSB(const char *val)
def->managed = false;
def->source.subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB;
if (*end == '.') {
- def->source.subsys.u.usb.bus = first;
- def->source.subsys.u.usb.device = second;
+ usbsrc->bus = first;
+ usbsrc->device = second;
} else {
- def->source.subsys.u.usb.vendor = first;
- def->source.subsys.u.usb.product = second;
+ usbsrc->vendor = first;
+ usbsrc->product = second;
}
return def;
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 1fc28b8..0427930 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -3360,6 +3360,7 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver,
{
virDomainHostdevDefPtr hostdev = dev->data.hostdev;
virDomainHostdevSubsysPtr subsys = &hostdev->source.subsys;
+ virDomainHostdevSubsysUSBPtr usbsrc = &subsys->u.usb;
virDomainHostdevDefPtr detach = NULL;
int idx;
@@ -3381,14 +3382,14 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver,
subsys->u.pci.addr.slot, subsys->u.pci.addr.function);
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
- if (subsys->u.usb.bus && subsys->u.usb.device) {
+ if (usbsrc->bus && usbsrc->device) {
virReportError(VIR_ERR_OPERATION_FAILED,
_("host usb device %03d.%03d not found"),
- subsys->u.usb.bus, subsys->u.usb.device);
+ usbsrc->bus, usbsrc->device);
} else {
virReportError(VIR_ERR_OPERATION_FAILED,
_("host usb device vendor=0x%.4x product=0x%.4x not
found"),
- subsys->u.usb.vendor, subsys->u.usb.product);
+ usbsrc->vendor, usbsrc->product);
}
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
diff --git a/src/security/security_apparmor.c b/src/security/security_apparmor.c
index 9603c78..563de4f 100644
--- a/src/security/security_apparmor.c
+++ b/src/security/security_apparmor.c
@@ -801,6 +801,7 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
int ret = -1;
virSecurityLabelDefPtr secdef =
virDomainDefGetSecurityLabelDef(def, SECURITY_APPARMOR_NAME);
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
if (!secdef)
return -1;
@@ -822,10 +823,7 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
switch (dev->source.subsys.type) {
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: {
virUSBDevicePtr usb =
- virUSBDeviceNew(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device,
- vroot);
-
+ virUSBDeviceNew(usbsrc->bus, usbsrc->device, vroot);
if (!usb)
goto done;
diff --git a/src/security/security_dac.c b/src/security/security_dac.c
index 4d2a9d6..0caeae6 100644
--- a/src/security/security_dac.c
+++ b/src/security/security_dac.c
@@ -466,6 +466,7 @@ virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
{
virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
virSecurityDACCallbackData cbdata;
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
int ret = -1;
if (!priv->dynamicOwnership)
@@ -487,10 +488,7 @@ virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
if (dev->missing)
return 0;
- usb = virUSBDeviceNew(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device,
- vroot);
- if (!usb)
+ if (!(usb = virUSBDeviceNew(usbsrc->bus, usbsrc->device, vroot)))
goto done;
ret = virUSBDeviceFileIterate(usb,
@@ -597,6 +595,7 @@ virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
{
virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
virSecurityLabelDefPtr secdef;
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
int ret = -1;
secdef = virDomainDefGetSecurityLabelDef(def, SECURITY_DAC_NAME);
@@ -614,10 +613,7 @@ virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
if (dev->missing)
return 0;
- usb = virUSBDeviceNew(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device,
- vroot);
- if (!usb)
+ if (!(usb = virUSBDeviceNew(usbsrc->bus, usbsrc->device, vroot)))
goto done;
ret = virUSBDeviceFileIterate(usb, virSecurityDACRestoreSecurityUSBLabel, mgr);
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
index a0e89b7..a96b224 100644
--- a/src/security/security_selinux.c
+++ b/src/security/security_selinux.c
@@ -1319,6 +1319,7 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virDomainDefPtr
def,
const char *vroot)
{
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
int ret = -1;
switch (dev->source.subsys.type) {
@@ -1328,8 +1329,8 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virDomainDefPtr
def,
if (dev->missing)
return 0;
- usb = virUSBDeviceNew(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device,
+ usb = virUSBDeviceNew(usbsrc->bus,
+ usbsrc->device,
vroot);
if (!usb)
goto done;
@@ -1508,6 +1509,7 @@
virSecuritySELinuxRestoreSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr,
const char *vroot)
{
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
int ret = -1;
switch (dev->source.subsys.type) {
@@ -1517,8 +1519,8 @@
virSecuritySELinuxRestoreSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr,
if (dev->missing)
return 0;
- usb = virUSBDeviceNew(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device,
+ usb = virUSBDeviceNew(usbsrc->bus,
+ usbsrc->device,
vroot);
if (!usb)
goto done;
diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c
index b5f66f3..49b06f6 100644
--- a/src/security/virt-aa-helper.c
+++ b/src/security/virt-aa-helper.c
@@ -1047,12 +1047,11 @@ get_files(vahControl * ctl)
for (i = 0; i < ctl->def->nhostdevs; i++)
if (ctl->def->hostdevs[i]) {
virDomainHostdevDefPtr dev = ctl->def->hostdevs[i];
+ virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
switch (dev->source.subsys.type) {
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: {
virUSBDevicePtr usb =
- virUSBDeviceNew(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device,
- NULL);
+ virUSBDeviceNew(usbsrc->bus, usbsrc->device, NULL);
if (usb == NULL)
continue;
diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
index 9dd1df2..3c93758 100644
--- a/src/util/virhostdev.c
+++ b/src/util/virhostdev.c
@@ -897,22 +897,19 @@ virHostdevUpdateActiveUSBDevices(virHostdevManagerPtr mgr,
virObjectLock(mgr->activeUSBHostdevs);
for (i = 0; i < nhostdevs; i++) {
+ virDomainHostdevSubsysUSBPtr usbsrc;
virUSBDevicePtr usb = NULL;
hostdev = hostdevs[i];
+ usbsrc = &hostdev->source.subsys.u.usb;
if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
continue;
if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)
continue;
- usb = virUSBDeviceNew(hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device,
- NULL);
- if (!usb) {
+ if (!(usb = virUSBDeviceNew(usbsrc->bus, usbsrc->device, NULL))) {
VIR_WARN("Unable to reattach USB device %03d.%03d on domain %s",
- hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device,
- dom_name);
+ usbsrc->bus, usbsrc->device, dom_name);
continue;
}
@@ -1047,11 +1044,12 @@ virHostdevFindUSBDevice(virDomainHostdevDefPtr hostdev,
bool mandatory,
virUSBDevicePtr *usb)
{
- unsigned vendor = hostdev->source.subsys.u.usb.vendor;
- unsigned product = hostdev->source.subsys.u.usb.product;
- unsigned bus = hostdev->source.subsys.u.usb.bus;
- unsigned device = hostdev->source.subsys.u.usb.device;
- bool autoAddress = hostdev->source.subsys.u.usb.autoAddress;
+ virDomainHostdevSubsysUSBPtr usbsrc = &hostdev->source.subsys.u.usb;
+ unsigned vendor = usbsrc->vendor;
+ unsigned product = usbsrc->product;
+ unsigned bus = usbsrc->bus;
+ unsigned device = usbsrc->device;
+ bool autoAddress = usbsrc->autoAddress;
int rc;
*usb = NULL;
@@ -1106,16 +1104,15 @@ virHostdevFindUSBDevice(virDomainHostdevDefPtr hostdev,
return -1;
}
- hostdev->source.subsys.u.usb.bus = virUSBDeviceGetBus(*usb);
- hostdev->source.subsys.u.usb.device = virUSBDeviceGetDevno(*usb);
- hostdev->source.subsys.u.usb.autoAddress = true;
+ usbsrc->bus = virUSBDeviceGetBus(*usb);
+ usbsrc->device = virUSBDeviceGetDevno(*usb);
+ usbsrc->autoAddress = true;
if (autoAddress) {
VIR_INFO("USB device %x:%x found at bus:%u device:%u (moved"
" from bus:%u device:%u)",
vendor, product,
- hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device,
+ usbsrc->bus, usbsrc->device,
bus, device);
}
} else if (!vendor && bus) {
@@ -1332,6 +1329,7 @@ virHostdevReAttachUSBDevices(virHostdevManagerPtr hostdev_mgr,
virObjectLock(hostdev_mgr->activeUSBHostdevs);
for (i = 0; i < nhostdevs; i++) {
virDomainHostdevDefPtr hostdev = hostdevs[i];
+ virDomainHostdevSubsysUSBPtr usbsrc = &hostdev->source.subsys.u.usb;
virUSBDevicePtr usb, tmp;
const char *usedby_drvname;
const char *usedby_domname;
@@ -1343,15 +1341,9 @@ virHostdevReAttachUSBDevices(virHostdevManagerPtr hostdev_mgr,
if (hostdev->missing)
continue;
- usb = virUSBDeviceNew(hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device,
- NULL);
-
- if (!usb) {
+ if (!(usb = virUSBDeviceNew(usbsrc->bus, usbsrc->device, NULL))) {
VIR_WARN("Unable to reattach USB device %03d.%03d on domain %s",
- hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device,
- dom_name);
+ usbsrc->bus, usbsrc->device, dom_name);
continue;
}
@@ -1367,8 +1359,7 @@ virHostdevReAttachUSBDevices(virHostdevManagerPtr hostdev_mgr,
if (!tmp) {
VIR_WARN("Unable to find device %03d.%03d "
"in list of active USB devices",
- hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device);
+ usbsrc->bus, usbsrc->device);
continue;
}
@@ -1376,10 +1367,7 @@ virHostdevReAttachUSBDevices(virHostdevManagerPtr hostdev_mgr,
if (STREQ_NULLABLE(drv_name, usedby_drvname) &&
STREQ_NULLABLE(dom_name, usedby_domname)) {
VIR_DEBUG("Removing %03d.%03d dom=%s from activeUSBHostdevs",
- hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device,
- dom_name);
-
+ usbsrc->bus, usbsrc->device, dom_name);
virUSBDeviceListDel(hostdev_mgr->activeUSBHostdevs, tmp);
}
}
--
1.9.3