• Igor Mammedov's avatar
    x86/mm/64: Enable SWIOTLB if system has SRAT memory regions above MAX_DMA32_PFN · ec941c5f
    Igor Mammedov authored
    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.
    Signed-off-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: akataria@vmware.com
    Cc: fujita.tomonori@lab.ntt.co.jp
    Cc: konrad.wilk@oracle.com
    Cc: pbonzini@redhat.com
    Cc: revers@redhat.com
    Cc: riel@redhat.com
    Link: http://lkml.kernel.org/r/1449234426-273049-3-git-send-email-imammedo@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    ec941c5f
pci-swiotlb.c 2.89 KB