diff --git a/docs/misc/xen-command-line.pandoc b/docs/misc/xen-command-line.pandoc index 139c4e1d8a..6a3377519b 100644 --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -667,7 +667,7 @@ Controls for how dom0 is constructed on x86 systems. ### dom0-iommu = List of [ passthrough=, strict=, map-inclusive=, - map-reserved= ] + map-reserved=, none ] Controls for the dom0 IOMMU setup. @@ -718,6 +718,12 @@ Controls for the dom0 IOMMU setup. subset of the correction by only mapping reserved memory regions rather than all non-RAM regions. +* The `none` option is intended for development purposes only, and skips + certain safety checks pertaining to the correct IOMMU configuration for + dom0 to boot. + + Incorrect use of this option may result in a malfunctioning system. + ### dom0_ioports_disable (x86) > `= List of -` diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index febb69393a..17c0c729a6 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -36,6 +36,7 @@ bool_t __read_mostly iommu_snoop = 1; bool_t __read_mostly iommu_qinval = 1; bool_t __read_mostly iommu_intremap = 1; +static bool __hwdom_initdata iommu_hwdom_none; bool __hwdom_initdata iommu_hwdom_strict; bool __read_mostly iommu_hwdom_passthrough; bool __hwdom_initdata iommu_hwdom_inclusive; @@ -131,6 +132,8 @@ static int __init parse_dom0_iommu_param(const char *s) iommu_hwdom_inclusive = val; else if ( (val = parse_boolean("map-reserved", s, ss)) >= 0 ) iommu_hwdom_reserved = val; + else if ( !cmdline_strcmp(s, "none") ) + iommu_hwdom_none = true; else rc = -EINVAL; @@ -159,7 +162,7 @@ int iommu_domain_init(struct domain *d) static void __hwdom_init check_hwdom_reqs(struct domain *d) { - if ( !paging_mode_translate(d) ) + if ( iommu_hwdom_none || !paging_mode_translate(d) ) return; arch_iommu_check_autotranslated_hwdom(d);