diff options
author | Keir Fraser <keir@xen.org> | 2010-11-08 15:44:02 +0000 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2010-11-08 15:44:02 +0000 |
commit | 47a3fb9662188c9e2f02a8a428e5cc72ce3f451a (patch) | |
tree | 00d8ee313ffbbb361ef58cde403255598e5dea56 /xen/xsm | |
parent | 59e3eeb9ef559fa0db5efe69196aa78ee0c5bbea (diff) | |
download | xen-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.c | 20 | ||||
-rw-r--r-- | xen/xsm/flask/include/av_permissions.h | 2 |
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 |