summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorYu Zhao <yu.zhao@intel.com>2009-01-04 16:28:52 +0800
committerDavid Woodhouse <David.Woodhouse@intel.com>2009-02-09 11:03:17 +0000
commit704126ad81b8cb7d3d70adb9ecb143f4d3fb38af (patch)
treee73c4d595799661757b7505cd67833addef0635e /include
parent43f7392ba9e2585bf34f21399b1ed78692b5d437 (diff)
downloadop-kernel-dev-704126ad81b8cb7d3d70adb9ecb143f4d3fb38af.zip
op-kernel-dev-704126ad81b8cb7d3d70adb9ecb143f4d3fb38af.tar.gz
VT-d: handle Invalidation Queue Error to avoid system hang
When hardware detects any error with a descriptor from the invalidation queue, it stops fetching new descriptors from the queue until software clears the Invalidation Queue Error bit in the Fault Status register. Following fix handles the IQE so the kernel won't be trapped in an infinite loop. Signed-off-by: Yu Zhao <yu.zhao@intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/intel-iommu.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
index c4f6c10..d2e3cbf 100644
--- a/include/linux/intel-iommu.h
+++ b/include/linux/intel-iommu.h
@@ -194,6 +194,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
/* FSTS_REG */
#define DMA_FSTS_PPF ((u32)2)
#define DMA_FSTS_PFO ((u32)1)
+#define DMA_FSTS_IQE (1 << 4)
#define dma_fsts_fault_record_index(s) (((s) >> 8) & 0xff)
/* FRCD_REG, 32 bits access */
@@ -328,7 +329,7 @@ extern int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr,
unsigned int size_order, u64 type,
int non_present_entry_flush);
-extern void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu);
+extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu);
extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t);
extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t);
OpenPOWER on IntegriCloud