All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tiejun Chen <tiejun.chen@intel.com>
To: xen-devel@lists.xen.org
Cc: Wei Liu <wei.liu2@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: [v7][PATCH 12/16] tools: introduce a new parameter to set a predefined rdm boundary
Date: Thu,  9 Jul 2015 13:34:03 +0800	[thread overview]
Message-ID: <1436420047-25356-13-git-send-email-tiejun.chen@intel.com> (raw)
In-Reply-To: <1436420047-25356-1-git-send-email-tiejun.chen@intel.com>

Previously we always fix that predefined boundary as 2G to handle
conflict between memory and rdm, but now this predefined boundar
can be changes with the parameter "rdm_mem_boundary" in .cfg file.

CC: Ian Jackson <ian.jackson@eu.citrix.com>
CC: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
CC: Ian Campbell <ian.campbell@citrix.com>
CC: Wei Liu <wei.liu2@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
---
v7:

* Just sync with the fallout of renaming parameters from patch #10.

v6:

* Nothing is changed.

v5:

* Make this variable "rdm_mem_boundary_memkb" specific to .hvm 

v4:

* Separated from the previous patch to provide a parameter to set that
  predefined boundary dynamically.

 docs/man/xl.cfg.pod.5       | 22 ++++++++++++++++++++++
 tools/libxl/libxl.h         |  6 ++++++
 tools/libxl/libxl_create.c  |  4 ++++
 tools/libxl/libxl_dom.c     |  8 +-------
 tools/libxl/libxl_types.idl |  1 +
 tools/libxl/xl_cmdimpl.c    |  3 +++
 6 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index 6c55a8b..23068ec 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -867,6 +867,28 @@ More information about Xen gfx_passthru feature is available
 on the XenVGAPassthrough L<http://wiki.xen.org/wiki/XenVGAPassthrough>
 wiki page.
 
+=item B<rdm_mem_boundary=MBYTES>
+
+Number of megabytes to set a boundary for checking rdm conflict.
+
+When RDM conflicts with RAM, RDM probably scatter the whole RAM space.
+Especially multiple RDM entries would worsen this to lead a complicated
+memory layout. So here we're trying to figure out a simple solution to
+avoid breaking existing layout. So when a conflict occurs,
+
+    #1. Above a predefined boundary
+        - move lowmem_end below reserved region to solve conflict;
+
+    #2. Below a predefined boundary
+        - Check strict/relaxed policy.
+        "strict" policy leads to fail libxl. Note when both policies
+        are specified on a given region, 'strict' is always preferred.
+        "relaxed" policy issue a warning message and also mask this
+        entry INVALID to indicate we shouldn't expose this entry to
+        hvmloader.
+
+Here the default is 2G.
+
 =item B<dtdev=[ "DTDEV_PATH", "DTDEV_PATH", ... ]>
 
 Specifies the host device tree nodes to passthrough to this guest. Each
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index a1c5d15..6f157c9 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -863,6 +863,12 @@ const char *libxl_defbool_to_string(libxl_defbool b);
 #define LIBXL_TIMER_MODE_DEFAULT -1
 #define LIBXL_MEMKB_DEFAULT ~0ULL
 
+/*
+ * We'd like to set a memory boundary to determine if we need to check
+ * any overlap with reserved device memory.
+ */
+#define LIBXL_RDM_MEM_BOUNDARY_MEMKB_DEFAULT (2048 * 1024)
+
 #define LIBXL_MS_VM_GENID_LEN 16
 typedef struct {
     uint8_t bytes[LIBXL_MS_VM_GENID_LEN];
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index c8a32d5..3de86a6 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -109,6 +109,10 @@ void libxl__rdm_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info)
 {
     if (b_info->u.hvm.rdm.policy == LIBXL_RDM_RESERVE_POLICY_INVALID)
         b_info->u.hvm.rdm.policy = LIBXL_RDM_RESERVE_POLICY_RELAXED;
+
+    if (b_info->u.hvm.rdm_mem_boundary_memkb == LIBXL_MEMKB_DEFAULT)
+        b_info->u.hvm.rdm_mem_boundary_memkb =
+                            LIBXL_RDM_MEM_BOUNDARY_MEMKB_DEFAULT;
 }
 
 int libxl__domain_build_info_setdefault(libxl__gc *gc,
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index f3c39a0..62ef120 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -922,12 +922,6 @@ int libxl__build_hvm(libxl__gc *gc, uint32_t domid,
     int ret, rc = ERROR_FAIL;
     uint64_t mmio_start, lowmem_end, highmem_end;
     libxl_domain_build_info *const info = &d_config->b_info;
-    /*
-     * Currently we fix this as 2G to guarantte how to handle
-     * our rdm policy. But we'll provide a parameter to set
-     * this dynamically.
-     */
-    uint64_t rdm_mem_boundary = 0x80000000;
 
     memset(&args, 0, sizeof(struct xc_hvm_build_args));
     /* The params from the configuration file are in Mb, which are then
@@ -966,7 +960,7 @@ int libxl__build_hvm(libxl__gc *gc, uint32_t domid,
     args.mmio_start = mmio_start;
 
     ret = libxl__domain_device_construct_rdm(gc, d_config,
-                                             rdm_mem_boundary,
+                                             info->u.hvm.rdm_mem_boundary_memkb*1024,
                                              &args);
     if (ret) {
         LOG(ERROR, "checking reserved device memory failed");
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index a3ad8d1..4eb4f8a 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -484,6 +484,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
                                        ("ms_vm_genid",      libxl_ms_vm_genid),
                                        ("serial_list",      libxl_string_list),
                                        ("rdm", libxl_rdm_reserve),
+                                       ("rdm_mem_boundary_memkb", MemKB),
                                        ])),
                  ("pv", Struct(None, [("kernel", string),
                                       ("slack_memkb", MemKB),
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index c858068..dfb50d6 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1519,6 +1519,9 @@ static void parse_config_data(const char *config_source,
                     exit(1);
             }
         }
+
+        if (!xlu_cfg_get_long (config, "rdm_mem_boundary", &l, 0))
+            b_info->u.hvm.rdm_mem_boundary_memkb = l * 1024;
         break;
     case LIBXL_DOMAIN_TYPE_PV:
     {
-- 
1.9.1

  parent reply	other threads:[~2015-07-09  5:34 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-09  5:33 [v7][PATCH 00/16] Fix RMRR Tiejun Chen
2015-07-09  5:33 ` [v7][PATCH 01/16] xen: introduce XENMEM_reserved_device_memory_map Tiejun Chen
2015-07-09  5:33 ` [v7][PATCH 02/16] xen/vtd: create RMRR mapping Tiejun Chen
2015-07-09  5:33 ` [v7][PATCH 03/16] xen/passthrough: extend hypercall to support rdm reservation policy Tiejun Chen
2015-07-10 13:26   ` George Dunlap
2015-07-10 15:01     ` Jan Beulich
2015-07-10 15:07       ` George Dunlap
2015-07-13  6:37         ` Chen, Tiejun
2015-07-13  5:57       ` Chen, Tiejun
2015-07-13  6:47     ` Chen, Tiejun
2015-07-13  8:57       ` Jan Beulich
2015-07-14 10:46       ` George Dunlap
2015-07-14 10:53         ` Chen, Tiejun
2015-07-14 11:30           ` George Dunlap
2015-07-14 11:45             ` Jan Beulich
2015-07-14 13:25               ` George Dunlap
2015-07-09  5:33 ` [v7][PATCH 04/16] xen: enable XENMEM_memory_map in hvm Tiejun Chen
2015-07-09  5:33 ` [v7][PATCH 05/16] hvmloader: get guest memory map into memory_map[] Tiejun Chen
2015-07-10 13:49   ` George Dunlap
2015-07-13  7:03     ` Chen, Tiejun
2015-07-09  5:33 ` [v7][PATCH 06/16] hvmloader/pci: skip reserved ranges Tiejun Chen
2015-07-13 13:12   ` Jan Beulich
2015-07-14  6:39     ` Chen, Tiejun
2015-07-14  9:27       ` Jan Beulich
2015-07-14 10:54         ` Chen, Tiejun
2015-07-14 11:50           ` Jan Beulich
2015-07-15  0:55             ` Chen, Tiejun
2015-07-15  4:27               ` Chen, Tiejun
2015-07-15  8:34                 ` Jan Beulich
2015-07-15  8:59                   ` Chen, Tiejun
2015-07-15  9:10                     ` Chen, Tiejun
2015-07-15  9:27                     ` Jan Beulich
2015-07-15 10:34                       ` Chen, Tiejun
2015-07-15 11:25                         ` Jan Beulich
2015-07-15 11:34                           ` Chen, Tiejun
2015-07-15 13:56                             ` George Dunlap
2015-07-15 16:14                               ` George Dunlap
2015-07-16  2:05                                 ` Chen, Tiejun
2015-07-16  9:40                                   ` George Dunlap
2015-07-16 10:01                                     ` Chen, Tiejun
2015-07-15 11:05                       ` George Dunlap
2015-07-15 11:20                         ` Chen, Tiejun
2015-07-15 12:43                           ` George Dunlap
2015-07-15 13:23                             ` Chen, Tiejun
2015-07-15 11:24                         ` Jan Beulich
2015-07-15 11:38                           ` George Dunlap
2015-07-15 11:27                         ` Jan Beulich
2015-07-15 11:40                           ` Chen, Tiejun
2015-07-15  8:32               ` Jan Beulich
2015-07-15  9:04                 ` Chen, Tiejun
2015-07-15 12:57                 ` Wei Liu
2015-07-15 13:40     ` George Dunlap
2015-07-15 14:00       ` Jan Beulich
2015-07-15 15:19         ` George Dunlap
2015-07-09  5:33 ` [v7][PATCH 07/16] hvmloader/e820: construct guest e820 table Tiejun Chen
2015-07-13 13:35   ` Jan Beulich
2015-07-14  5:22     ` Chen, Tiejun
2015-07-14  9:32       ` Jan Beulich
2015-07-14 10:22         ` Chen, Tiejun
2015-07-14 10:48           ` Jan Beulich
2015-07-15 16:00   ` George Dunlap
2015-07-16  1:58     ` Chen, Tiejun
2015-07-16  9:41       ` George Dunlap
2015-07-09  5:33 ` [v7][PATCH 08/16] tools/libxc: Expose new hypercall xc_reserved_device_memory_map Tiejun Chen
2015-07-09  5:34 ` [v7][PATCH 09/16] tools: extend xc_assign_device() to support rdm reservation policy Tiejun Chen
2015-07-09  5:34 ` [v7][PATCH 10/16] tools: introduce some new parameters to set rdm policy Tiejun Chen
2015-07-09  9:20   ` Wei Liu
2015-07-09  9:44     ` Chen, Tiejun
2015-07-09 10:37       ` Ian Jackson
2015-07-09 10:53         ` Chen, Tiejun
2015-07-09 18:02   ` Ian Jackson
2015-07-10  0:46     ` Chen, Tiejun
2015-07-09  5:34 ` [v7][PATCH 11/16] tools/libxl: detect and avoid conflicts with RDM Tiejun Chen
2015-07-09  9:11   ` Wei Liu
2015-07-09  9:41     ` Chen, Tiejun
2015-07-09 18:14   ` Ian Jackson
2015-07-10  3:19     ` Chen, Tiejun
2015-07-10 10:14       ` Ian Jackson
2015-07-13  9:19         ` Chen, Tiejun
2015-07-09  5:34 ` Tiejun Chen [this message]
2015-07-09 18:14   ` [v7][PATCH 12/16] tools: introduce a new parameter to set a predefined rdm boundary Ian Jackson
2015-07-09  5:34 ` [v7][PATCH 13/16] libxl: construct e820 map with RDM information for HVM guest Tiejun Chen
2015-07-09 18:17   ` Ian Jackson
2015-07-10  5:40     ` Chen, Tiejun
2015-07-10  9:18       ` Ian Campbell
2015-07-13  9:47         ` Chen, Tiejun
2015-07-13 10:15           ` Ian Campbell
2015-07-14  5:44             ` Chen, Tiejun
2015-07-14  7:42               ` Ian Campbell
2015-07-14  8:03                 ` Chen, Tiejun
2015-07-10 10:15       ` Ian Jackson
2015-07-09  5:34 ` [v7][PATCH 14/16] xen/vtd: enable USB device assignment Tiejun Chen
2015-07-09  5:34 ` [v7][PATCH 15/16] xen/vtd: prevent from assign the device with shared rmrr Tiejun Chen
2015-07-13 13:41   ` Jan Beulich
2015-07-14  1:42     ` Chen, Tiejun
2015-07-14  9:19       ` Jan Beulich
2015-07-09  5:34 ` [v7][PATCH 16/16] tools: parse to enable new rdm policy parameters Tiejun Chen
2015-07-09 18:23   ` Ian Jackson
2015-07-10  6:05     ` Chen, Tiejun
2015-07-10 10:23       ` Ian Jackson
2015-07-13  9:31         ` Chen, Tiejun
2015-07-13  9:40           ` Ian Campbell
2015-07-13  9:55             ` Chen, Tiejun
2015-07-13 10:17               ` Ian Campbell
2015-07-13 17:08                 ` Ian Jackson
2015-07-14  1:29                   ` Chen, Tiejun
2015-07-10 14:50 ` [v7][PATCH 00/16] Fix RMRR George Dunlap
2015-07-10 14:56   ` Jan Beulich
2015-07-16  7:55   ` Jan Beulich
2015-07-16  8:03     ` Chen, Tiejun
2015-07-16  8:08       ` Jan Beulich
2015-07-16  8:13         ` Chen, Tiejun
2015-07-16  8:26           ` Jan Beulich
2015-07-16  9:27             ` George Dunlap
2015-07-16  9:44               ` Jan Beulich
2015-07-16  9:59                 ` George Dunlap
2015-07-16  8:30         ` Ian Campbell
2015-07-16  8:46           ` Wei Liu
2015-07-16  9:45           ` Lars Kurth

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=1436420047-25356-13-git-send-email-tiejun.chen@intel.com \
    --to=tiejun.chen@intel.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=wei.liu2@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.