aboutsummaryrefslogtreecommitdiffstats
path: root/xen/xsm
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2010-11-03 08:17:39 +0000
committerKeir Fraser <keir@xen.org>2010-11-03 08:17:39 +0000
commitd0cf8141501afe4e4e257260f093ddd5a760f9af (patch)
tree08bd9986696314c6469b4f5567a5b13f03ba2a2e /xen/xsm
parent5a4cecd8281530b9165b0186877d5a9db2dcef00 (diff)
downloadxen-d0cf8141501afe4e4e257260f093ddd5a760f9af.tar.gz
xen-d0cf8141501afe4e4e257260f093ddd5a760f9af.tar.bz2
xen-d0cf8141501afe4e4e257260f093ddd5a760f9af.zip
x86: xsave save/restore support for both PV and HVM guests.
Signed-off-by: Shan Haitao <haitao.shan@intel.com> Signed-off-by: Han Weidong <weidong.han@intel.com>
Diffstat (limited to 'xen/xsm')
-rw-r--r--xen/xsm/flask/hooks.c20
-rw-r--r--xen/xsm/flask/include/av_permissions.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
index 53b28c2e14..727eddb989 100644
--- a/xen/xsm/flask/hooks.c
+++ b/xen/xsm/flask/hooks.c
@@ -1177,6 +1177,25 @@ static int flask_ext_vcpucontext (struct domain *d, uint32_t cmd)
return domain_has_perm(current->domain, d, SECCLASS_DOMAIN, perm);
}
+
+static int flask_vcpuextstate (struct domain *d, uint32_t cmd)
+{
+ u32 perm;
+
+ switch ( cmd )
+ {
+ case XEN_DOMCTL_setvcpuextstate:
+ perm = DOMAIN__SETVCPUEXTSTATE;
+ break;
+ case XEN_DOMCTL_getvcpuextstate:
+ perm = DOMAIN__GETVCPUEXTSTATE;
+ break;
+ default:
+ return -EPERM;
+ }
+
+ return domain_has_perm(current->domain, d, SECCLASS_DOMAIN, perm);
+}
#endif
static int io_has_perm(struct domain *d, char *name, unsigned long s,
@@ -1328,6 +1347,7 @@ static struct xsm_operations flask_ops = {
.bind_pt_irq = flask_bind_pt_irq,
.pin_mem_cacheattr = flask_pin_mem_cacheattr,
.ext_vcpucontext = flask_ext_vcpucontext,
+ .vcpuextstate = flask_vcpuextstate,
#endif
};
diff --git a/xen/xsm/flask/include/av_permissions.h b/xen/xsm/flask/include/av_permissions.h
index cc1f0a2ccb..14bd0536dd 100644
--- a/xen/xsm/flask/include/av_permissions.h
+++ b/xen/xsm/flask/include/av_permissions.h
@@ -51,6 +51,8 @@
#define DOMAIN__TRIGGER 0x00800000UL
#define DOMAIN__GETEXTVCPUCONTEXT 0x01000000UL
#define DOMAIN__SETEXTVCPUCONTEXT 0x02000000UL
+#define DOMAIN__GETVCPUEXTSTATE 0x04000000UL
+#define DOMAIN__SETVCPUEXTSTATE 0x08000000UL
#define HVM__SETHVMC 0x00000001UL
#define HVM__GETHVMC 0x00000002UL