mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
Add XENVER_pagesize hypercall.
Make xen pagesize available through xm info and sysfs. Signed-off-by: Tristan Gingold <tristan.gingold@bull.net>
This commit is contained in:
1 parent
4b56090e1d
commit
3d8026009b
6 files changed
+32
-3
No files matched your search
@@ -225,6 +225,18 @@ static ssize_t virtual_start_show(struct hyp_sysfs_attr *attr, char *buffer)
|
||||
|
||||
HYPERVISOR_ATTR_RO(virtual_start);
|
||||
|
||||
static ssize_t pagesize_show(struct hyp_sysfs_attr *attr, char *buffer)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = HYPERVISOR_xen_version(XENVER_pagesize, NULL);
|
||||
if (ret > 0)
|
||||
ret = sprintf(buffer, "%lx\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
HYPERVISOR_ATTR_RO(pagesize);
|
||||
|
||||
/* eventually there will be several more features to export */
|
||||
static ssize_t xen_feature_show(int index, char *buffer)
|
||||
{
|
||||
@@ -254,6 +266,7 @@ static struct attribute *xen_properties_attrs[] = {
|
||||
&capabilities_attr.attr,
|
||||
&changeset_attr.attr,
|
||||
&virtual_start_attr.attr,
|
||||
&pagesize_attr.attr,
|
||||
&writable_pt_attr.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -637,6 +637,7 @@ static PyObject *pyxc_xeninfo(XcObject *self)
|
||||
xen_capabilities_info_t xen_caps;
|
||||
xen_platform_parameters_t p_parms;
|
||||
long xen_version;
|
||||
long xen_pagesize;
|
||||
char str[128];
|
||||
|
||||
xen_version = xc_version(self->xc_handle, XENVER_version, NULL);
|
||||
@@ -658,11 +659,16 @@ static PyObject *pyxc_xeninfo(XcObject *self)
|
||||
|
||||
sprintf(str, "virt_start=0x%lx", p_parms.virt_start);
|
||||
|
||||
return Py_BuildValue("{s:i,s:i,s:s,s:s,s:s,s:s,s:s,s:s,s:s,s:s}",
|
||||
xen_pagesize = xc_version(self->xc_handle, XENVER_pagesize, NULL);
|
||||
if (xen_pagesize < 0 )
|
||||
return PyErr_SetFromErrno(xc_error);
|
||||
|
||||
return Py_BuildValue("{s:i,s:i,s:s,s:s,s:i,s:s,s:s,s:s,s:s,s:s,s:s}",
|
||||
"xen_major", xen_version >> 16,
|
||||
"xen_minor", (xen_version & 0xffff),
|
||||
"xen_extra", xen_extra,
|
||||
"xen_caps", xen_caps,
|
||||
"xen_pagesize", xen_pagesize,
|
||||
"platform_params", str,
|
||||
"xen_changeset", xen_chgset,
|
||||
"cc_compiler", xen_cc.compiler,
|
||||
|
||||
@@ -86,6 +86,7 @@ class XendNode:
|
||||
'xen_minor',
|
||||
'xen_extra',
|
||||
'xen_caps',
|
||||
'xen_pagesize',
|
||||
'platform_params',
|
||||
'xen_changeset',
|
||||
'cc_compiler',
|
||||
|
||||
@@ -24,7 +24,8 @@ for line in lines:
|
||||
map[pieces[0]] = pieces[1]
|
||||
|
||||
for field in ["cores_per_socket", "threads_per_core", "cpu_mhz",
|
||||
"total_memory", "free_memory", "xen_major", "xen_minor"]:
|
||||
"total_memory", "free_memory", "xen_major", "xen_minor",
|
||||
"xen_pagesize"]:
|
||||
val = map[field]
|
||||
if not val.isdigit():
|
||||
FAIL("Numeric field %s not all-numbers: %s" % (field, val))
|
||||
|
||||
@@ -212,6 +212,11 @@ long do_xen_version(int cmd, XEN_GUEST_HANDLE(void) arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XENVER_pagesize:
|
||||
{
|
||||
return (guest_handle_is_null(arg) ? -EINVAL : PAGE_SIZE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return -ENOSYS;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#ifndef __XEN_PUBLIC_VERSION_H__
|
||||
#define __XEN_PUBLIC_VERSION_H__
|
||||
|
||||
/* NB. All ops return zero on success, except XENVER_version. */
|
||||
/* NB. All ops return zero on success, except XENVER_{version,pagesize} */
|
||||
|
||||
/* arg == NULL; returns major:minor (16:16). */
|
||||
#define XENVER_version 0
|
||||
@@ -54,6 +54,9 @@ typedef struct xen_feature_info xen_feature_info_t;
|
||||
/* Declares the features reported by XENVER_get_features. */
|
||||
#include "features.h"
|
||||
|
||||
/* arg == NULL; returns host memory page size. */
|
||||
#define XENVER_pagesize 7
|
||||
|
||||
#endif /* __XEN_PUBLIC_VERSION_H__ */
|
||||
|
||||
/*
|
||||
|
||||