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

[Xen-devel] [RFC XEN PATCH v4 18/41] tools/xl: add xl command 'pmem-setup'



The new xl command 'pmem-setup' with '-m' option is used to setup the
specified PMEM region for the management usage.

Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx>
---
Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
---
 tools/libxl/libxl.h        | 13 ++++++++++++
 tools/libxl/libxl_nvdimm.c | 11 ++++++++++
 tools/xl/xl.h              |  1 +
 tools/xl/xl_cmdtable.c     |  6 ++++++
 tools/xl/xl_nvdimm.c       | 51 ++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 82 insertions(+)

diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 9ce487e79f..e13a911cb4 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -2324,6 +2324,19 @@ int libxl_nvdimm_pmem_get_regions(libxl_ctx *ctx,
                                   libxl_nvdimm_pmem_region **regions_r,
                                   unsigned int *nr_r);
 
+/*
+ * Setup the specified PMEM region for management usage.
+ *
+ * Parameters:
+ *  ctx:        libxl context
+ *  smfn, emfn: start and end MFN's of the PMEM region
+ *
+ * Return:
+ *  0 on success; otherwise, ERROR_*, and leave errno valid.
+ */
+int libxl_nvdimm_pmem_setup_mgmt(libxl_ctx *ctx,
+                                 unsigned long smfn, unsigned long emfn);
+
 /* misc */
 
 /* Each of these sets or clears the flag according to whether the
diff --git a/tools/libxl/libxl_nvdimm.c b/tools/libxl/libxl_nvdimm.c
index 70da18f11f..c0024298ec 100644
--- a/tools/libxl/libxl_nvdimm.c
+++ b/tools/libxl/libxl_nvdimm.c
@@ -136,3 +136,14 @@ int libxl_nvdimm_pmem_get_regions(libxl_ctx *ctx,
 
     return rc;
 }
+
+int libxl_nvdimm_pmem_setup_mgmt(libxl_ctx *ctx,
+                                 unsigned long smfn, unsigned long emfn)
+{
+    int rc = xc_nvdimm_pmem_setup_mgmt(ctx->xch, smfn, emfn);
+
+    if (rc)
+        errno = -rc;
+
+    return errno ? ERROR_FAIL : 0;
+}
diff --git a/tools/xl/xl.h b/tools/xl/xl.h
index 9359a3d9c7..8995f64a6f 100644
--- a/tools/xl/xl.h
+++ b/tools/xl/xl.h
@@ -211,6 +211,7 @@ int main_psr_cat_show(int argc, char **argv);
 #endif
 int main_qemu_monitor_command(int argc, char **argv);
 int main_pmem_list(int argc, char **argv);
+int main_pmem_setup(int argc, char **argv);
 
 void help(const char *command);
 
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index f525cafcdf..12a2c2d601 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -622,6 +622,12 @@ struct cmd_spec cmd_table[] = {
       "[options]",
       "-r, --raw   List PMEM regions detected by Xen hypervisor\n"
     },
+    { "pmem-setup",
+      &main_pmem_setup, 0, 1,
+      "Setup a PMEM region for specified usage purpose",
+      "[options]",
+      "-m, --mgmt <smfn> <emfn>  Set PMEM pages smfn - emfn for management 
usage\n"
+    },
 };
 
 int cmdtable_len = sizeof(cmd_table)/sizeof(struct cmd_spec);
diff --git a/tools/xl/xl_nvdimm.c b/tools/xl/xl_nvdimm.c
index 799c76e4c2..25dc6350da 100644
--- a/tools/xl/xl_nvdimm.c
+++ b/tools/xl/xl_nvdimm.c
@@ -24,8 +24,10 @@
 #include <string.h>
 
 #include <libxl.h>
+#include <libxlutil.h>
 
 #include "xl.h"
+#include "xl_parse.h"
 #include "xl_utils.h"
 
 typedef void (*show_region_fn_t)(libxl_nvdimm_pmem_region *region,
@@ -90,3 +92,52 @@ int main_pmem_list(int argc, char **argv)
 
     return ret;
 }
+
+int main_pmem_setup(int argc, char **argv)
+{
+    static struct option opts[] = {
+        { "mgmt", 1, 0, 'm' },
+        COMMON_LONG_OPTS
+    };
+
+    bool mgmt = false;
+    unsigned long mgmt_smfn, mgmt_emfn;
+    int opt, rc = 0;
+
+#define CHECK_NR_ARGS(expected, option)                                 \
+    do {                                                                \
+        if (argc + 1 != optind + (expected)) {                          \
+            fprintf(stderr,                                             \
+                    "Error: 'xl pmem-setup %s' requires %u arguments\n\n", \
+                    (option), (expected));                              \
+            help("pmem-setup");                                         \
+                                                                        \
+            rc = ERROR_INVAL;                                           \
+            errno = EINVAL;                                             \
+                                                                        \
+            goto out;                                                   \
+        }                                                               \
+    } while (0)
+
+    SWITCH_FOREACH_OPT(opt, "m:", opts, "pmem-setup", 0) {
+    case 'm':
+        CHECK_NR_ARGS(2, "-m");
+
+        mgmt = true;
+        mgmt_smfn = parse_ulong(optarg);
+        mgmt_emfn = parse_ulong(argv[optind]);
+
+        break;
+    }
+
+#undef CHECK_NR_ARGS
+
+    if (mgmt)
+        rc = libxl_nvdimm_pmem_setup_mgmt(ctx, mgmt_smfn, mgmt_emfn);
+
+ out:
+    if (rc)
+        fprintf(stderr, "Error: pmem-setup failed, %s\n", strerror(errno));
+
+    return rc;
+}
-- 
2.15.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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