Sfoglia il codice sorgente

Merge branch 'iommu-fixes-2.6.28' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu into x86/urgent

Ingo Molnar 16 anni fa
parent
commit
c9bc03ac31
2 ha cambiato i file con 7 aggiunte e 2 eliminazioni
  1. 3 2
      arch/x86/kernel/amd_iommu.c
  2. 4 0
      arch/x86/kernel/amd_iommu_init.c

+ 3 - 2
arch/x86/kernel/amd_iommu.c

@@ -235,8 +235,9 @@ static int iommu_completion_wait(struct amd_iommu *iommu)
 	status &= ~MMIO_STATUS_COM_WAIT_INT_MASK;
 	status &= ~MMIO_STATUS_COM_WAIT_INT_MASK;
 	writel(status, iommu->mmio_base + MMIO_STATUS_OFFSET);
 	writel(status, iommu->mmio_base + MMIO_STATUS_OFFSET);
 
 
-	if (unlikely((i == EXIT_LOOP_COUNT) && printk_ratelimit()))
-		printk(KERN_WARNING "AMD IOMMU: Completion wait loop failed\n");
+	if (unlikely(i == EXIT_LOOP_COUNT))
+		panic("AMD IOMMU: Completion wait loop failed\n");
+
 out:
 out:
 	spin_unlock_irqrestore(&iommu->lock, flags);
 	spin_unlock_irqrestore(&iommu->lock, flags);
 
 

+ 4 - 0
arch/x86/kernel/amd_iommu_init.c

@@ -427,6 +427,10 @@ static u8 * __init alloc_command_buffer(struct amd_iommu *iommu)
 	memcpy_toio(iommu->mmio_base + MMIO_CMD_BUF_OFFSET,
 	memcpy_toio(iommu->mmio_base + MMIO_CMD_BUF_OFFSET,
 			&entry, sizeof(entry));
 			&entry, sizeof(entry));
 
 
+	/* set head and tail to zero manually */
+	writel(0x00, iommu->mmio_base + MMIO_CMD_HEAD_OFFSET);
+	writel(0x00, iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
+
 	iommu_feature_enable(iommu, CONTROL_CMDBUF_EN);
 	iommu_feature_enable(iommu, CONTROL_CMDBUF_EN);
 
 
 	return cmd_buf;
 	return cmd_buf;