From: George Dunlap <george.dunlap@eu.citrix.com>
To: xen-devel@lists.xen.org
Cc: George Dunlap <george.dunlap@eu.citrix.com>,
Ian Jackson <ian.jackson@citrix.com>,
Ian Campbell <ian.campbell@citrix.com>
Subject: [PATCH 2/2] xl: Add "seize" option to PCI devices
Date: Tue, 4 Mar 2014 13:38:19 +0000 [thread overview]
Message-ID: <1393940299-8221-2-git-send-email-george.dunlap@eu.citrix.com> (raw)
In-Reply-To: <1393940299-8221-1-git-send-email-george.dunlap@eu.citrix.com>
The "seize" option tells the toolstack to attempt to automatically
unbind devices and re-bind them to the pciback driver. This should
make creating VMs that habitually use pass-through (such as driver domain
VMs and gaming VMs) easier to use and manage.
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
---
CC: Ian Jackson <ian.jackson@citrix.com>
CC: Ian Campbell <ian.campbell@citrix.com>
---
docs/man/xl.cfg.pod.5 | 14 ++++++++++++++
tools/libxl/libxl_pci.c | 6 ++++++
tools/libxl/libxl_types.idl | 1 +
tools/libxl/libxlu_pci.c | 2 ++
tools/libxl/xl_cmdimpl.c | 5 +++++
5 files changed, 28 insertions(+)
diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index e15a49f..946b438 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -509,6 +509,15 @@ the PCI device regardless whether the guest uses INTx or MSI. Some
device drivers, such as NVIDIA's, detect an inconsistency and do not
function when this option is enabled. Therefore the default is false (0).
+=item B<seize=BOOLEAN>
+
+Tells xl to automatically attempt to re-assign a device to
+pciback if it is not already assigned.
+
+WARNING: If you set this option, xl will gladly re-assign a critical
+system device, such as a network or a disk controller being used by
+dom0 without confirmation. Please use with care.
+
=item B<power_mgmt=BOOLEAN>
(HVM only) Specifies that the VM should be able to program the
@@ -530,6 +539,11 @@ above.
Changes the default value of 'msitranslate' for all PCI devices passed
through to this VM. See L<msitranslate|/"msitranslate_boolean"> above.
+=item B<pci_seize=BOOLEAN>
+
+Changes the default value of 'seize' for all PCI devices passed
+through to this VM. See L<seize|/"seize_boolean"> above.
+
=item B<pci_power_mgmt=BOOLEAN>
(HVM only) Changes the default value of 'power_mgmt' for all PCI
diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c
index 2e52470..44d0453 100644
--- a/tools/libxl/libxl_pci.c
+++ b/tools/libxl/libxl_pci.c
@@ -1050,6 +1050,12 @@ int libxl__device_pci_add(libxl__gc *gc, uint32_t domid, libxl_device_pci *pcide
rc = libxl__device_pci_setdefault(gc, pcidev);
if (rc) goto out;
+ if (pcidev->seize && !pciback_dev_is_assigned(gc, pcidev)) {
+ rc = libxl__device_pci_assignable_add(gc, pcidev, 1);
+ if ( rc )
+ goto out;
+ }
+
if (!libxl_pcidev_assignable(ctx, pcidev)) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "PCI device %x:%x:%x.%x is not assignable",
pcidev->domain, pcidev->bus, pcidev->dev, pcidev->func);
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 649ce50..7d3a62b 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -444,6 +444,7 @@ libxl_device_pci = Struct("device_pci", [
("msitranslate", bool),
("power_mgmt", bool),
("permissive", bool),
+ ("seize", bool),
])
libxl_device_vtpm = Struct("device_vtpm", [
diff --git a/tools/libxl/libxlu_pci.c b/tools/libxl/libxlu_pci.c
index f5dee93..26fb143 100644
--- a/tools/libxl/libxlu_pci.c
+++ b/tools/libxl/libxlu_pci.c
@@ -141,6 +141,8 @@ int xlu_pci_parse_bdf(XLU_Config *cfg, libxl_device_pci *pcidev, const char *str
pcidev->power_mgmt = atoi(tok);
}else if ( !strcmp(optkey, "permissive") ) {
pcidev->permissive = atoi(tok);
+ }else if ( !strcmp(optkey, "seize") ) {
+ pcidev->seize = atoi(tok);
}else{
XLU__PCI_ERR(cfg, "Unknown PCI BDF option: %s", optkey);
}
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 4fc46eb..5f59bbc 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -737,6 +737,7 @@ static void parse_config_data(const char *config_source,
int pci_power_mgmt = 0;
int pci_msitranslate = 0;
int pci_permissive = 0;
+ int pci_seize = 0;
int i, e;
libxl_domain_create_info *c_info = &d_config->c_info;
@@ -1462,6 +1463,9 @@ skip_vfb:
if (!xlu_cfg_get_long (config, "pci_permissive", &l, 0))
pci_permissive = l;
+ if (!xlu_cfg_get_long (config, "pci_seize", &l, 0))
+ pci_seize = l;
+
/* To be reworked (automatically enabled) once the auto ballooning
* after guest starts is done (with PCI devices passed in). */
if (c_info->type == LIBXL_DOMAIN_TYPE_PV) {
@@ -1481,6 +1485,7 @@ skip_vfb:
pcidev->msitranslate = pci_msitranslate;
pcidev->power_mgmt = pci_power_mgmt;
pcidev->permissive = pci_permissive;
+ pcidev->seize = pci_seize;
if (!xlu_pci_parse_bdf(config, pcidev, buf))
d_config->num_pcidevs++;
}
--
1.7.9.5
next prev parent reply other threads:[~2014-03-04 13:38 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-04 13:38 [PATCH 1/2] libxl: Fail domain creation if pci assignment fails George Dunlap
2014-03-04 13:38 ` George Dunlap [this message]
2014-03-04 14:06 ` [PATCH 2/2] xl: Add "seize" option to PCI devices George Dunlap
2014-03-04 14:09 ` Ian Jackson
2014-03-10 12:05 ` Ian Jackson
2014-03-10 12:04 ` [PATCH 1/2] libxl: Fail domain creation if pci assignment fails Ian Jackson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1393940299-8221-2-git-send-email-george.dunlap@eu.citrix.com \
--to=george.dunlap@eu.citrix.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).