diff --git a/xen/arch/x86/include/asm/iocap.h b/xen/arch/x86/include/asm/iocap.h index 61d026dbf5..f948b7186e 100644 --- a/xen/arch/x86/include/asm/iocap.h +++ b/xen/arch/x86/include/asm/iocap.h @@ -19,7 +19,8 @@ (!rangeset_is_empty((d)->iomem_caps) || \ !rangeset_is_empty((d)->arch.ioport_caps)) -#define cache_flush_permitted has_arch_io_resources +#define cache_flush_permitted(d) \ + (has_arch_io_resources(d) || has_arch_pdevs(d)) static inline int ioports_permit_access(struct domain *d, unsigned long s, unsigned long e) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index a1703db762..657623336c 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -172,9 +172,7 @@ static DEFINE_SPINLOCK(subpage_ro_lock); #define l1_disallow_mask(d) \ (((d) != dom_io) && \ - (rangeset_is_empty((d)->iomem_caps) && \ - rangeset_is_empty((d)->arch.ioport_caps) && \ - !has_arch_pdevs(d) && \ + (!cache_flush_permitted(d) && \ is_pv_domain(d)) ? \ L1_DISALLOW_MASK : (L1_DISALLOW_MASK & ~PAGE_CACHE_ATTRS))