[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [RFC][v2][PATCH 08/14] tools: extend xc_assign_device() to support rdm reservation policy



On 2015/6/3 0:36, Wei Liu wrote:
On Fri, May 22, 2015 at 05:35:08PM +0800, Tiejun Chen wrote:
This patch passes rdm reservation policy to xc_assign_device() so the policy
is checked when assigning devices to a VM.

Signed-off-by: Tiejun Chen <tiejun.chen@xxxxxxxxx>
---
  tools/libxc/include/xenctrl.h       |  3 ++-
  tools/libxc/xc_domain.c             |  4 +++-
  tools/libxl/libxl_pci.c             | 11 ++++++++++-
  tools/libxl/xl_cmdimpl.c            | 23 +++++++++++++++++++----
  tools/libxl/xl_cmdtable.c           |  2 +-

Where is document for the new options you added to xl pci commands?

Looks I'm missing to describe something specific to pci-attach?

diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1
index 4eb929d..2ebfd54 100644
--- a/docs/man/xl.pod.1
+++ b/docs/man/xl.pod.1
@@ -1368,10 +1368,15 @@ it will also attempt to re-bind the device to its original driver, making it
 usable by Domain 0 again.  If the device is not bound to pciback, it will
 return success.

-=item B<pci-attach> I<domain-id> I<BDF>
+=item B<pci-attach> I<domain-id> I<BDF> I<rdm policy>

 Hot-plug a new pass-through pci device to the specified domain.
B<BDF> is the PCI Bus/Device/Function of the physical device to pass-through. +B<rdm policy> is about how to handle conflict between reserving reserved device +memory and guest address space. "strict" means an unsolved conflict leads to
+immediate VM crash, while "relaxed" allows VM moving forward with a warning
+message thrown out. Here "strict" is default.
+

 =item B<pci-detach> [I<-f>] I<domain-id> I<BDF>



BTW you might want to consider rearrange patches in this series so that

Yes, this is really what I intend to do.

you keep the tree bisectable.

Overall, I can separate this series as several parts,

#1. Introduce our policy configuration on tools side
#2. Interact with Hypervisor to get rdm info
#3. Implement our policy with rdm info on tool side
#4. Make hvmloader to align our policy

If you already see something obviously wrong, let me know.


  tools/ocaml/libs/xc/xenctrl_stubs.c | 18 ++++++++++++++----
  tools/python/xen/lowlevel/xc/xc.c   | 29 +++++++++++++++++++----------
  xen/drivers/passthrough/pci.c       |  3 ++-
  8 files changed, 70 insertions(+), 23 deletions(-)

diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index 5f84a62..2a447b9 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -2078,7 +2078,8 @@ int xc_hvm_destroy_ioreq_server(xc_interface *xch,
  /* HVM guest pass-through */
  int xc_assign_device(xc_interface *xch,
                       uint32_t domid,
-                     uint32_t machine_sbdf);
+                     uint32_t machine_sbdf,
+                     uint32_t flag);

  int xc_get_device_group(xc_interface *xch,
                       uint32_t domid,
diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
index c17a5a8..9761e5a 100644
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -1704,7 +1704,8 @@ int xc_domain_setdebugging(xc_interface *xch,
  int xc_assign_device(
      xc_interface *xch,
      uint32_t domid,
-    uint32_t machine_sbdf)
+    uint32_t machine_sbdf,
+    uint32_t flag)
  {
      DECLARE_DOMCTL;

@@ -1712,6 +1713,7 @@ int xc_assign_device(
      domctl.domain = domid;
      domctl.u.assign_device.dev = XEN_DOMCTL_DEV_PCI;
      domctl.u.assign_device.u.pci.machine_sbdf = machine_sbdf;
+    domctl.u.assign_device.flag = flag;

      return do_domctl(xch, &domctl);
  }
diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c
index 07e84f2..ac70edc 100644
--- a/tools/libxl/libxl_pci.c
+++ b/tools/libxl/libxl_pci.c
@@ -894,6 +894,7 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, 
libxl_device_pci *pcidev, i
      FILE *f;
      unsigned long long start, end, flags, size;
      int irq, i, rc, hvm = 0;
+    uint32_t flag;

      if (type == LIBXL_DOMAIN_TYPE_INVALID)
          return ERROR_FAIL;
@@ -987,7 +988,15 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, 
libxl_device_pci *pcidev, i

  out:
      if (!libxl_is_stubdom(ctx, domid, NULL)) {
-        rc = xc_assign_device(ctx->xch, domid, pcidev_encode_bdf(pcidev));
+        if (pcidev->rdm_reserve == LIBXL_RDM_RESERVE_FLAG_RELAXED) {
+            flag = XEN_DOMCTL_DEV_RDM_RELAXED;
+        } else if (pcidev->rdm_reserve == LIBXL_RDM_RESERVE_FLAG_STRICT) {
+            flag = XEN_DOMCTL_DEV_RDM_STRICT;
+        } else {
+            LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unkwon rdm check flag.");

unknown

Couldn't continue reviewing because I don't know the expected behaviour.
But the changes look mostly mechanical.


I want to make this assignment failed so return ERROR_FAIL


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.