pSeries guests will soon need the new information; luckily,
we can figure it out automatically most of the time, so
users won't have to worry about it.
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
---
src/qemu/qemu_domain_address.c | 88 +++++++++++++++++++++-
.../qemuargv2xmldata/qemuargv2xml-pseries-disk.xml | 5 +-
.../qemuargv2xml-pseries-nvram.xml | 5 +-
.../qemuxml2xmlout-panic-pseries.xml | 5 +-
.../qemuxml2xmlout-ppc64-usb-controller-legacy.xml | 5 +-
.../qemuxml2xmlout-ppc64-usb-controller.xml | 5 +-
.../qemuxml2xmlout-pseries-nvram.xml | 5 +-
.../qemuxml2xmlout-pseries-panic-missing.xml | 5 +-
.../qemuxml2xmlout-pseries-panic-no-address.xml | 5 +-
9 files changed, 118 insertions(+), 10 deletions(-)
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index b5b863f..960ea04 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -1861,6 +1861,7 @@ qemuDomainSupportsPCI(virDomainDefPtr def,
static void
qemuDomainPCIControllerSetDefaultModelName(virDomainControllerDefPtr cont,
+ virDomainDefPtr def,
virQEMUCapsPtr qemuCaps)
{
int *modelName = &cont->opts.pciopts.modelName;
@@ -1897,6 +1898,9 @@ qemuDomainPCIControllerSetDefaultModelName(virDomainControllerDefPtr cont,
*modelName = VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PXB_PCIE;
break;
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
+ if (qemuDomainIsPSeries(def))
+ *modelName = VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_SPAPR_PCI_HOST_BRIDGE;
+ break;
case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
break;
@@ -1904,6 +1908,63 @@ qemuDomainPCIControllerSetDefaultModelName(virDomainControllerDefPtr cont,
}
+/**
+ * qemuDomainAddressFindNewTargetIndex:
+ * @def: domain definition
+ *
+ * Find a target index that can be used for a PCI controller.
+ *
+ * Returns: an unused target index, or -1 if all available target
+ * indexes are already taken.
+ */
+static int
+qemuDomainAddressFindNewTargetIndex(virDomainDefPtr def)
+{
+ int idx;
+ int ret = -1;
+
+ /* Try all indexes between 1 and 31 - QEMU only supports 32
+ * PHBs, and 0 is reserved for the default, implicit one */
+ for (idx = 1; idx <= 31; idx++) {
+ bool found = false;
+ size_t i;
+
+ for (i = 0; i < def->ncontrollers; i++) {
+ virDomainControllerDefPtr cont = def->controllers[i];
+ virDomainPCIControllerOptsPtr opts;
+
+ /* We only care about pci-root controllers */
+ if (cont->type != VIR_DOMAIN_CONTROLLER_TYPE_PCI ||
+ cont->model != VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) {
+ continue;
+ }
+
+ opts = &cont->opts.pciopts;
+
+ /* More specifically, we only care about PHBs */
+ if (opts->modelName != VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_SPAPR_PCI_HOST_BRIDGE)
+ continue;
+
+ /* Stop looking as soon as we find a PHB that's
+ * already using this specific target index */
+ if (opts->idx == idx) {
+ found = true;
+ break;
+ }
+ }
+
+ /* If no existing PCI controller uses this index, great,
+ * it means it's free and we can return it to the caller */
+ if (!found) {
+ ret = idx;
+ break;
+ }
+ }
+
+ return ret;
+}
+
+
static int
qemuDomainAddressFindNewBusNr(virDomainDefPtr def)
{
@@ -2164,7 +2225,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
* device in qemu) for any controller that doesn't yet
* have it set.
*/
- qemuDomainPCIControllerSetDefaultModelName(cont, qemuCaps);
+ qemuDomainPCIControllerSetDefaultModelName(cont, def, qemuCaps);
/* set defaults for any other auto-generated config
* options for this controller that haven't been
@@ -2201,9 +2262,32 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
goto cleanup;
}
break;
+ case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
+ if (!qemuDomainIsPSeries(def))
+ break;
+ if (options->idx == -1) {
+ if (cont->idx == 0) {
+ /* The pci-root controller with controller index 0
+ * must always be assigned target index 0, because
+ * it represents the implicit PHB which is treated
+ * differently than all other PHBs */
+ options->idx = 0;
+ } else {
+ /* For all other PHBs the target index doesn't need
+ * to match the controller index or have any
+ * particular value, really */
+ options->idx = qemuDomainAddressFindNewTargetIndex(def);
+ }
+ }
+ if (options->idx == -1) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("No usable target index found for %d"),
+ addr->bus);
+ goto cleanup;
+ }
+ break;
case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE:
case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_UPSTREAM_PORT:
- case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
break;
diff --git a/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml b/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
index 1bad8ee..601d0f7 100644
--- a/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
+++ b/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
@@ -30,7 +30,10 @@
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
+ <controller type='pci' index='0' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='0'/>
+ </controller>
<controller type='scsi' index='0'>
<address type='spapr-vio' reg='0x2000'/>
</controller>
diff --git a/tests/qemuargv2xmldata/qemuargv2xml-pseries-nvram.xml b/tests/qemuargv2xmldata/qemuargv2xml-pseries-nvram.xml
index 7e9f864..7787847 100644
--- a/tests/qemuargv2xmldata/qemuargv2xml-pseries-nvram.xml
+++ b/tests/qemuargv2xmldata/qemuargv2xml-pseries-nvram.xml
@@ -17,7 +17,10 @@
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
+ <controller type='pci' index='0' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='0'/>
+ </controller>
<memballoon model='none'/>
<nvram>
<address type='spapr-vio' reg='0x4000'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
index 1ed11ce..7fb49fe 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
@@ -17,7 +17,10 @@
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
+ <controller type='pci' index='0' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='0'/>
+ </controller>
<serial type='pty'>
<target port='0'/>
<address type='spapr-vio' reg='0x30000000'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller-legacy.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller-legacy.xml
index b7bde24..673b81d 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller-legacy.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller-legacy.xml
@@ -22,7 +22,10 @@
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
+ <controller type='pci' index='0' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='0'/>
+ </controller>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</memballoon>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller.xml
index 82aaaca..68995a9 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller.xml
@@ -22,7 +22,10 @@
<controller type='usb' index='0' model='pci-ohci'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
+ <controller type='pci' index='0' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='0'/>
+ </controller>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</memballoon>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-nvram.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-nvram.xml
index 713f31c..f89b23b 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-nvram.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-nvram.xml
@@ -17,7 +17,10 @@
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
+ <controller type='pci' index='0' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='0'/>
+ </controller>
<memballoon model='none'/>
<nvram>
<address type='spapr-vio' reg='0x4000'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
index 1ed11ce..7fb49fe 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
@@ -17,7 +17,10 @@
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
+ <controller type='pci' index='0' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='0'/>
+ </controller>
<serial type='pty'>
<target port='0'/>
<address type='spapr-vio' reg='0x30000000'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
index 1ed11ce..7fb49fe 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
@@ -17,7 +17,10 @@
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
+ <controller type='pci' index='0' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='0'/>
+ </controller>
<serial type='pty'>
<target port='0'/>
<address type='spapr-vio' reg='0x30000000'/>
--
2.7.5
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 06/23/2017 11:03 AM, Andrea Bolognani wrote:
> pSeries guests will soon need the new information; luckily,
> we can figure it out automatically most of the time, so
> users won't have to worry about it.
>
> Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Laine Stump <laine@laine.org>
(assuming name change from idx to targetIdx in all appropriate places)
> ---
> src/qemu/qemu_domain_address.c | 88 +++++++++++++++++++++-
> .../qemuargv2xmldata/qemuargv2xml-pseries-disk.xml | 5 +-
> .../qemuargv2xml-pseries-nvram.xml | 5 +-
> .../qemuxml2xmlout-panic-pseries.xml | 5 +-
> .../qemuxml2xmlout-ppc64-usb-controller-legacy.xml | 5 +-
> .../qemuxml2xmlout-ppc64-usb-controller.xml | 5 +-
> .../qemuxml2xmlout-pseries-nvram.xml | 5 +-
> .../qemuxml2xmlout-pseries-panic-missing.xml | 5 +-
> .../qemuxml2xmlout-pseries-panic-no-address.xml | 5 +-
> 9 files changed, 118 insertions(+), 10 deletions(-)
>
> diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
> index b5b863f..960ea04 100644
> --- a/src/qemu/qemu_domain_address.c
> +++ b/src/qemu/qemu_domain_address.c
> @@ -1861,6 +1861,7 @@ qemuDomainSupportsPCI(virDomainDefPtr def,
>
> static void
> qemuDomainPCIControllerSetDefaultModelName(virDomainControllerDefPtr cont,
> + virDomainDefPtr def,
> virQEMUCapsPtr qemuCaps)
> {
> int *modelName = &cont->opts.pciopts.modelName;
> @@ -1897,6 +1898,9 @@ qemuDomainPCIControllerSetDefaultModelName(virDomainControllerDefPtr cont,
> *modelName = VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PXB_PCIE;
> break;
> case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
> + if (qemuDomainIsPSeries(def))
> + *modelName = VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_SPAPR_PCI_HOST_BRIDGE;
> + break;
> case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
> case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
> break;
> @@ -1904,6 +1908,63 @@ qemuDomainPCIControllerSetDefaultModelName(virDomainControllerDefPtr cont,
> }
>
>
> +/**
> + * qemuDomainAddressFindNewTargetIndex:
> + * @def: domain definition
> + *
> + * Find a target index that can be used for a PCI controller.
> + *
> + * Returns: an unused target index, or -1 if all available target
> + * indexes are already taken.
> + */
> +static int
> +qemuDomainAddressFindNewTargetIndex(virDomainDefPtr def)
> +{
> + int idx;
> + int ret = -1;
> +
> + /* Try all indexes between 1 and 31 - QEMU only supports 32
> + * PHBs, and 0 is reserved for the default, implicit one */
> + for (idx = 1; idx <= 31; idx++) {
> + bool found = false;
> + size_t i;
> +
> + for (i = 0; i < def->ncontrollers; i++) {
> + virDomainControllerDefPtr cont = def->controllers[i];
> + virDomainPCIControllerOptsPtr opts;
> +
> + /* We only care about pci-root controllers */
> + if (cont->type != VIR_DOMAIN_CONTROLLER_TYPE_PCI ||
> + cont->model != VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) {
> + continue;
> + }
> +
> + opts = &cont->opts.pciopts;
> +
> + /* More specifically, we only care about PHBs */
> + if (opts->modelName != VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_SPAPR_PCI_HOST_BRIDGE)
> + continue;
> +
> + /* Stop looking as soon as we find a PHB that's
> + * already using this specific target index */
> + if (opts->idx == idx) {
> + found = true;
> + break;
> + }
> + }
> +
> + /* If no existing PCI controller uses this index, great,
> + * it means it's free and we can return it to the caller */
> + if (!found) {
> + ret = idx;
> + break;
> + }
> + }
> +
> + return ret;
> +}
> +
> +
> static int
> qemuDomainAddressFindNewBusNr(virDomainDefPtr def)
> {
> @@ -2164,7 +2225,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
> * device in qemu) for any controller that doesn't yet
> * have it set.
> */
> - qemuDomainPCIControllerSetDefaultModelName(cont, qemuCaps);
> + qemuDomainPCIControllerSetDefaultModelName(cont, def, qemuCaps);
>
> /* set defaults for any other auto-generated config
> * options for this controller that haven't been
> @@ -2201,9 +2262,32 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
> goto cleanup;
> }
> break;
> + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
> + if (!qemuDomainIsPSeries(def))
> + break;
> + if (options->idx == -1) {
> + if (cont->idx == 0) {
> + /* The pci-root controller with controller index 0
> + * must always be assigned target index 0, because
> + * it represents the implicit PHB which is treated
> + * differently than all other PHBs */
> + options->idx = 0;
> + } else {
> + /* For all other PHBs the target index doesn't need
> + * to match the controller index or have any
> + * particular value, really */
> + options->idx = qemuDomainAddressFindNewTargetIndex(def);
> + }
> + }
> + if (options->idx == -1) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("No usable target index found for %d"),
> + addr->bus);
> + goto cleanup;
> + }
> + break;
> case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE:
> case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_UPSTREAM_PORT:
> - case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
> case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
> case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
> break;
> diff --git a/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml b/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
> index 1bad8ee..601d0f7 100644
> --- a/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
> +++ b/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
> @@ -30,7 +30,10 @@
> <controller type='usb' index='0'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> </controller>
> - <controller type='pci' index='0' model='pci-root'/>
> + <controller type='pci' index='0' model='pci-root'>
> + <model name='spapr-pci-host-bridge'/>
> + <target index='0'/>
> + </controller>
> <controller type='scsi' index='0'>
> <address type='spapr-vio' reg='0x2000'/>
> </controller>
> diff --git a/tests/qemuargv2xmldata/qemuargv2xml-pseries-nvram.xml b/tests/qemuargv2xmldata/qemuargv2xml-pseries-nvram.xml
> index 7e9f864..7787847 100644
> --- a/tests/qemuargv2xmldata/qemuargv2xml-pseries-nvram.xml
> +++ b/tests/qemuargv2xmldata/qemuargv2xml-pseries-nvram.xml
> @@ -17,7 +17,10 @@
> <controller type='usb' index='0'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> </controller>
> - <controller type='pci' index='0' model='pci-root'/>
> + <controller type='pci' index='0' model='pci-root'>
> + <model name='spapr-pci-host-bridge'/>
> + <target index='0'/>
> + </controller>
> <memballoon model='none'/>
> <nvram>
> <address type='spapr-vio' reg='0x4000'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
> index 1ed11ce..7fb49fe 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
> @@ -17,7 +17,10 @@
> <controller type='usb' index='0'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> </controller>
> - <controller type='pci' index='0' model='pci-root'/>
> + <controller type='pci' index='0' model='pci-root'>
> + <model name='spapr-pci-host-bridge'/>
> + <target index='0'/>
> + </controller>
> <serial type='pty'>
> <target port='0'/>
> <address type='spapr-vio' reg='0x30000000'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller-legacy.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller-legacy.xml
> index b7bde24..673b81d 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller-legacy.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller-legacy.xml
> @@ -22,7 +22,10 @@
> <controller type='usb' index='0'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> </controller>
> - <controller type='pci' index='0' model='pci-root'/>
> + <controller type='pci' index='0' model='pci-root'>
> + <model name='spapr-pci-host-bridge'/>
> + <target index='0'/>
> + </controller>
> <memballoon model='virtio'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
> </memballoon>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller.xml
> index 82aaaca..68995a9 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-ppc64-usb-controller.xml
> @@ -22,7 +22,10 @@
> <controller type='usb' index='0' model='pci-ohci'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> </controller>
> - <controller type='pci' index='0' model='pci-root'/>
> + <controller type='pci' index='0' model='pci-root'>
> + <model name='spapr-pci-host-bridge'/>
> + <target index='0'/>
> + </controller>
> <memballoon model='virtio'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
> </memballoon>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-nvram.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-nvram.xml
> index 713f31c..f89b23b 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-nvram.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-nvram.xml
> @@ -17,7 +17,10 @@
> <controller type='usb' index='0'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> </controller>
> - <controller type='pci' index='0' model='pci-root'/>
> + <controller type='pci' index='0' model='pci-root'>
> + <model name='spapr-pci-host-bridge'/>
> + <target index='0'/>
> + </controller>
> <memballoon model='none'/>
> <nvram>
> <address type='spapr-vio' reg='0x4000'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
> index 1ed11ce..7fb49fe 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
> @@ -17,7 +17,10 @@
> <controller type='usb' index='0'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> </controller>
> - <controller type='pci' index='0' model='pci-root'/>
> + <controller type='pci' index='0' model='pci-root'>
> + <model name='spapr-pci-host-bridge'/>
> + <target index='0'/>
> + </controller>
> <serial type='pty'>
> <target port='0'/>
> <address type='spapr-vio' reg='0x30000000'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
> index 1ed11ce..7fb49fe 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
> @@ -17,7 +17,10 @@
> <controller type='usb' index='0'>
> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> </controller>
> - <controller type='pci' index='0' model='pci-root'/>
> + <controller type='pci' index='0' model='pci-root'>
> + <model name='spapr-pci-host-bridge'/>
> + <target index='0'/>
> + </controller>
> <serial type='pty'>
> <target port='0'/>
> <address type='spapr-vio' reg='0x30000000'/>
>
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Sun, 2017-06-25 at 16:00 -0400, Laine Stump wrote: > Reviewed-by: Laine Stump <laine@laine.org> > > (assuming name change from idx to targetIdx in all appropriate places) I used 'targetIndex' instead, hopefully that doesn't invalidate the R-b :) -- Andrea Bolognani / Red Hat / Virtualization -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
>
>
> +/**
> + * qemuDomainAddressFindNewTargetIndex:
> + * @def: domain definition
> + *
> + * Find a target index that can be used for a PCI controller.
> + *
> + * Returns: an unused target index, or -1 if all available target
> + * indexes are already taken.
> + */
> +static int
> +qemuDomainAddressFindNewTargetIndex(virDomainDefPtr def)
>
May be rename to qemuDomainAddressFindNewPCIRootTargetIndex ?
+{
> + int idx;
> + int ret = -1;
> +
> + /* Try all indexes between 1 and 31 - QEMU only supports 32
> + * PHBs, and 0 is reserved for the default, implicit one */
> + for (idx = 1; idx <= 31; idx++) {
> + bool found = false;
> + size_t i;
>
>
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Mon, 2017-06-26 at 14:19 +0530, Shivaprasad bhat wrote: > > > > +/** > > + * qemuDomainAddressFindNewTargetIndex: > > + * @def: domain definition > > + * > > + * Find a target index that can be used for a PCI controller. > > + * > > + * Returns: an unused target index, or -1 if all available target > > + * indexes are already taken. > > + */ > > +static int > > +qemuDomainAddressFindNewTargetIndex(virDomainDefPtr def) > > May be rename to qemuDomainAddressFindNewPCIRootTargetIndex ? The name's pretty long as it is, but you're right that the function is only called for PCI Root controllers and embeds knowledge about spapr-pci-host-bridge. I'll think about it. -- Andrea Bolognani / Red Hat / Virtualization -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2026 Red Hat, Inc.