[libvirt] [PATCH v2 2/2] qemu_domain_address: use virPCIDeviceAddressEqual() in conditionals
Erik Skultety
eskultet at redhat.com
Mon Sep 23 07:09:41 UTC 2019
On Fri, Sep 20, 2019 at 10:52:55AM -0300, Daniel Henrique Barboza wrote:
> A common operation in qemu_domain_address is comparing a
> virPCIDeviceAddress and assigning domain, bus, slot and function
> to a specific value. The former can be done with the existing
> virPCIDeviceAddressEqual() helper, as long as we provide
> a virPCIDeviceAddress to compare it to.
>
> The later can be done by direct assignment of the now existing
> virPCIDeviceAddress struct. The defined values of domain, bus,
> slot and function will be assigned to info->addr.pci, the other
> values are zeroed (which happens to be their default values too).
> It's also worth noticing that all these assignments are being
> conditioned by virDeviceInfoPCIAddressIsPresent() calls, thus it's
> sensible to discard any non-zero values that might happen to exist
> in @cont->info.addr, if we settled beforehand that @cont->info.addr
> is not present or bogus.
>
> Suggested-by: Erik Skultety <eskultet at redhat.com>
> Signed-off-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
> ---
> src/qemu/qemu_domain_address.c | 56 +++++++++++++++-------------------
> 1 file changed, 25 insertions(+), 31 deletions(-)
>
> diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
> index e20481607f..4f9ae1f37d 100644
> --- a/src/qemu/qemu_domain_address.c
> +++ b/src/qemu/qemu_domain_address.c
> @@ -1729,45 +1729,41 @@ qemuDomainValidateDevicePCISlotsPIIX3(virDomainDefPtr def,
> /* Verify that first IDE and USB controllers (if any) is on the PIIX3, fn 1 */
> for (i = 0; i < def->ncontrollers; i++) {
> virDomainControllerDefPtr cont = def->controllers[i];
> + virPCIDeviceAddress primaryIDEAddr = {.domain = 0, .bus = 0,
> + .slot = 1, .function = 1};
> + virPCIDeviceAddress piix3USBAddr = {.domain = 0, .bus = 0,
> + .slot = 1, .function = 2};
>
> /* First IDE controller lives on the PIIX3 at slot=1, function=1 */
> if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_IDE &&
> cont->idx == 0) {
> if (virDeviceInfoPCIAddressIsPresent(&cont->info)) {
> - if (cont->info.addr.pci.domain != 0 ||
> - cont->info.addr.pci.bus != 0 ||
> - cont->info.addr.pci.slot != 1 ||
> - cont->info.addr.pci.function != 1) {
> + if (!virPCIDeviceAddressEqual(&cont->info.addr.pci,
> + &primaryIDEAddr)) {
> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("Primary IDE controller must have PCI address 0:0:1.1"));
> + _("Primary IDE controller must have PCI "
> + "address 0:0:1.1"));
> return -1;
> }
> } else {
> cont->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
> - cont->info.addr.pci.domain = 0;
> - cont->info.addr.pci.bus = 0;
> - cont->info.addr.pci.slot = 1;
> - cont->info.addr.pci.function = 1;
> + cont->info.addr.pci = primaryIDEAddr;
> }
> } else if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB &&
> cont->idx == 0 &&
> (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI ||
> cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT)) {
> if (virDeviceInfoPCIAddressIsPresent(&cont->info)) {
> - if (cont->info.addr.pci.domain != 0 ||
> - cont->info.addr.pci.bus != 0 ||
> - cont->info.addr.pci.slot != 1 ||
> - cont->info.addr.pci.function != 2) {
> + if (!virPCIDeviceAddressEqual(&cont->info.addr.pci,
> + &piix3USBAddr)) {
> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("PIIX3 USB controller at index 0 must have PCI address 0:0:1.2"));
> + _("PIIX3 USB controller at index 0 must "
> + "have PCI address 0:0:1.2"));
> return -1;
> }
> } else {
> cont->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
> - cont->info.addr.pci.domain = 0;
> - cont->info.addr.pci.bus = 0;
> - cont->info.addr.pci.slot = 1;
> - cont->info.addr.pci.function = 2;
> + cont->info.addr.pci = piix3USBAddr;
> }
> } else {
> /* this controller is not skipped in qemuDomainCollectPCIAddress */
> @@ -1800,6 +1796,8 @@ qemuDomainValidateDevicePCISlotsPIIX3(virDomainDefPtr def,
> * at slot 2.
> */
> virDomainVideoDefPtr primaryVideo = def->videos[0];
> + virPCIDeviceAddress primaryCardAddr = {.domain = 0, .bus = 0,
> + .slot = 2, .function = 0};
>
> if (virDeviceInfoPCIAddressIsWanted(&primaryVideo->info)) {
> memset(&tmp_addr, 0, sizeof(tmp_addr));
> @@ -1830,10 +1828,8 @@ qemuDomainValidateDevicePCISlotsPIIX3(virDomainDefPtr def,
> primaryVideo->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
> }
> } else if (!qemuDeviceVideoUsable) {
> - if (primaryVideo->info.addr.pci.domain != 0 ||
> - primaryVideo->info.addr.pci.bus != 0 ||
> - primaryVideo->info.addr.pci.slot != 2 ||
> - primaryVideo->info.addr.pci.function != 0) {
> + if (!virPCIDeviceAddressEqual(&primaryVideo->info.addr.pci,
> + &primaryCardAddr)) {
> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("Primary video card must have PCI address 0:0:2.0"));
> return -1;
> @@ -1870,6 +1866,8 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDefPtr def,
>
> for (i = 0; i < def->ncontrollers; i++) {
> virDomainControllerDefPtr cont = def->controllers[i];
> + virPCIDeviceAddress primarySATAAddr = {.domain = 0, .bus = 0,
> + .slot = 0x1F, .function = 2};
>
> switch (cont->type) {
> case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
> @@ -1879,20 +1877,16 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDefPtr def,
> */
> if (cont->idx == 0) {
> if (virDeviceInfoPCIAddressIsPresent(&cont->info)) {
> - if (cont->info.addr.pci.domain != 0 ||
> - cont->info.addr.pci.bus != 0 ||
> - cont->info.addr.pci.slot != 0x1F ||
> - cont->info.addr.pci.function != 2) {
> + if (!virPCIDeviceAddressEqual(&cont->info.addr.pci,
> + &primarySATAAddr)) {
actually, indent is off here, I'll fix it before pushing...
Erik
More information about the libvir-list
mailing list