bhyve: support 'isa' controller for LPC

Support modeling of the 'isa' controller for bhyve. User can manually
define any PCI slot for the 'isa' controller, including PCI slot 1,
but other devices are not allowed to use this address.

When domain configuration requires the 'isa' controller to be present,
automatically add it on domain post-parse stage.

Now, as this controller is always available when needed, it's not
necessary to implicitly add it to the bhyve command line, so remove
bhyveBuildLPCArgStr().

Also, make bhyveDomainDefNeedsISAController() static as it's no longer
used outside of bhyve_domain.c.

As more than one ISA controller is not supported by bhyve,
and multiple controllers with the same index are forbidden,
so forbid ISA controllers with non-zero index for bhyve.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Roman Bogorodskiy 2019-02-17 17:04:00 +04:00
parent f787df9947
commit 16a2882350
39 changed files with 378 additions and 37 deletions

View File

@ -329,7 +329,8 @@ bhyveBuildControllerArgStr(const virDomainDef *def,
virDomainControllerDefPtr controller, virDomainControllerDefPtr controller,
bhyveConnPtr driver, bhyveConnPtr driver,
virCommandPtr cmd, virCommandPtr cmd,
unsigned *nusbcontrollers) unsigned *nusbcontrollers,
unsigned *nisacontrollers)
{ {
switch (controller->type) { switch (controller->type) {
case VIR_DOMAIN_CONTROLLER_TYPE_PCI: case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
@ -354,18 +355,20 @@ bhyveBuildControllerArgStr(const virDomainDef *def,
if (bhyveBuildUSBControllerArgStr(def, controller, cmd) < 0) if (bhyveBuildUSBControllerArgStr(def, controller, cmd) < 0)
return -1; return -1;
break; break;
case VIR_DOMAIN_CONTROLLER_TYPE_ISA:
if (++*nisacontrollers > 1) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
"%s", _("only single ISA controller is supported"));
return -1;
}
virCommandAddArg(cmd, "-s");
virCommandAddArgFormat(cmd, "%d:0,lpc",
controller->info.addr.pci.slot);
break;
} }
return 0; return 0;
} }
static int
bhyveBuildLPCArgStr(const virDomainDef *def G_GNUC_UNUSED,
virCommandPtr cmd)
{
virCommandAddArgList(cmd, "-s", "1,lpc", NULL);
return 0;
}
static int static int
bhyveBuildGraphicsArgStr(const virDomainDef *def, bhyveBuildGraphicsArgStr(const virDomainDef *def,
virDomainGraphicsDefPtr graphics, virDomainGraphicsDefPtr graphics,
@ -545,6 +548,7 @@ virBhyveProcessBuildBhyveCmd(bhyveConnPtr driver, virDomainDefPtr def,
virCommandPtr cmd = virCommandNew(BHYVE); virCommandPtr cmd = virCommandNew(BHYVE);
size_t i; size_t i;
unsigned nusbcontrollers = 0; unsigned nusbcontrollers = 0;
unsigned nisacontrollers = 0;
unsigned nvcpus = virDomainDefGetVcpus(def); unsigned nvcpus = virDomainDefGetVcpus(def);
/* CPUs */ /* CPUs */
@ -650,7 +654,7 @@ virBhyveProcessBuildBhyveCmd(bhyveConnPtr driver, virDomainDefPtr def,
/* Devices */ /* Devices */
for (i = 0; i < def->ncontrollers; i++) { for (i = 0; i < def->ncontrollers; i++) {
if (bhyveBuildControllerArgStr(def, def->controllers[i], driver, cmd, if (bhyveBuildControllerArgStr(def, def->controllers[i], driver, cmd,
&nusbcontrollers) < 0) &nusbcontrollers, &nisacontrollers) < 0)
goto error; goto error;
} }
for (i = 0; i < def->nnets; i++) { for (i = 0; i < def->nnets; i++) {
@ -681,9 +685,6 @@ virBhyveProcessBuildBhyveCmd(bhyveConnPtr driver, virDomainDefPtr def,
goto error; goto error;
} }
if (bhyveDomainDefNeedsISAController(def))
bhyveBuildLPCArgStr(def, cmd);
if (bhyveBuildConsoleArgStr(def, cmd) < 0) if (bhyveBuildConsoleArgStr(def, cmd) < 0)
goto error; goto error;

View File

@ -46,10 +46,16 @@ bhyveCollectPCIAddress(virDomainDefPtr def G_GNUC_UNUSED,
if (addr->slot == 0) { if (addr->slot == 0) {
return 0; return 0;
} else if (addr->slot == 1) { } else if (addr->slot == 1) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", if (!(device->type == VIR_DOMAIN_DEVICE_CONTROLLER &&
_("PCI bus 0 slot 1 is reserved for the implicit " device->data.controller->type == VIR_DOMAIN_CONTROLLER_TYPE_ISA)) {
"LPC PCI-ISA bridge")); virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
return -1; _("PCI bus 0 slot 1 is reserved for the implicit "
"LPC PCI-ISA bridge"));
return -1;
} else {
/* We reserve slot 1 for LPC in bhyveAssignDevicePCISlots(), so exit early */
return 0;
}
} }
} }
@ -101,6 +107,15 @@ bhyveAssignDevicePCISlots(virDomainDefPtr def,
return -1; return -1;
} }
for (i = 0; i < def->ncontrollers; i++) {
if ((def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_ISA) &&
virDeviceInfoPCIAddressIsWanted(&def->controllers[i]->info)) {
def->controllers[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
def->controllers[i]->info.addr.pci = lpc_addr;
break;
}
}
for (i = 0; i < def->ncontrollers; i++) { for (i = 0; i < def->ncontrollers; i++) {
if ((def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) || if ((def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) ||
(def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_SATA) || (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_SATA) ||

View File

@ -59,13 +59,13 @@ virDomainXMLPrivateDataCallbacks virBhyveDriverPrivateDataCallbacks = {
.free = bhyveDomainObjPrivateFree, .free = bhyveDomainObjPrivateFree,
}; };
bool static bool
bhyveDomainDefNeedsISAController(virDomainDefPtr def) bhyveDomainDefNeedsISAController(virDomainDefPtr def)
{ {
if (def->os.bootloader == NULL && def->os.loader) if (def->os.bootloader == NULL && def->os.loader)
return true; return true;
if (def->nserials) if (def->nserials || def->nconsoles)
return true; return true;
if (def->ngraphics && def->nvideos) if (def->ngraphics && def->nvideos)
@ -95,6 +95,11 @@ bhyveDomainDefPostParse(virDomainDefPtr def,
VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) < 0) VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) < 0)
return -1; return -1;
if (bhyveDomainDefNeedsISAController(def))
if (virDomainDefMaybeAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_ISA, 0,
VIR_DOMAIN_CONTROLLER_MODEL_ISA_DEFAULT) < 0)
return -1;
return 0; return 0;
} }
@ -191,10 +196,26 @@ virBhyveDriverCreateXMLConf(bhyveConnPtr driver)
NULL, NULL); NULL, NULL);
} }
static int
bhyveDomainDeviceDefValidate(const virDomainDeviceDef *dev,
const virDomainDef *def G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
if (dev->type == VIR_DOMAIN_DEVICE_CONTROLLER &&
dev->data.controller->type == VIR_DOMAIN_CONTROLLER_TYPE_ISA &&
dev->data.controller->idx != 0) {
return -1;
}
return 0;
}
virDomainDefParserConfig virBhyveDriverDomainDefParserConfig = { virDomainDefParserConfig virBhyveDriverDomainDefParserConfig = {
.devicesPostParseCallback = bhyveDomainDeviceDefPostParse, .devicesPostParseCallback = bhyveDomainDeviceDefPostParse,
.domainPostParseCallback = bhyveDomainDefPostParse, .domainPostParseCallback = bhyveDomainDefPostParse,
.assignAddressesCallback = bhyveDomainDefAssignAddresses, .assignAddressesCallback = bhyveDomainDefAssignAddresses,
.deviceValidateCallback = bhyveDomainDeviceDefValidate,
}; };
static void static void

View File

@ -39,5 +39,3 @@ virDomainXMLOptionPtr virBhyveDriverCreateXMLConf(bhyveConnPtr);
extern virDomainXMLPrivateDataCallbacks virBhyveDriverPrivateDataCallbacks; extern virDomainXMLPrivateDataCallbacks virBhyveDriverPrivateDataCallbacks;
extern virDomainDefParserConfig virBhyveDriverDomainDefParserConfig; extern virDomainDefParserConfig virBhyveDriverDomainDefParserConfig;
extern virXMLNamespace virBhyveDriverDomainXMLNamespace; extern virXMLNamespace virBhyveDriverDomainXMLNamespace;
bool bhyveDomainDefNeedsISAController(virDomainDefPtr def);

View File

@ -0,0 +1,10 @@
/usr/sbin/bhyve \
-c 1 \
-m 214 \
-u \
-H \
-P \
-s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:b9:94:02 bhyve

View File

@ -0,0 +1,3 @@
/usr/sbin/bhyveload \
-m 214 \
-d /tmp/freebsd.img bhyve

View File

@ -0,0 +1,26 @@
<domain type='bhyve'>
<name>bhyve</name>
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
<memory>219136</memory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
</os>
<devices>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<disk type='file'>
<driver name='file' type='raw'/>
<source file='/tmp/freebsd.img'/>
<target dev='hda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:b9:94:02'/>
<model type='virtio'/>
<source bridge="virbr0"/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
</devices>
</domain>

View File

@ -0,0 +1,10 @@
/usr/sbin/bhyve \
-c 1 \
-m 214 \
-u \
-H \
-P \
-s 0:0,hostbridge \
-s 31:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:b9:94:02 bhyve

View File

@ -0,0 +1,3 @@
/usr/sbin/bhyveload \
-m 214 \
-d /tmp/freebsd.img bhyve

View File

@ -0,0 +1,26 @@
<domain type='bhyve'>
<name>bhyve</name>
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
<memory>219136</memory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
</os>
<devices>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x0'/>
</controller>
<disk type='file'>
<driver name='file' type='raw'/>
<source file='/tmp/freebsd.img'/>
<target dev='hda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:b9:94:02'/>
<model type='virtio'/>
<source bridge="virbr0"/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
</devices>
</domain>

View File

@ -0,0 +1,23 @@
<domain type='bhyve'>
<name>bhyve</name>
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
<memory>219136</memory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
</os>
<devices>
<disk type='file'>
<driver name='file' type='raw'/>
<source file='/tmp/freebsd.img'/>
<target dev='hda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:b9:94:02'/>
<model type='virtio'/>
<source bridge="virbr0"/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</interface>
</devices>
</domain>

View File

@ -5,7 +5,7 @@
-H \ -H \
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:b1:42:eb \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:b1:42:eb \
-s 1,lpc \
-l com1,/dev/nmdm0A bhyve -l com1,/dev/nmdm0A bhyve

View File

@ -0,0 +1,10 @@
/usr/sbin/bhyve \
-c 1 \
-m 214 \
-u \
-H \
-P \
-s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:b9:94:02 bhyve

View File

@ -0,0 +1,3 @@
/usr/sbin/bhyveload \
-m 214 \
-d /tmp/freebsd.img bhyve

View File

@ -0,0 +1,24 @@
<domain type='bhyve'>
<name>bhyve</name>
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
<memory>219136</memory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
</os>
<devices>
<controller type='isa' index='0'/>
<disk type='file'>
<driver name='file' type='raw'/>
<source file='/tmp/freebsd.img'/>
<target dev='hda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:b9:94:02'/>
<model type='virtio'/>
<source bridge="virbr0"/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
</devices>
</domain>

View File

@ -0,0 +1,25 @@
<domain type='bhyve'>
<name>bhyve</name>
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
<memory>219136</memory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
</os>
<devices>
<controller type='isa' index='1'/>
<controller type='isa' index='2'/>
<disk type='file'>
<driver name='file' type='raw'/>
<source file='/tmp/freebsd.img'/>
<target dev='hda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:b9:94:02'/>
<model type='virtio'/>
<source bridge="virbr0"/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
</devices>
</domain>

View File

@ -5,7 +5,7 @@
-H \ -H \
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,ahci-hd,/tmp/freebsd.img \ -s 2:0,ahci-hd,/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:a7:cd:5b \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:a7:cd:5b \
-s 1,lpc \
-l com1,/dev/nmdm0A bhyve -l com1,/dev/nmdm0A bhyve

View File

@ -5,7 +5,7 @@
-H \ -H \
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:f0:72:11 \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:f0:72:11 \
-s 1,lpc \
-l com1,/dev/nmdm0A bhyve -l com1,/dev/nmdm0A bhyve

View File

@ -5,7 +5,7 @@
-H \ -H \
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:4f:f3:5b \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:4f:f3:5b \
-s 1,lpc \
-l com1,/dev/nmdm0A bhyve -l com1,/dev/nmdm0A bhyve

View File

@ -6,6 +6,6 @@
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-l bootrom,/path/to/test.fd \ -l bootrom,/path/to/test.fd \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 bhyve
-s 1,lpc bhyve

View File

@ -6,7 +6,7 @@
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-l bootrom,/path/to/test.fd \ -l bootrom,/path/to/test.fd \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \
-s 4:0,fbuf,tcp=127.0.0.1:5900 \ -s 4:0,fbuf,tcp=127.0.0.1:5900 bhyve
-s 1,lpc bhyve

View File

@ -6,7 +6,7 @@
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-l bootrom,/path/to/test.fd \ -l bootrom,/path/to/test.fd \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \
-s 4:0,fbuf,tcp=127.0.0.1:5904,vga=io \ -s 4:0,fbuf,tcp=127.0.0.1:5904,vga=io bhyve
-s 1,lpc bhyve

View File

@ -6,7 +6,7 @@
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-l bootrom,/path/to/test.fd \ -l bootrom,/path/to/test.fd \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \
-s 4:0,fbuf,tcp=127.0.0.1:5904,vga=off \ -s 4:0,fbuf,tcp=127.0.0.1:5904,vga=off bhyve
-s 1,lpc bhyve

View File

@ -6,7 +6,7 @@
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-l bootrom,/path/to/test.fd \ -l bootrom,/path/to/test.fd \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \
-s 4:0,fbuf,tcp=127.0.0.1:5904,vga=on \ -s 4:0,fbuf,tcp=127.0.0.1:5904,vga=on bhyve
-s 1,lpc bhyve

View File

@ -6,7 +6,7 @@
-P \ -P \
-s 0:0,hostbridge \ -s 0:0,hostbridge \
-l bootrom,/path/to/test.fd \ -l bootrom,/path/to/test.fd \
-s 1:0,lpc \
-s 2:0,ahci,hd:/tmp/freebsd.img \ -s 2:0,ahci,hd:/tmp/freebsd.img \
-s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \ -s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \
-s 4:0,fbuf,tcp=127.0.0.1:5904 \ -s 4:0,fbuf,tcp=127.0.0.1:5904 bhyve
-s 1,lpc bhyve

View File

@ -202,6 +202,8 @@ mymain(void)
DO_TEST("commandline"); DO_TEST("commandline");
DO_TEST("msrs"); DO_TEST("msrs");
DO_TEST("sound"); DO_TEST("sound");
DO_TEST("isa-controller");
DO_TEST_FAILURE("isa-multiple-controllers");
/* Address allocation tests */ /* Address allocation tests */
DO_TEST("addr-single-sata-disk"); DO_TEST("addr-single-sata-disk");
@ -209,6 +211,9 @@ mymain(void)
DO_TEST("addr-more-than-32-sata-disks"); DO_TEST("addr-more-than-32-sata-disks");
DO_TEST("addr-single-virtio-disk"); DO_TEST("addr-single-virtio-disk");
DO_TEST("addr-multiple-virtio-disks"); DO_TEST("addr-multiple-virtio-disks");
DO_TEST("addr-isa-controller-on-slot-1");
DO_TEST("addr-isa-controller-on-slot-31");
DO_TEST_FAILURE("addr-non-isa-controller-on-slot-1");
/* The same without 32 devs per controller support */ /* The same without 32 devs per controller support */
driver.bhyvecaps ^= BHYVE_CAP_AHCI32SLOT; driver.bhyvecaps ^= BHYVE_CAP_AHCI32SLOT;

View File

@ -0,0 +1,36 @@
<domain type='bhyve'>
<name>bhyve</name>
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
<memory unit='KiB'>219136</memory>
<currentMemory unit='KiB'>219136</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64'>hvm</type>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<disk type='file' device='disk'>
<driver name='file' type='raw'/>
<source file='/tmp/freebsd.img'/>
<target dev='hda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:b9:94:02'/>
<source bridge='virbr0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
</devices>
</domain>

View File

@ -0,0 +1,36 @@
<domain type='bhyve'>
<name>bhyve</name>
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
<memory unit='KiB'>219136</memory>
<currentMemory unit='KiB'>219136</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64'>hvm</type>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<disk type='file' device='disk'>
<driver name='file' type='raw'/>
<source file='/tmp/freebsd.img'/>
<target dev='hda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x0'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:b9:94:02'/>
<source bridge='virbr0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
</devices>
</domain>

View File

@ -20,6 +20,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -0,0 +1,36 @@
<domain type='bhyve'>
<name>bhyve</name>
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
<memory unit='KiB'>219136</memory>
<currentMemory unit='KiB'>219136</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64'>hvm</type>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<disk type='file' device='disk'>
<driver name='file' type='raw'/>
<source file='/tmp/freebsd.img'/>
<target dev='hda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:b9:94:02'/>
<source bridge='virbr0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
</devices>
</domain>

View File

@ -20,6 +20,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -20,6 +20,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -20,6 +20,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -21,6 +21,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -21,6 +21,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -21,6 +21,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -21,6 +21,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -21,6 +21,9 @@
<address type='drive' controller='0' bus='0' target='2' unit='0'/> <address type='drive' controller='0' bus='0' target='2' unit='0'/>
</disk> </disk>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<controller type='isa' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='sata' index='0'> <controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</controller> </controller>

View File

@ -109,6 +109,7 @@ mymain(void)
DO_TEST_DIFFERENT("commandline"); DO_TEST_DIFFERENT("commandline");
DO_TEST_DIFFERENT("msrs"); DO_TEST_DIFFERENT("msrs");
DO_TEST_DIFFERENT("sound"); DO_TEST_DIFFERENT("sound");
DO_TEST_DIFFERENT("isa-controller");
/* Address allocation tests */ /* Address allocation tests */
DO_TEST_DIFFERENT("addr-single-sata-disk"); DO_TEST_DIFFERENT("addr-single-sata-disk");
@ -116,6 +117,8 @@ mymain(void)
DO_TEST_DIFFERENT("addr-more-than-32-sata-disks"); DO_TEST_DIFFERENT("addr-more-than-32-sata-disks");
DO_TEST_DIFFERENT("addr-single-virtio-disk"); DO_TEST_DIFFERENT("addr-single-virtio-disk");
DO_TEST_DIFFERENT("addr-multiple-virtio-disks"); DO_TEST_DIFFERENT("addr-multiple-virtio-disks");
DO_TEST_DIFFERENT("addr-isa-controller-on-slot-1");
DO_TEST_DIFFERENT("addr-isa-controller-on-slot-31");
/* The same without 32 devs per controller support */ /* The same without 32 devs per controller support */
driver.bhyvecaps ^= BHYVE_CAP_AHCI32SLOT; driver.bhyvecaps ^= BHYVE_CAP_AHCI32SLOT;