diff --git a/xen/arch/x86/shadow32.c b/xen/arch/x86/shadow32.c index 17f4e17ae9..e340ddf628 100644 --- a/xen/arch/x86/shadow32.c +++ b/xen/arch/x86/shadow32.c @@ -1381,8 +1381,11 @@ int shadow_mode_control(struct domain *d, dom0_shadow_control_t *sc) switch ( op ) { case DOM0_SHADOW_CONTROL_OP_OFF: - __shadow_sync_all(d); - __shadow_mode_disable(d); + if ( shadow_mode_enabled(d) ) + { + __shadow_sync_all(d); + __shadow_mode_disable(d); + } break; case DOM0_SHADOW_CONTROL_OP_ENABLE_TEST: diff --git a/xen/arch/x86/shadow_public.c b/xen/arch/x86/shadow_public.c index b96e13e64e..06d5bddb4f 100644 --- a/xen/arch/x86/shadow_public.c +++ b/xen/arch/x86/shadow_public.c @@ -1290,8 +1290,11 @@ int shadow_mode_control(struct domain *d, dom0_shadow_control_t *sc) switch ( op ) { case DOM0_SHADOW_CONTROL_OP_OFF: - __shadow_sync_all(d); - __shadow_mode_disable(d); + if ( shadow_mode_enabled(d) ) + { + __shadow_sync_all(d); + __shadow_mode_disable(d); + } break; case DOM0_SHADOW_CONTROL_OP_ENABLE_TEST: