[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 1/4] xen: make logdirty and iommu mutually exclusive
Prevent the usage of global logdirty if the domain is using the IOMMU, and also prevent passthrough of devices if logdirty is enabled. Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx> Cc: Tim Deegan <tim@xxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/mm/hap/hap.c | 9 +++++++++ xen/arch/x86/mm/shadow/common.c | 9 +++++++++ xen/drivers/passthrough/iommu.c | 3 ++- 3 files changed, 20 insertions(+), 1 deletions(-) diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c index 68a0c25..352edfd 100644 --- a/xen/arch/x86/mm/hap/hap.c +++ b/xen/arch/x86/mm/hap/hap.c @@ -175,6 +175,15 @@ out: */ static int hap_enable_log_dirty(struct domain *d, bool_t log_global) { + + if ( iommu_enabled && need_iommu(d) && log_global ) + { + /* + * Refuse to turn on global log-dirty mode + * if the domain is using the IOMMU. + */ + return -EINVAL; + } /* turn on PG_log_dirty bit in paging mode */ paging_lock(d); d->arch.paging.mode |= PG_log_dirty; diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 9258d2a..dd55455 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -3422,6 +3422,15 @@ int shadow_enable_log_dirty(struct domain *d, bool_t log_global) { int ret; + if ( iommu_enabled && need_iommu(d) && log_global ) + { + /* + * Refuse to turn on global log-dirty mode + * if the domain is using the IOMMU. + */ + return -EINVAL; + } + paging_lock(d); if ( shadow_mode_enabled(d) ) { diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index 0cf0748..ef6660f 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -292,7 +292,8 @@ static int assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn) * enabled for this domain */ if ( unlikely(!need_iommu(d) && (d->arch.hvm_domain.mem_sharing_enabled || - d->mem_event->paging.ring_page)) ) + d->mem_event->paging.ring_page || + paging_mode_log_dirty(d))) ) return -EXDEV; if ( !spin_trylock(&pcidevs_lock) ) -- 1.7.7.5 (Apple Git-26) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |