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

[Xen-devel] [PATCH v6 0/5] VT-d Device-TLB flush issue



This patches fix current timeout concern and also allow limited ATS support:

1. Check VT-d Device-TLB flush error.
   This patch set checks all kinds of error and all the way up the call trees 
of VT-d Device-TLB flush.

2. Make the pcidevs_lock a recursive one.

3. Reduce spin timeout to 1ms, which can be boot-time changed with 
'vtd_qi_timeout'.
   For example:
           multiboot /boot/xen.gz ats=1 vtd_qi_timeout=100

4. Fix vt-d Device-TLB flush timeout issue.
   If Device-TLB flush is timeout, we'll hide the target ATS device and crash 
the domain owning this ATS device.
   If impacted domain is hardware domain, just throw out a warning.
   The hidden device will be disallowed to be further assigned to  any domain.

----

 * DMAR_OPERATION_TIMEOUT should be also chopped down to a low number of 
milliseconds.
   As Kevin Tian mentioned in 'Revisit VT-d asynchronous flush issue', We also 
confirmed with hardware team
   that 1ms is large enough for IOMMU internal flush. So I can change 
DMAR_OPERATION_TIMEOUT from 1000 ms to 1 ms.

   IOMMU_WAIT_OP() is only for VT-d registers read/write, and there is also a 
panic. We need a further discussion
   whether or how to remove this panic in next patch set.

 * The coming patch set will fix IOTLB/Context/IETC flush timeout.

--Changes in v6:

#patch 1/2
   * Make a reasonable attempt at splitting things, adjusting top level 
functions first and then
     working your way down to leaf ones.
   * Remove some pointless initializers.
   * Log error and don't return error value for hardware_domain init and 
crashed system shutdown.
   * when to populate iommu page table for domu, try to tear down the iommu 
page table for iommu
     iotlb flush error.
   * when the flush_iotlb_qi() return value is positive, All we need is
     -call iommu_flush_write_buffer() only when rc > 0
     -return zero from this function when rc is positive, or rc = 0 after call 
iommu_flush_write_buffer().
   * Fix v4 unaddressed issue:
     http://lists.xenproject.org/archives/html/xen-devel/2016-01/msg01555.html


#patch 3
   * A new patch, make the pcidevs_lock a recursive one (Remove v4 pcidevs_lock 
related patches).

#patch 4
   * Add an entry in docs/misc/xen-command-line.markdown _alphabetically_.
   * Add a __must_check annotation on the function queue_invalidate_wait().

#patch 5
   * Add Stray blanks inside the parentheses.
   * Don't iterate over pdev-s without holding that lock, and hold pcidevs_lock 
for pdev-s list.
   * Print SBDF in canonical ssss:bb:dd.f form.
   * Handle 'ret'/'rc' variables in the same function, and remove the pointless 
rc.

Quan Xu (5):
  IOMMU/MMU: Adjust top level functions for VT-d Device-TLB flush error
  IOMMU/MMU: Adjust low level functions for VT-d Device-TLB flush error
  IOMMU: Make the pcidevs_lock a recursive one
  VT-d: Reduce spin timeout to 1ms, which can be boot-time changed
  VT-d: Fix vt-d Device-TLB flush timeout issue

 docs/misc/xen-command-line.markdown           |   7 ++
 xen/arch/x86/acpi/power.c                     |  14 ++-
 xen/arch/x86/domctl.c                         |   8 +-
 xen/arch/x86/hvm/vmsi.c                       |   4 +-
 xen/arch/x86/irq.c                            |   8 +-
 xen/arch/x86/mm.c                             |  13 ++-
 xen/arch/x86/mm/p2m-ept.c                     |  12 ++-
 xen/arch/x86/mm/p2m-pt.c                      |  12 ++-
 xen/arch/x86/msi.c                            |  16 +--
 xen/arch/x86/pci.c                            |   4 +-
 xen/arch/x86/physdev.c                        |  16 +--
 xen/common/grant_table.c                      |   5 +-
 xen/common/memory.c                           |   5 +-
 xen/common/sysctl.c                           |   4 +-
 xen/drivers/passthrough/amd/iommu_init.c      |  21 ++--
 xen/drivers/passthrough/amd/iommu_map.c       |   2 +-
 xen/drivers/passthrough/amd/pci_amd_iommu.c   |   6 +-
 xen/drivers/passthrough/arm/smmu.c            |  10 +-
 xen/drivers/passthrough/iommu.c               |  25 +++--
 xen/drivers/passthrough/pci.c                 |  99 ++++++++++---------
 xen/drivers/passthrough/vtd/extern.h          |   4 +-
 xen/drivers/passthrough/vtd/iommu.c           | 134 +++++++++++++++++---------
 xen/drivers/passthrough/vtd/qinval.c          |  80 +++++++++++++--
 xen/drivers/passthrough/vtd/quirks.c          |  26 +++--
 xen/drivers/passthrough/vtd/x86/ats.c         |  12 +++
 xen/drivers/passthrough/vtd/x86/vtd.c         |   7 +-
 xen/drivers/passthrough/x86/iommu.c           |   6 +-
 xen/drivers/video/vga.c                       |   4 +-
 xen/include/asm-x86/hvm/svm/amd-iommu-proto.h |   2 +-
 xen/include/asm-x86/iommu.h                   |   2 +-
 xen/include/xen/iommu.h                       |  12 +--
 xen/include/xen/pci.h                         |   5 +-
 32 files changed, 399 insertions(+), 186 deletions(-)

-- 
1.9.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

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