diff --git a/src/bhyve/bhyve_device.c b/src/bhyve/bhyve_device.c index 29528230fd9e495f2f6078eb50ac689a70261085..55ce631ec464d04e08472f223db5843c15f6a8a7 100644 --- a/src/bhyve/bhyve_device.c +++ b/src/bhyve/bhyve_device.c @@ -129,6 +129,22 @@ bhyveAssignDevicePCISlots(virDomainDefPtr def, goto error; } + for (i = 0; i < def->ndisks; i++) { + /* We only handle virtio disk addresses as SATA disks are + * attached to a controller and don't have their own PCI + * addresses */ + if (def->disks[i]->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) + continue; + + if (def->disks[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && + !virPCIDeviceAddressIsEmpty(&def->disks[i]->info.addr.pci)) + continue; + if (virDomainPCIAddressReserveNextAddr(addrs, &def->disks[i]->info, + VIR_PCI_CONNECT_TYPE_PCI_DEVICE, + -1) < 0) + goto error; + } + return 0; error: diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.args b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.args new file mode 100644 index 0000000000000000000000000000000000000000..8cc1668949cc753cb2871da45068b78ab10d6941 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.args @@ -0,0 +1,11 @@ +/usr/sbin/bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 3:0,virtio-net,faketapdev,mac=52:54:00:bc:85:fe \ +-s 2:0,virtio-blk,/tmp/freebsd.img \ +-s 4:0,virtio-blk,/tmp/test.img \ +-s 5:0,virtio-blk,/tmp/test2.img bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.ldargs b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.ldargs new file mode 100644 index 0000000000000000000000000000000000000000..32538b558ef3174217a36f1890713552e64ce9be --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.ldargs @@ -0,0 +1,3 @@ +/usr/sbin/bhyveload \ +-m 214 \ +-d /tmp/freebsd.img bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.xml new file mode 100644 index 0000000000000000000000000000000000000000..9bcd0a6290c6f15d21e305755dbca0cbd4d98f28 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-multiple-virtio-disks.xml @@ -0,0 +1,32 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.args b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.args new file mode 100644 index 0000000000000000000000000000000000000000..4dcc40404b08c14a3eb076522e0c08a08e8ce83b --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.args @@ -0,0 +1,9 @@ +/usr/sbin/bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 3:0,virtio-net,faketapdev,mac=52:54:00:bc:85:fe \ +-s 2:0,virtio-blk,/tmp/freebsd.img bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.ldargs b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.ldargs new file mode 100644 index 0000000000000000000000000000000000000000..32538b558ef3174217a36f1890713552e64ce9be --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.ldargs @@ -0,0 +1,3 @@ +/usr/sbin/bhyveload \ +-m 214 \ +-d /tmp/freebsd.img bhyve diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.xml new file mode 100644 index 0000000000000000000000000000000000000000..6be9ae1346884ef53b462bf329d99627fcf612f6 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-addr-single-virtio-disk.xml @@ -0,0 +1,22 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + + + +
+ + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index e80705780a389216bacdba38da7b7c1c89431631..c36b55a0a631d6b3c4916c208c271ed755f49859 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -190,6 +190,8 @@ mymain(void) DO_TEST("addr-single-sata-disk"); DO_TEST("addr-multiple-sata-disks"); DO_TEST("addr-more-than-32-sata-disks"); + DO_TEST("addr-single-virtio-disk"); + DO_TEST("addr-multiple-virtio-disks"); /* The same without 32 devs per controller support */ driver.bhyvecaps ^= BHYVE_CAP_AHCI32SLOT; diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-addr-multiple-virtio-disks.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-addr-multiple-virtio-disks.xml new file mode 100644 index 0000000000000000000000000000000000000000..542bff121c7591fbd9c53309f8910c9f2b1df444 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-addr-multiple-virtio-disks.xml @@ -0,0 +1,42 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-addr-single-virtio-disk.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-addr-single-virtio-disk.xml new file mode 100644 index 0000000000000000000000000000000000000000..d7abb5abcd98fc42d19ca9e54576a3ca2d610e5d --- /dev/null +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-addr-single-virtio-disk.xml @@ -0,0 +1,30 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + + + + +
+ + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index 004afda14e70d37adf24d2421edba029870fb61f..ba9af29960e7298890080d5f24ce31cbf0e18cf2 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -109,6 +109,8 @@ mymain(void) DO_TEST_DIFFERENT("addr-single-sata-disk"); DO_TEST_DIFFERENT("addr-multiple-sata-disks"); DO_TEST_DIFFERENT("addr-more-than-32-sata-disks"); + DO_TEST_DIFFERENT("addr-single-virtio-disk"); + DO_TEST_DIFFERENT("addr-multiple-virtio-disks"); /* The same without 32 devs per controller support */ driver.bhyvecaps ^= BHYVE_CAP_AHCI32SLOT;