diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 3f43cbabe1..3430b13dcd 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -3811,14 +3811,11 @@ long do_mmuext_op( break; case MMUEXT_FLUSH_CACHE: - if ( unlikely(currd != pg_owner) ) - rc = -EPERM; - else if ( unlikely(!cache_flush_permitted(currd)) ) - rc = -EACCES; - else - wbinvd(); - break; - + /* + * Dirty pCPU caches where the current vCPU has been scheduled are + * not tracked, and hence we need to resort to a global cache + * flush for correctness. + */ case MMUEXT_FLUSH_CACHE_GLOBAL: if ( unlikely(currd != pg_owner) ) rc = -EPERM; @@ -3835,7 +3832,7 @@ long do_mmuext_op( flush_mask(mask, FLUSH_CACHE); } else - rc = -EINVAL; + rc = -EACCES; break; case MMUEXT_SET_LDT: