|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xen/domctl: Add DOMINFO_hap to xen_domctl_getdomaininfo
commit 7179cd39efdb22ac847ae465d1aa11cd6263f19b
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Fri Jul 15 16:43:48 2016 +0100
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Wed Jul 27 15:34:31 2016 +0100
xen/domctl: Add DOMINFO_hap to xen_domctl_getdomaininfo
This allows a toolstack to identify whether a running domain is using
hardware
assisted paging or not.
The appropriate tests differ by architecture, so introduce
arch_get_domain_info(). ARM unconditionally sets the new flag, while x86
checks with the paging subsystem first.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Reviewed-by: Julien Grall <julien.grall@xxxxxxx>
Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx>
---
tools/libxc/include/xenctrl.h | 2 +-
tools/libxc/xc_domain.c | 1 +
xen/arch/arm/domctl.c | 7 +++++++
xen/arch/x86/domctl.c | 7 +++++++
xen/common/domctl.c | 2 ++
xen/include/public/domctl.h | 3 +++
xen/include/xen/domain.h | 2 ++
7 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index e904bd5..fdc148a 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -442,7 +442,7 @@ typedef struct xc_dominfo {
uint32_t ssidref;
unsigned int dying:1, crashed:1, shutdown:1,
paused:1, blocked:1, running:1,
- hvm:1, debugged:1, pvh:1, xenstore:1;
+ hvm:1, debugged:1, pvh:1, xenstore:1, hap:1;
unsigned int shutdown_reason; /* only meaningful if shutdown==1 */
unsigned long nr_pages; /* current number, not maximum */
unsigned long nr_outstanding_pages;
diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
index 050216e..296b852 100644
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -372,6 +372,7 @@ int xc_domain_getinfo(xc_interface *xch,
info->debugged = !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_debugged);
info->pvh = !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_pvh_guest);
info->xenstore = !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_xs_domain);
+ info->hap = !!(domctl.u.getdomaininfo.flags&XEN_DOMINF_hap);
info->shutdown_reason =
(domctl.u.getdomaininfo.flags>>XEN_DOMINF_shutdownshift) &
diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c
index f61f98a..09d9959 100644
--- a/xen/arch/arm/domctl.c
+++ b/xen/arch/arm/domctl.c
@@ -14,6 +14,13 @@
#include <xsm/xsm.h>
#include <public/domctl.h>
+void arch_get_domain_info(const struct domain *d,
+ struct xen_domctl_getdomaininfo *info)
+{
+ /* All ARM domains use hardware assisted paging. */
+ info->flags |= XEN_DOMINF_hap;
+}
+
long arch_do_domctl(struct xen_domctl *domctl, struct domain *d,
XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
{
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index aedf264..bed70aa 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -229,6 +229,13 @@ static void update_domain_cpuid_info(struct domain *d,
}
}
+void arch_get_domain_info(const struct domain *d,
+ struct xen_domctl_getdomaininfo *info)
+{
+ if ( paging_mode_hap(d) )
+ info->flags |= XEN_DOMINF_hap;
+}
+
#define MAX_IOPORTS 0x10000
long arch_do_domctl(
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index 87640b6..8f25131 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -215,6 +215,8 @@ void getdomaininfo(struct domain *d, struct
xen_domctl_getdomaininfo *info)
info->cpupool = d->cpupool ? d->cpupool->cpupool_id : CPUPOOLID_NONE;
memcpy(info->handle, d->handle, sizeof(xen_domain_handle_t));
+
+ arch_get_domain_info(d, info);
}
bool_t domctl_lock_acquire(void)
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index d6d2319..ddd3de4 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -103,6 +103,9 @@ struct xen_domctl_getdomaininfo {
/* domain is a xenstore domain */
#define _XEN_DOMINF_xs_domain 8
#define XEN_DOMINF_xs_domain (1U<<_XEN_DOMINF_xs_domain)
+/* domain has hardware assisted paging */
+#define _XEN_DOMINF_hap 9
+#define XEN_DOMINF_hap (1U<<_XEN_DOMINF_hap)
/* XEN_DOMINF_shutdown guest-supplied code. */
#define XEN_DOMINF_shutdownmask 255
#define XEN_DOMINF_shutdownshift 16
diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h
index a1a6f25..bce0ea1 100644
--- a/xen/include/xen/domain.h
+++ b/xen/include/xen/domain.h
@@ -18,6 +18,8 @@ int vcpu_reset(struct vcpu *);
struct xen_domctl_getdomaininfo;
void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info);
+void arch_get_domain_info(const struct domain *d,
+ struct xen_domctl_getdomaininfo *info);
/*
* Arch-specifics.
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |