aboutsummaryrefslogtreecommitdiffstats
path: root/xen/xsm
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2010-11-08 15:44:02 +0000
committerKeir Fraser <keir@xen.org>2010-11-08 15:44:02 +0000
commit47a3fb9662188c9e2f02a8a428e5cc72ce3f451a (patch)
tree00d8ee313ffbbb361ef58cde403255598e5dea56 /xen/xsm
parent59e3eeb9ef559fa0db5efe69196aa78ee0c5bbea (diff)
downloadxen-47a3fb9662188c9e2f02a8a428e5cc72ce3f451a.tar.gz
xen-47a3fb9662188c9e2f02a8a428e5cc72ce3f451a.tar.bz2
xen-47a3fb9662188c9e2f02a8a428e5cc72ce3f451a.zip
x86: xsave save/restore support for both PV and HVM guests (version 2)
I have tested the patch in the following senarios: 1> Non-xsave platform 2> Xsave-capable platform, guest does not support xsave, xen support xsave 3> Xsave-capable platform, guest does support xsave, xen supports xsave 4> Guest (non-xsave) saved on platform without xsave, restored on a Xsave-capable system. All passed. 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