[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC XEN PATCH v4 10/41] xen/pmem: add XEN_SYSCTL_nvdimm_pmem_get_rgions_nr
XEN_SYSCTL_nvdimm_pmem_get_rgions_nr, which is a command of hypercall XEN_SYSCTL_nvdimm_op, is to get the number of PMEM regions of the specified type (see PMEM_REGION_TYPE_*). Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx> --- Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Cc: George Dunlap <George.Dunlap@xxxxxxxxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> Cc: Tim Deegan <tim@xxxxxxx> --- tools/libxc/include/xenctrl.h | 15 +++++++++++++++ tools/libxc/xc_misc.c | 23 +++++++++++++++++++++++ tools/libxl/libxl_nvdimm.c | 0 xen/common/pmem.c | 29 ++++++++++++++++++++++++++++- xen/include/public/sysctl.h | 14 +++++++++++++- 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 tools/libxl/libxl_nvdimm.c diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h index 666db0b919..195ff69846 100644 --- a/tools/libxc/include/xenctrl.h +++ b/tools/libxc/include/xenctrl.h @@ -2607,6 +2607,21 @@ int xc_livepatch_replace(xc_interface *xch, char *name, uint32_t timeout); int xc_domain_cacheflush(xc_interface *xch, uint32_t domid, xen_pfn_t start_pfn, xen_pfn_t nr_pfns); +/* + * Get the number of PMEM regions of the specified type. + * + * Parameters: + * xch: xc interface handle + * type: the type of PMEM regions, must be one of PMEM_REGION_TYPE_* + * nr: the number of PMEM regions is returned via this parameter + * + * Return: + * On success, return 0 and the number of PMEM regions is returned via @nr. + * Otherwise, return a non-zero error code. + */ +int xc_nvdimm_pmem_get_regions_nr(xc_interface *xch, + uint8_t type, uint32_t *nr); + /* Compat shims */ #include "xenctrl_compat.h" diff --git a/tools/libxc/xc_misc.c b/tools/libxc/xc_misc.c index 5e6714ae2b..a3c6cfe2f6 100644 --- a/tools/libxc/xc_misc.c +++ b/tools/libxc/xc_misc.c @@ -888,6 +888,29 @@ int xc_livepatch_replace(xc_interface *xch, char *name, uint32_t timeout) return _xc_livepatch_action(xch, name, LIVEPATCH_ACTION_REPLACE, timeout); } +int xc_nvdimm_pmem_get_regions_nr(xc_interface *xch, uint8_t type, uint32_t *nr) +{ + DECLARE_SYSCTL; + struct xen_sysctl_nvdimm_op *nvdimm = &sysctl.u.nvdimm; + int rc; + + if ( !nr || type != PMEM_REGION_TYPE_RAW ) + return -EINVAL; + + sysctl.cmd = XEN_SYSCTL_nvdimm_op; + nvdimm->cmd = XEN_SYSCTL_nvdimm_pmem_get_regions_nr; + nvdimm->err = 0; + nvdimm->u.pmem_regions_nr.type = type; + + rc = do_sysctl(xch, &sysctl); + if ( !rc ) + *nr = nvdimm->u.pmem_regions_nr.num_regions; + else if ( nvdimm->err ) + rc = nvdimm->err; + + return rc; +} + /* * Local variables: * mode: C diff --git a/tools/libxl/libxl_nvdimm.c b/tools/libxl/libxl_nvdimm.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/xen/common/pmem.c b/xen/common/pmem.c index c3b26dd02d..b196b256bb 100644 --- a/xen/common/pmem.c +++ b/xen/common/pmem.c @@ -97,6 +97,23 @@ static int pmem_list_add(struct list_head *list, return 0; } +static int pmem_get_regions_nr(xen_sysctl_nvdimm_pmem_regions_nr_t *regions_nr) +{ + int rc = 0; + + switch ( regions_nr->type ) + { + case PMEM_REGION_TYPE_RAW: + regions_nr->num_regions = nr_raw_regions; + break; + + default: + rc = -EINVAL; + } + + return rc; +} + /** * Register a pmem region to Xen. * @@ -134,7 +151,17 @@ int pmem_register(unsigned long smfn, unsigned long emfn, unsigned int pxm) */ int pmem_do_sysctl(struct xen_sysctl_nvdimm_op *nvdimm) { - int rc = -ENOSYS; + int rc; + + switch ( nvdimm->cmd ) + { + case XEN_SYSCTL_nvdimm_pmem_get_regions_nr: + rc = pmem_get_regions_nr(&nvdimm->u.pmem_regions_nr); + break; + + default: + rc = -ENOSYS; + } nvdimm->err = -rc; diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index 7f0e56f73a..c3c992225a 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -1049,11 +1049,23 @@ struct xen_sysctl_set_parameter { * Interface for NVDIMM management. */ +/* Types of PMEM regions */ +#define PMEM_REGION_TYPE_RAW 0 /* PMEM regions detected by Xen */ + +/* XEN_SYSCTL_nvdimm_pmem_get_regions_nr */ +struct xen_sysctl_nvdimm_pmem_regions_nr { + uint8_t type; /* IN: one of PMEM_REGION_TYPE_* */ + uint32_t num_regions; /* OUT: the number of PMEM regions of type @type */ +}; +typedef struct xen_sysctl_nvdimm_pmem_regions_nr xen_sysctl_nvdimm_pmem_regions_nr_t; +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_nvdimm_pmem_regions_nr_t); + struct xen_sysctl_nvdimm_op { uint32_t cmd; /* IN: XEN_SYSCTL_nvdimm_*; none is implemented yet. */ +#define XEN_SYSCTL_nvdimm_pmem_get_regions_nr 0 uint32_t err; /* OUT: error code */ union { - /* Parameters of XEN_SYSCTL_nvdimm_* will be added here. */ + xen_sysctl_nvdimm_pmem_regions_nr_t pmem_regions_nr; } u; }; -- 2.15.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |