dmar: Fix build failure without NUMA, warn on bogus RHSA tables and don't abort

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
David Woodhouse 2009-10-07 12:18:00 +01:00
Родитель 4c923d4714
Коммит aa697079ee
1 изменённых файлов: 14 добавлений и 3 удалений

Просмотреть файл

@ -348,6 +348,7 @@ found:
} }
#endif #endif
#ifdef CONFIG_ACPI_NUMA
static int __init static int __init
dmar_parse_one_rhsa(struct acpi_dmar_header *header) dmar_parse_one_rhsa(struct acpi_dmar_header *header)
{ {
@ -355,18 +356,26 @@ dmar_parse_one_rhsa(struct acpi_dmar_header *header)
struct dmar_drhd_unit *drhd; struct dmar_drhd_unit *drhd;
rhsa = (struct acpi_dmar_rhsa *)header; rhsa = (struct acpi_dmar_rhsa *)header;
for_each_drhd_unit(drhd) for_each_drhd_unit(drhd) {
if (drhd->reg_base_addr == rhsa->base_address) { if (drhd->reg_base_addr == rhsa->base_address) {
int node = acpi_map_pxm_to_node(rhsa->proximity_domain); int node = acpi_map_pxm_to_node(rhsa->proximity_domain);
if (!node_online(node)) if (!node_online(node))
node = -1; node = -1;
drhd->iommu->node = node; drhd->iommu->node = node;
return 0; return 0;
}
} }
WARN(1, "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"
"BIOS vendor: %s; Ver: %s; Product Version: %s\n",
drhd->reg_base_addr,
dmi_get_system_info(DMI_BIOS_VENDOR),
dmi_get_system_info(DMI_BIOS_VERSION),
dmi_get_system_info(DMI_PRODUCT_VERSION));
return -ENODEV; return 0;
} }
#endif
static void __init static void __init
dmar_table_print_dmar_entry(struct acpi_dmar_header *header) dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
@ -487,7 +496,9 @@ parse_dmar_table(void)
#endif #endif
break; break;
case ACPI_DMAR_HARDWARE_AFFINITY: case ACPI_DMAR_HARDWARE_AFFINITY:
#ifdef CONFIG_ACPI_NUMA
ret = dmar_parse_one_rhsa(entry_header); ret = dmar_parse_one_rhsa(entry_header);
#endif
break; break;
default: default:
printk(KERN_WARNING PREFIX printk(KERN_WARNING PREFIX