Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752685AbbLDMdP (ORCPT ); Fri, 4 Dec 2015 07:33:15 -0500 Received: from mx1.redhat.com ([209.132.183.28]:50841 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751909AbbLDMdO convert rfc822-to-8bit (ORCPT ); Fri, 4 Dec 2015 07:33:14 -0500 Date: Fri, 4 Dec 2015 13:33:10 +0100 From: Igor Mammedov To: Ingo Molnar Cc: linux-kernel@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com, konrad.wilk@oracle.com, akataria@vmware.com, fujita.tomonori@lab.ntt.co.jp, revers@redhat.com, riel@redhat.com, pbonzini@redhat.com Subject: Re: [PATCH v2 2/2] x86_64: enable SWIOTLB if system has SRAT memory regions above MAX_DMA32_PFN Message-ID: <20151204133310.04938fb5@nial.brq.redhat.com> In-Reply-To: <20151204114949.GA15308@gmail.com> References: <1449228349-243508-1-git-send-email-imammedo@redhat.com> <1449228349-243508-3-git-send-email-imammedo@redhat.com> <20151204114949.GA15308@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3245 Lines: 89 On Fri, 4 Dec 2015 12:49:49 +0100 Ingo Molnar wrote: > > * Igor Mammedov wrote: > > > 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: Igor Mammedov > > --- > > arch/x86/kernel/pci-swiotlb.c | 2 +- > > arch/x86/mm/srat.c | 3 +++ > > 2 files changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c > > index adf0392..7c577a1 100644 > > --- a/arch/x86/kernel/pci-swiotlb.c > > +++ b/arch/x86/kernel/pci-swiotlb.c > > @@ -88,7 +88,7 @@ int __init pci_swiotlb_detect_4gb(void) > > { > > /* don't initialize swiotlb if iommu=off (no_iommu=1) */ > > #ifdef CONFIG_X86_64 > > - if (!no_iommu && max_pfn > MAX_DMA32_PFN) > > + if (!no_iommu && max_possible_pfn > MAX_DMA32_PFN) > > swiotlb = 1; > > Ok, this series looks a lot better! > > > #endif > > return swiotlb; > > diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c > > index c2aea63..a26bdbe 100644 > > --- a/arch/x86/mm/srat.c > > +++ b/arch/x86/mm/srat.c > > @@ -203,6 +203,9 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma) > > pr_warn("SRAT: Failed to mark hotplug range [mem %#010Lx-%#010Lx] in memblock\n", > > (unsigned long long)start, (unsigned long long)end - 1); > > > > + if (max_possible_pfn < PFN_UP(end - 1)) > > + max_possible_pfn = PFN_UP(end - 1); > > Small nit, why not write this as something like: > > max_possible_pfn = max(max_possible_pfn, PFN_UP(end - 1)); That doesn't pass strict type check: include/linux/kernel.h:730:17: warning: comparison of distinct pointer types lacks a cast [enabled by default] (void) (&_max1 == &_max2); \ ^ arch/x86/mm/srat.c:206:21: note: in expansion of macro ‘max’ max_possible_pfn = max(max_possible_pfn, PFN_UP(end - 1)); I can change max_possible_pfn to u64 to match PFN_UP(end - 1) type. > > ? > > I'd also move this second hunk to the first patch, because logically it belongs > there (or into a third patch). > > Thanks, > > Ingo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/