diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 7e14cea128bf5c4142635223979c77af91a4a7ba..b241b7ae771e95b71f5b6a31a979e24c5fb39ae0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5016,6 +5016,14 @@ virDomainDefCollectBootOrder(virDomainDefPtr def ATTRIBUTE_UNUSED, if (info->bootIndex == 0) return 0; + if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV && + dev->data.hostdev->parent.type != VIR_DOMAIN_DEVICE_NONE) { + /* This hostdev is a child of a higher level device + * (e.g. interface), and thus already being counted on the + * list for the other device type. + */ + return 0; + } if (virAsprintf(&order, "%u", info->bootIndex) < 0) goto cleanup; diff --git a/tests/qemuxml2argvdata/net-hostdev-bootorder.args b/tests/qemuxml2argvdata/net-hostdev-bootorder.args new file mode 100644 index 0000000000000000000000000000000000000000..e632d9b19537892906dc4d0578eedf67d85eb4bc --- /dev/null +++ b/tests/qemuxml2argvdata/net-hostdev-bootorder.args @@ -0,0 +1,27 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-i686 \ +-name QEMUGuest1 \ +-S \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ +server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-usb \ +-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ +-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,\ +bootindex=2 \ +-device pci-assign,host=03:07.1,id=hostdev0,bootindex=1,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/net-hostdev-bootorder.xml b/tests/qemuxml2argvdata/net-hostdev-bootorder.xml new file mode 100644 index 0000000000000000000000000000000000000000..cd9f32b2f3f502464526e37c955f6c8f38c9f100 --- /dev/null +++ b/tests/qemuxml2argvdata/net-hostdev-bootorder.xml @@ -0,0 +1,36 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + + destroy + restart + destroy + + /usr/bin/qemu-system-i686 + + + +
+ + + + + + + + +
+ + + + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 4883b111adbcec904823b153d5ab1edb469e2235..d7b50d7ea0d813ed0ab0046c98ad4590b7147694 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1376,6 +1376,7 @@ mymain(void) DO_TEST("net-mcast", NONE); DO_TEST("net-udp", NONE); DO_TEST("net-hostdev", NONE); + DO_TEST("net-hostdev-bootorder", NONE); DO_TEST("net-hostdev-multidomain", NONE); DO_TEST("net-hostdev-vfio", QEMU_CAPS_DEVICE_VFIO_PCI); diff --git a/tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml b/tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml new file mode 100644 index 0000000000000000000000000000000000000000..d9ecf40cf0adc118b1b2bc1284526c3943017713 --- /dev/null +++ b/tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml @@ -0,0 +1,42 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + + destroy + restart + destroy + + /usr/bin/qemu-system-i686 + + + + + +
+ + +
+ + +
+ + + + + +
+ + +
+ + + + + + diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index caf79625d4a55dcf633d995c3f4fdf7cb911fe30..43eac2f066387db12575057d1864246090eef56e 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -433,6 +433,7 @@ mymain(void) DO_TEST("net-virtio-network-portgroup", NONE); DO_TEST("net-virtio-rxtxqueuesize", NONE); DO_TEST("net-hostdev", NONE); + DO_TEST("net-hostdev-bootorder", NONE); DO_TEST("net-hostdev-vfio", NONE); DO_TEST("net-midonet", NONE); DO_TEST("net-openvswitch", NONE);