Commit b7e8dee0 authored by Andrew Cooper's avatar Andrew Cooper

xen/dom0: Deprecate iommu_hwdom_inclusive and leave it disabled by default

This option is unique to x86 PV dom0's, but it is not sensible to have a
catch-all which blindly maps all non-RAM regions into the IOMMU.

The map-reserved option remains, and covers all the buggy firmware issues that
I am aware of.  The two common cases are legacy USB keyboard emulation, and
the BMC mailbox used by vendor firmware in NICs/HBAs to report information
back to the iLO/iDRAC/etc for remote remote management purposes.

A specific advantage of this change is that x86 dom0's IOMMU setup is now
consistent between PV and PVH.

This change is not expected to have any impact, due to map-reserved remaining.
In the unlikely case that it does cause an issue, we should introduce other
map-$SPECIFIC options rather than re-introducing this catch-all.
Signed-off-by: default avatarAndrew Cooper <andrew.cooper3@citrix.com>
Release-acked-by: default avatarJuergen Gross <jgross@suse.com>
Reviewed-by: default avatarRoger Pau Monné <roger.pau@citrix.com>
Reviewed-by: default avatarJan Beulich <jbeulich@suse.com>
parent 633a4094
......@@ -707,14 +707,16 @@ Controls for the dom0 IOMMU setup.
Where possible, finer grain corrections should be made with the `rmrr=`,
`ivrs_hpet=` or `ivrs_ioapic=` command line options.
This option is enabled by default on x86 systems, and invalid on ARM
systems.
This option is disabled by default, and deprecated and intended for
removal in future versions of Xen. If specifying `map-inclusive` is the
only way to make your system boot, please report a bug.
* The `map-reserved` functionality is very similar to `map-inclusive`.
The differences from `map-inclusive` are that `map-reserved` is applicable
to both x86 PV and PVH dom0's, and represents a subset of the correction
by only mapping reserved memory regions rather than all non-RAM regions.
to both x86 PV and PVH dom0's, is enabled by default, and represents a
subset of the correction by only mapping reserved memory regions rather
than all non-RAM regions.
### dom0_ioports_disable (x86)
> `= List of <hex>-<hex>`
......
......@@ -2714,10 +2714,10 @@ static int arm_smmu_iommu_domain_init(struct domain *d)
static void __hwdom_init arm_smmu_iommu_hwdom_init(struct domain *d)
{
/* Set to false options not supported on ARM. */
if ( iommu_hwdom_inclusive == 1 )
if ( iommu_hwdom_inclusive )
printk(XENLOG_WARNING
"map-inclusive dom0-iommu option is not supported on ARM\n");
iommu_hwdom_inclusive = 0;
iommu_hwdom_inclusive = false;
if ( iommu_hwdom_reserved == 1 )
printk(XENLOG_WARNING
"map-reserved dom0-iommu option is not supported on ARM\n");
......
......@@ -38,7 +38,7 @@ bool_t __read_mostly iommu_intremap = 1;
bool __hwdom_initdata iommu_hwdom_strict;
bool __read_mostly iommu_hwdom_passthrough;
int8_t __hwdom_initdata iommu_hwdom_inclusive = -1;
bool __hwdom_initdata iommu_hwdom_inclusive;
int8_t __hwdom_initdata iommu_hwdom_reserved = -1;
/*
......
......@@ -214,18 +214,21 @@ void __hwdom_init arch_iommu_hwdom_init(struct domain *d)
BUG_ON(!is_hardware_domain(d));
/* Inclusive mappings are enabled by default for PV. */
if ( iommu_hwdom_inclusive == -1 )
iommu_hwdom_inclusive = is_pv_domain(d);
/* Reserved IOMMU mappings are enabled by default. */
if ( iommu_hwdom_reserved == -1 )
iommu_hwdom_reserved = 1;
if ( iommu_hwdom_inclusive && !is_pv_domain(d) )
if ( iommu_hwdom_inclusive )
{
printk(XENLOG_WARNING
"IOMMU inclusive mappings are only supported on PV Dom0\n");
iommu_hwdom_inclusive = 0;
"IOMMU inclusive mappings are deprecated and will be removed in future versions\n");
if ( !is_pv_domain(d) )
{
printk(XENLOG_WARNING
"IOMMU inclusive mappings are only supported on PV Dom0\n");
iommu_hwdom_inclusive = false;
}
}
if ( iommu_hwdom_passthrough )
......
......@@ -60,8 +60,8 @@ extern bool_t iommu_hap_pt_share;
extern bool_t iommu_debug;
extern bool_t amd_iommu_perdev_intremap;
extern bool iommu_hwdom_strict, iommu_hwdom_passthrough;
extern int8_t iommu_hwdom_inclusive, iommu_hwdom_reserved;
extern bool iommu_hwdom_strict, iommu_hwdom_passthrough, iommu_hwdom_inclusive;
extern int8_t iommu_hwdom_reserved;
extern unsigned int iommu_dev_iotlb_timeout;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment