Add support for xl.cfg(5) pci device 'seize' option in
domXML-to-xenconfig converter. And a test for it.
It is functional equivalent of 'managed' attribute of a hostdev, so map
it directly.
Signed-off-by: Marek Marczykowski-Górecki <marmarek(a)invisiblethingslab.com>
---
Changes in v2:
- new patch
---
src/libxl/xen_common.c | 19 +++++++++++++------
tests/xlconfigdata/test-fullvirt-pci.cfg | 2 +-
tests/xlconfigdata/test-fullvirt-pci.xml | 2 +-
3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
index 050b2a0..8ae4aaa 100644
--- a/src/libxl/xen_common.c
+++ b/src/libxl/xen_common.c
@@ -382,6 +382,7 @@ xenParsePCI(char *entry)
int slotID;
int funcID;
virTristateBool permissivebool = VIR_TRISTATE_BOOL_ABSENT;
+ virTristateBool seizebool = VIR_TRISTATE_BOOL_ABSENT;
domain[0] = bus[0] = slot[0] = func[0] = '\0';
@@ -432,18 +433,23 @@ xenParsePCI(char *entry)
data++;
if (!(nextkey = strchrnul(key, ',')))
return NULL;
- if (STRPREFIX(key, "permissive=")) {
+ if (STRPREFIX(key, "permissive=") || STRPREFIX(key,
"seize=")) {
char valuestr[5];
int valueint;
+ virTristateBool valuebool;
if (virStrncpy(valuestr, data, (nextkey - data), sizeof(valuestr)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Permissive %s too big for destination"), data);
+ _("%s %s too big for destination"), key, data);
return NULL;
}
/* xl.cfg(5) specifies false as 0 and true as any other numeric value */
if (virStrToLong_i(valuestr, NULL, 10, &valueint) < 0)
return NULL;
- permissivebool = valueint ? VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO;
+ valuebool = valueint ? VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO;
+ if (STRPREFIX(key, "permissive="))
+ permissivebool = valuebool;
+ else if (STRPREFIX(key, "seize="))
+ seizebool = valuebool;
}
}
@@ -459,7 +465,7 @@ xenParsePCI(char *entry)
if (!(hostdev = virDomainHostdevDefNew()))
return NULL;
- hostdev->managed = false;
+ hostdev->managed = seizebool == VIR_TRISTATE_BOOL_YES;
hostdev->permissive = permissivebool;
hostdev->source.subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI;
hostdev->source.subsys.u.pci.addr.domain = domainID;
@@ -1898,12 +1904,13 @@ xenFormatPCI(virConfPtr conf, virDomainDefPtr def)
break;
}
- buf = g_strdup_printf("%04x:%02x:%02x.%x%s",
+ buf = g_strdup_printf("%04x:%02x:%02x.%x%s%s",
def->hostdevs[i]->source.subsys.u.pci.addr.domain,
def->hostdevs[i]->source.subsys.u.pci.addr.bus,
def->hostdevs[i]->source.subsys.u.pci.addr.slot,
def->hostdevs[i]->source.subsys.u.pci.addr.function,
- permissive_str);
+ permissive_str,
+ def->hostdevs[i]->managed ? ",seize=1"
: "");
if (VIR_ALLOC(val) < 0) {
VIR_FREE(buf);
diff --git a/tests/xlconfigdata/test-fullvirt-pci.cfg
b/tests/xlconfigdata/test-fullvirt-pci.cfg
index 5a3f572..dcf2acd 100644
--- a/tests/xlconfigdata/test-fullvirt-pci.cfg
+++ b/tests/xlconfigdata/test-fullvirt-pci.cfg
@@ -17,7 +17,7 @@ sdl = 0
vnc = 1
vncunused = 1
vnclisten = "127.0.0.1"
-pci = [ "0000:01:1a.1", "0000:02:00.0,permissive=1" ]
+pci = [ "0000:01:1a.1", "0000:02:00.0,permissive=1,seize=1" ]
parallel = "none"
serial = "none"
builder = "hvm"
diff --git a/tests/xlconfigdata/test-fullvirt-pci.xml
b/tests/xlconfigdata/test-fullvirt-pci.xml
index dec390a..30fa1f5 100644
--- a/tests/xlconfigdata/test-fullvirt-pci.xml
+++ b/tests/xlconfigdata/test-fullvirt-pci.xml
@@ -42,7 +42,7 @@
<address domain='0x0000' bus='0x01' slot='0x1a'
function='0x1'/>
</source>
</hostdev>
- <hostdev mode='subsystem' type='pci' managed='no'
permissive='yes'>
+ <hostdev mode='subsystem' type='pci' managed='yes'
permissive='yes'>
<driver name='xen'/>
<source>
<address domain='0x0000' bus='0x02' slot='0x00'
function='0x0'/>
--
git-series 0.9.1