|
@@ -2000,6 +2000,16 @@ static int iommu_prepare_identity_map(struct pci_dev *pdev,
|
|
|
"IOMMU: Setting identity map for device %s [0x%Lx - 0x%Lx]\n",
|
|
|
pci_name(pdev), start, end);
|
|
|
|
|
|
+ if (end < start) {
|
|
|
+ WARN(1, "Your BIOS is broken; RMRR ends before it starts!\n"
|
|
|
+ "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
|
|
|
+ dmi_get_system_info(DMI_BIOS_VENDOR),
|
|
|
+ dmi_get_system_info(DMI_BIOS_VERSION),
|
|
|
+ dmi_get_system_info(DMI_PRODUCT_VERSION));
|
|
|
+ ret = -EIO;
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
+
|
|
|
if (end >> agaw_to_width(domain->agaw)) {
|
|
|
WARN(1, "Your BIOS is broken; RMRR exceeds permitted address width (%d bits)\n"
|
|
|
"BIOS vendor: %s; Ver: %s; Product Version: %s\n",
|