aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/dmar.c
diff options
context:
space:
mode:
authorJoseph Cihula <joseph.cihula@intel.com>2009-06-30 22:31:10 -0400
committerH. Peter Anvin <hpa@zytor.com>2009-07-21 14:50:42 -0400
commita59b50e995465911ba580df0bd10cf64aa81fc43 (patch)
treeb3e97a338ebfd2299675af14b5863ff0dd0b2548 /drivers/pci/dmar.c
parent86886e55b273f565935491816c7c96b82469d4f8 (diff)
intel_txt: Force IOMMU on for Intel TXT launch
The tboot module will DMA protect all of memory in order to ensure the that kernel will be able to initialize without compromise (from DMA). Consequently, the kernel must enable Intel Virtualization Technology for Directed I/O (VT-d or Intel IOMMU) in order to replace this broad protection with the appropriate page-granular protection. Otherwise DMA devices will be unable to read or write from memory and the kernel will eventually panic. Because runtime IOMMU support is configurable by command line options, this patch will force it to be enabled regardless of the options specified, and will log a message if it was required to force it on. dmar.c | 7 +++++++ intel-iommu.c | 17 +++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) Signed-off-by: Joseph Cihula <joseph.cihula@intel.com> Signed-off-by: Shane Wang <shane.wang@intel.com> Cc: David Woodhouse <dwmw2@infradead.org> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'drivers/pci/dmar.c')
-rw-r--r--drivers/pci/dmar.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c
index 7b287cb38b7a..0cbc5fd26c3c 100644
--- a/drivers/pci/dmar.c
+++ b/drivers/pci/dmar.c
@@ -33,6 +33,7 @@
33#include <linux/timer.h> 33#include <linux/timer.h>
34#include <linux/irq.h> 34#include <linux/irq.h>
35#include <linux/interrupt.h> 35#include <linux/interrupt.h>
36#include <asm/tboot.h>
36 37
37#undef PREFIX 38#undef PREFIX
38#define PREFIX "DMAR:" 39#define PREFIX "DMAR:"
@@ -413,6 +414,12 @@ parse_dmar_table(void)
413 */ 414 */
414 dmar_table_detect(); 415 dmar_table_detect();
415 416
417 /*
418 * ACPI tables may not be DMA protected by tboot, so use DMAR copy
419 * SINIT saved in SinitMleData in TXT heap (which is DMA protected)
420 */
421 dmar_tbl = tboot_get_dmar_table(dmar_tbl);
422
416 dmar = (struct acpi_table_dmar *)dmar_tbl; 423 dmar = (struct acpi_table_dmar *)dmar_tbl;
417 if (!dmar) 424 if (!dmar)
418 return -ENODEV; 425 return -ENODEV;