Merge git://git.infradead.org/iommu-2.6
* git://git.infradead.org/iommu-2.6: intel-iommu: Avoid panic() for DRHD at address zero. Intel-IOMMU Alignment Issue in dma_pte_clear_range()
This commit is contained in:
@@ -173,12 +173,21 @@ dmar_parse_one_drhd(struct acpi_dmar_header *header)
|
|||||||
struct dmar_drhd_unit *dmaru;
|
struct dmar_drhd_unit *dmaru;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
drhd = (struct acpi_dmar_hardware_unit *)header;
|
||||||
|
if (!drhd->address) {
|
||||||
|
/* Promote an attitude of violence to a BIOS engineer today */
|
||||||
|
WARN(1, "Your BIOS is broken; DMAR reported at address zero!\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));
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
dmaru = kzalloc(sizeof(*dmaru), GFP_KERNEL);
|
dmaru = kzalloc(sizeof(*dmaru), GFP_KERNEL);
|
||||||
if (!dmaru)
|
if (!dmaru)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
dmaru->hdr = header;
|
dmaru->hdr = header;
|
||||||
drhd = (struct acpi_dmar_hardware_unit *)header;
|
|
||||||
dmaru->reg_base_addr = drhd->address;
|
dmaru->reg_base_addr = drhd->address;
|
||||||
dmaru->segment = drhd->segment;
|
dmaru->segment = drhd->segment;
|
||||||
dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */
|
dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */
|
||||||
|
@@ -733,8 +733,8 @@ static void dma_pte_clear_range(struct dmar_domain *domain, u64 start, u64 end)
|
|||||||
start &= (((u64)1) << addr_width) - 1;
|
start &= (((u64)1) << addr_width) - 1;
|
||||||
end &= (((u64)1) << addr_width) - 1;
|
end &= (((u64)1) << addr_width) - 1;
|
||||||
/* in case it's partial page */
|
/* in case it's partial page */
|
||||||
start = PAGE_ALIGN(start);
|
start &= PAGE_MASK;
|
||||||
end &= PAGE_MASK;
|
end = PAGE_ALIGN(end);
|
||||||
npages = (end - start) / VTD_PAGE_SIZE;
|
npages = (end - start) / VTD_PAGE_SIZE;
|
||||||
|
|
||||||
/* we don't need lock here, nobody else touches the iova range */
|
/* we don't need lock here, nobody else touches the iova range */
|
||||||
|
Reference in New Issue
Block a user