Messages in this thread | | | From | Igor Mammedov <> | Subject | [PATCH v2 0/2] x86: enable SWIOTLB if system has SRAT memory regions above MAX_DMA32_PFN | Date | Fri, 4 Dec 2015 12:25:47 +0100 |
| |
changes since v1: - reduce # of #ifdefs by introducing max_possible_pfn global variable - don't check 'acpi_no_memhotplug=1' for disabling SWIOTLB initialization, since existing 'no_iommu' kernel option could be used to the same effect. - split into 2 patches - 1st adds max_possible_pfn, - 2nd fixes bug enabling SWIOTLB when it's needed
when memory hotplug enabled system is booted with less than 4GB of RAM and then later more RAM is hotplugged 32-bit devices stop functioning with following error:
nommu_map_single: overflow 327b4f8c0+1522 of device mask ffffffff
the reason for this is that if x86_64 system were booted with RAM less than 4GB, it doesn't enable SWIOTLB and when memory is hotplugged beyond MAX_DMA32_PFN, devices that expect 32-bit addresses can't handle 64-bit addresses.
Fix it by tracking max possible PFN when parsing memory affinity structures from SRAT ACPI table and enable SWIOTLB if there is hotpluggable memory regions beyond MAX_DMA32_PFN.
It fixes KVM guests when they use emulated devices (reproduces with ata_piix, e1000 and usb devices, RHBZ: 1275941, 1275977, 1271527) It also fixes the HyperV, VMWare with emulated devices which are affected by this issue as well.
ref to v1: https://lkml.org/lkml/2015/11/30/594
Igor Mammedov (2): x86: introduce max_possible_pfn x86_64: enable SWIOTLB if system has SRAT memory regions above MAX_DMA32_PFN
arch/x86/kernel/pci-swiotlb.c | 2 +- arch/x86/kernel/setup.c | 2 ++ arch/x86/mm/srat.c | 3 +++ include/linux/bootmem.h | 4 ++++ mm/bootmem.c | 1 + mm/nobootmem.c | 1 + 6 files changed, 12 insertions(+), 1 deletion(-)
-- 1.8.3.1
| |