[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] vtd: fix multiple Dom0 S3 on hosts that support Queued Invalidation.



On such hosts we can't do multiple Dom0 S3 when VT-d is enabled.
The cause is: during the first S3 resume, init_vtd_hw() initializes the
invalidation function pointers to the register-based ones and later
enable_qinval() forgets to overwrite the flush function pointers to
queued-based ones, so actually Queued Invalidaton is enabled, but we actually
use the register-based invalidation function! Later during the second Dom0 S3,
in iommu_suspend() -> iommu_flush_all(), we try to use the register-based
invalidation functions to perform global flush while Queued Invalidation is
enabed, and this can cause a host reset because VT-d spec says: when the
queued invalidation is enabled, software must submit invalidation commands only
through the IQ (and not through any invalidation command registers).

The attached patch fixes the buggy enable_qinval(). And in iommu_resume(), we
invoke iommu_flush_all() for safety.

Signed-off-by: Dexuan Cui <dexuan.cui@xxxxxxxxx>

Attachment: fix_qi_flush_functiones.patch
Description: fix_qi_flush_functiones.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.