[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] VT-d: Don't assume register-based invalidation is always supported
On 01.04.2020 22:06, Chao Gao wrote: > According to Intel VT-d SPEC rev3.3 Section 6.5, Register-based Invalidation > isn't supported by Intel VT-d version 6 and beyond. > > This hardware change impacts following two scenarios: admin can disable > queued invalidation via 'qinval' cmdline and use register-based interface; > VT-d switches to register-based invalidation when queued invalidation needs > to be disabled, for example, during disabling x2apic or during system > suspension or after enabling queued invalidation fails. > > To deal with this hardware change, if register-based invalidation isn't > supported, queued invalidation cannot be disabled through Xen cmdline; and > if queued invalidation has to be disabled temporarily in some scenarios, > VT-d won't switch to register-based interface but use some dummy functions > to catch errors in case there is any invalidation request issued when queued > invalidation is disabled. > > Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> In principle (with a minor nit further down) Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> However, ... > --- > Changes in v2: > - verify system suspension and resumption with this patch applied > - don't fall back to register-based interface if enabling qinval failed. > see the change in init_vtd_hw(). > - remove unnecessary "queued_inval_supported" variable > - constify the "struct vtd_iommu *" of has_register_based_invalidation() > - coding-style changes ... while this suggests this is v2 of a recently sent patch, the submission is dated a little over a year ago. This is confusing. It is additionally confusing that there were two copies of it in my inbox, despite mails coming from a list normally getting de-duplicated somewhere at our end (I believe). > --- a/xen/drivers/passthrough/vtd/iommu.c > +++ b/xen/drivers/passthrough/vtd/iommu.c > @@ -1193,6 +1193,14 @@ int __init iommu_alloc(struct acpi_drhd_unit *drhd) > > iommu->cap = dmar_readq(iommu->reg, DMAR_CAP_REG); > iommu->ecap = dmar_readq(iommu->reg, DMAR_ECAP_REG); > + iommu->version = dmar_readl(iommu->reg, DMAR_VER_REG); > + > + if ( !iommu_qinval && !has_register_based_invalidation(iommu) ) > + { > + printk(XENLOG_WARNING VTDPREFIX "IOMMU %d: cannot disable Queued > Invalidation.\n", > + iommu->index); Here (and at least once more yet further down): We don't normally end log messages with a full stop. Easily addressable while committing, of course. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |