Flag that makes a dom0 use shadow paging. Only works when "pvh" is
enabled.
+### dom0-iommu
+> `= List of [ passthrough | strict ]`
+
+This list of booleans controls the iommu usage by Dom0:
+
+* `passthrough`: disables DMA remapping for Dom0. Default is `false`. Note that
+ this option is hard coded to `false` for a PVH Dom0 and any attempt to
+ overwrite it from the command line is ignored.
+
+* `strict`: sets up DMA remapping only for the RAM Dom0 actually got assigned.
+ Default is `false` which means Dom0 will get mappings for all the host
+ RAM except regions in use by Xen. Note that this option is hard coded to
+ `true` for a PVH Dom0 and any attempt to overwrite it from the command line
+ is ignored.
+
### dom0\_ioports\_disable (x86)
> `= List of <hex>-<hex>`
> `dom0-passthrough`
+> **WARNING: This command line option is deprecated, and superseded by
+> _dom0-iommu=passthrough_ - using both options in combination is undefined.**
+
> Default: `false`
>> Control whether to disable DMA remapping for Dom0.
> `dom0-strict`
+> **WARNING: This command line option is deprecated, and superseded by
+> _dom0-iommu=strict_ - using both options in combination is undefined.**
+
> Default: `false`
>> Control whether to set up DMA remapping only for the memory Dom0 actually
return rc;
}
+static int __init parse_dom0_iommu_param(const char *s)
+{
+ const char *ss;
+ int rc = 0;
+
+ do {
+ int val;
+
+ ss = strchr(s, ',');
+ if ( !ss )
+ ss = strchr(s, '\0');
+
+ if ( (val = parse_boolean("passthrough", s, ss)) >= 0 )
+ iommu_hwdom_passthrough = val;
+ else if ( (val = parse_boolean("strict", s, ss)) >= 0 )
+ iommu_hwdom_strict = val;
+ else
+ rc = -EINVAL;
+
+ s = ss + 1;
+ } while ( *ss );
+
+ return rc;
+}
+custom_param("dom0-iommu", parse_dom0_iommu_param);
+
int iommu_domain_init(struct domain *d)
{
struct domain_iommu *hd = dom_iommu(d);
arch_iommu_check_autotranslated_hwdom(d);
- if ( iommu_hwdom_passthrough )
- panic("Dom0 uses paging translated mode, dom0-passthrough must not be enabled\n");
-
+ iommu_hwdom_passthrough = false;
iommu_hwdom_strict = true;
}