瀏覽代碼

Add domain flag DOMAIN_FLAG_VIRTUAL_MACHINE

Add this flag for VT-d used in virtual machine, like KVM.

Signed-off-by: Weidong Han <weidong.han@intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Weidong Han 16 年之前
父節點
當前提交
1ce28feb22
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      drivers/pci/intel-iommu.c

+ 7 - 0
drivers/pci/intel-iommu.c

@@ -206,6 +206,11 @@ static inline bool dma_pte_present(struct dma_pte *pte)
 /* devices under the same p2p bridge are owned in one domain */
 /* devices under the same p2p bridge are owned in one domain */
 #define DOMAIN_FLAG_P2P_MULTIPLE_DEVICES (1 < 0)
 #define DOMAIN_FLAG_P2P_MULTIPLE_DEVICES (1 < 0)
 
 
+/* domain represents a virtual machine, more than one devices
+ * across iommus may be owned in one domain, e.g. kvm guest.
+ */
+#define DOMAIN_FLAG_VIRTUAL_MACHINE	(1 << 1)
+
 struct dmar_domain {
 struct dmar_domain {
 	int	id;			/* domain id */
 	int	id;			/* domain id */
 	unsigned long iommu_bmp;	/* bitmap of iommus this domain uses*/
 	unsigned long iommu_bmp;	/* bitmap of iommus this domain uses*/
@@ -391,6 +396,8 @@ static struct intel_iommu *domain_get_iommu(struct dmar_domain *domain)
 {
 {
 	int iommu_id;
 	int iommu_id;
 
 
+	BUG_ON(domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE);
+
 	iommu_id = find_first_bit(&domain->iommu_bmp, g_num_of_iommus);
 	iommu_id = find_first_bit(&domain->iommu_bmp, g_num_of_iommus);
 	if (iommu_id < 0 || iommu_id >= g_num_of_iommus)
 	if (iommu_id < 0 || iommu_id >= g_num_of_iommus)
 		return NULL;
 		return NULL;