From patchwork Tue Mar 28 12:35:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vijay Kilari X-Patchwork-Id: 9649093 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 120F8601E9 for ; Tue, 28 Mar 2017 12:40:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E829321F61 for ; Tue, 28 Mar 2017 12:40:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DB22C2839C; Tue, 28 Mar 2017 12:40:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.6 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 37A4621F61 for ; Tue, 28 Mar 2017 12:40:47 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1csqM2-0005WX-I2; Tue, 28 Mar 2017 12:36:06 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1csqM1-0005WO-19 for xen-devel@lists.xen.org; Tue, 28 Mar 2017 12:36:05 +0000 Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id 87/51-01710-4B85AD85; Tue, 28 Mar 2017 12:36:04 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupgkeJIrShJLcpLzFFi42Lxqg121t0QcSv C4O8tHYslHxezODB6HN39mymAMYo1My8pvyKBNWPvpx72gnNqFbcPPmZtYJwv38XIxSEkMIFR YsPJgywgDovAJRaJM7tPATmcHBIC71gkfj/kh7BjJObM3ckKYVdLzPh2GcwWElCV6Pj/lh1i0 ndGiSlnvrCBJNgEZCSOPD/ABGKLCEhLXPt8mRGkiFmgmUmib/cSsCJhgQCJo6dfsYPYLECTDp x8BRbnFXCT+LNhClADB9A2BYk5k2wmMPItYGRYxahRnFpUllqka2igl1SUmZ5RkpuYmQPkmer lphYXJ6an5iQmFesl5+duYgSGCgMQ7GBcM9X5EKMkB5OSKO+HoFsRQnxJ+SmVGYnFGfFFpTmp xYcYZTg4lCR4fcOBcoJFqempFWmZOcCghUlLcPAoifC2g6R5iwsSc4sz0yFSpxh1OT70H37DJ MSSl5+XKiXO+ywMqEgApCijNA9uBCyCLjHKSgnzMgIdJcRTkFqUm1mCKv+KUZyDUUmYNw1kFU 9mXgncpldARzABHSFuA3ZESSJCSqqBcULkkoXCxur1SyZO4fYOFGP97bJM6cLBM15n+eZ+ff9 qLq/B2kerw9XdzWvcGWTkN56UiTlgUvbpAl9J2czL6yZ+0zM5N2lxJpvwpv8xDR9f28qV5Hwp TcmcNHG3U7WUnfFE4XJbLefS82JvAjIqp+2Ku8uxdW5kiDMPx+GF5/xM3P8d/hVnrMRSnJFoq MVcVJwIALFCUi6bAgAA X-Env-Sender: vijay.kilari@gmail.com X-Msg-Ref: server-6.tower-206.messagelabs.com!1490704559!91558763!1 X-Originating-IP: [74.125.83.67] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 34344 invoked from network); 28 Mar 2017 12:36:00 -0000 Received: from mail-pg0-f67.google.com (HELO mail-pg0-f67.google.com) (74.125.83.67) by server-6.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 28 Mar 2017 12:36:00 -0000 Received: by mail-pg0-f67.google.com with SMTP id 81so21045064pgh.3 for ; Tue, 28 Mar 2017 05:36:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=BEXevGMP5KOKLjBTDBRTW6B8BXZwd1Q8KICEIPTqWqs=; b=efdQJUwarxXigSdQI/Iwgzmi63ZHaQE2mWKiW4zsxxtG7P4hyMeHxvCZ1pO1aAy16y qRvDRkJIF97lYNPwFtHKeJaSQhtCqYeZ9GxBoJ25J81fagW2+Z2y7bbv5hryGo7aZSms /z3nuMSCzW6gMlfT+8e9PcLuGPd0ZqA78bWnZQKKc44vR3XhDlb1rlrmv6lnfqYIuk0A tSvpBP2/dfDTEDxClcGkmdlz28cbjS51TmwJKgt0rpKMr6/lHFvXLBQTk+W4hiZDUxmw v9A70L1+l/Yis574HoYpETwvlSH95X0TtvMFxfwhGCDMwvikxbTjUZLFiOjGTm57EOvM 44Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=BEXevGMP5KOKLjBTDBRTW6B8BXZwd1Q8KICEIPTqWqs=; b=T2IDNmEieqzUuR+10QwOh8OdOhVGiawD58CjJyxPSjwUWtwULuM7ZBs7IjM5dyRfN+ nZX55/CF4DE5494NCDIKW0pi0bZmLLT8JK85NfNy5J8yh3QctUgF5f5rSIqf255qARE8 LqVvHz1QboXm37BgT/0JeEVUQYDPyNW9f0u/zj/iNGV5nzJZchDIZ1DYMbPXkCW4cFZz f5eYyk44+gijSoEyfxKSibD8F/Xckcu+2Q7GXYHu4/MPUOItJ5FTnQBMW9tBYuK93vYl e+vpHYCfndvV+Z4pUBB/SRUGIAXVHFR8gCwql90gcJGkNW9BDrPSa0b5AqTZ8LKvdD7J KuGw== X-Gm-Message-State: AFeK/H2sHxA4pu2a28+et+b40RXW/QzGYShxQirZr3ULBClC7mx9BepaEvMukAYBUu2rOg== X-Received: by 10.98.78.201 with SMTP id c192mr31232603pfb.246.1490704558758; Tue, 28 Mar 2017 05:35:58 -0700 (PDT) Received: from localhost.localdomain ([14.140.2.178]) by smtp.gmail.com with ESMTPSA id i3sm7354535pfg.117.2017.03.28.05.35.54 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 28 Mar 2017 05:35:58 -0700 (PDT) From: vijay.kilari@gmail.com To: xen-devel@lists.xen.org Date: Tue, 28 Mar 2017 18:05:38 +0530 Message-Id: <1490704538-17557-1-git-send-email-vijay.kilari@gmail.com> X-Mailer: git-send-email 1.7.9.5 Cc: sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, julien.grall@arm.com, jbeulich@suse.com, Vijaya Kumar K Subject: [Xen-devel] [PATCH v4] boot allocator: Use arch helper for virt_to_mfn on DIRECTMAP X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Vijaya Kumar K On ARM64, virt_to_mfn uses the hardware for address translation. So if the virtual address is not mapped translation fault is raised. On ARM64, DIRECTMAP_VIRT region is direct mapped. On ARM platforms with NUMA, While initializing second memory node, panic is triggered from init_node_heap() when virt_to_mfn() is called for DIRECTMAP_VIRT region address. Here the check is made to ensure that MFN less than max MFN mapped. The max MFN is found by calling virt_to_mfn of DIRECTMAP_VIRT_END region. Since DIRECMAP_VIRT region is not mapped to any virtual address on ARM, it fails. In this patch, instead of calling virt_to_mfn(), arch helper arch_mfn_in_directmap() is introduced. On ARM64 this arch helper will return true, whereas on ARM DIRECTMAP_VIRT region is not directly mapped only xenheap region is directly mapped. So on ARM return false always. For x86 this helper does virt_to_mfn. Signed-off-by: Vijaya Kumar K Reviewed-by: Jan Beulich --- xen/common/page_alloc.c | 7 ++----- xen/include/asm-arm/arm32/mm.h | 20 ++++++++++++++++++++ xen/include/asm-arm/arm64/mm.h | 20 ++++++++++++++++++++ xen/include/asm-arm/mm.h | 8 ++++++++ xen/include/asm-x86/mm.h | 11 +++++++++++ 5 files changed, 61 insertions(+), 5 deletions(-) diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index 42c20cb..c4ffb31 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -520,9 +520,6 @@ static unsigned long init_node_heap(int node, unsigned long mfn, unsigned long needed = (sizeof(**_heap) + sizeof(**avail) * NR_ZONES + PAGE_SIZE - 1) >> PAGE_SHIFT; -#ifdef DIRECTMAP_VIRT_END - unsigned long eva = min(DIRECTMAP_VIRT_END, HYPERVISOR_VIRT_END); -#endif int i, j; if ( !first_node_initialised ) @@ -534,7 +531,7 @@ static unsigned long init_node_heap(int node, unsigned long mfn, } #ifdef DIRECTMAP_VIRT_END else if ( *use_tail && nr >= needed && - (mfn + nr) <= (virt_to_mfn(eva - 1) + 1) && + arch_mfn_in_directmap(mfn + nr) && (!xenheap_bits || !((mfn + nr - 1) >> (xenheap_bits - PAGE_SHIFT))) ) { @@ -543,7 +540,7 @@ static unsigned long init_node_heap(int node, unsigned long mfn, PAGE_SIZE - sizeof(**avail) * NR_ZONES; } else if ( nr >= needed && - (mfn + needed) <= (virt_to_mfn(eva - 1) + 1) && + arch_mfn_in_directmap(mfn + needed) && (!xenheap_bits || !((mfn + needed - 1) >> (xenheap_bits - PAGE_SHIFT))) ) { diff --git a/xen/include/asm-arm/arm32/mm.h b/xen/include/asm-arm/arm32/mm.h new file mode 100644 index 0000000..e93d9df --- /dev/null +++ b/xen/include/asm-arm/arm32/mm.h @@ -0,0 +1,20 @@ +#ifndef __ARM_ARM32_MM_H__ +#define __ARM_ARM32_MM_H__ + +/* On ARM only xenheap memory is directly mapped. Hence return false. */ +static inline bool arch_mfn_in_directmap(unsigned long mfn) +{ + return false; +} + +#endif /* __ARM_ARM32_MM_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/include/asm-arm/arm64/mm.h b/xen/include/asm-arm/arm64/mm.h new file mode 100644 index 0000000..36ee9c8 --- /dev/null +++ b/xen/include/asm-arm/arm64/mm.h @@ -0,0 +1,20 @@ +#ifndef __ARM_ARM64_MM_H__ +#define __ARM_ARM64_MM_H__ + +/* On ARM64 DIRECTMAP_VIRT region is directly mapped. Hence return true */ +static inline bool arch_mfn_in_directmap(unsigned long mfn) +{ + return true; +} + +#endif /* __ARM_ARM64_MM_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h index 4892155..0fef612 100644 --- a/xen/include/asm-arm/mm.h +++ b/xen/include/asm-arm/mm.h @@ -6,6 +6,14 @@ #include #include +#if defined(CONFIG_ARM_32) +# include +#elif defined(CONFIG_ARM_64) +# include +#else +# error "unknown ARM variant" +#endif + /* Align Xen to a 2 MiB boundary. */ #define XEN_PADDR_ALIGN (1 << 21) diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index e22603c..efae611 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -602,4 +602,15 @@ extern const char zero_page[]; /* Build a 32bit PSE page table using 4MB pages. */ void write_32bit_pse_identmap(uint32_t *l2); +/* + * x86 maps DIRECTMAP_VIRT to physical memory. Get the mfn for directmap + * memory region. + */ +static inline bool arch_mfn_in_directmap(unsigned long mfn) +{ + unsigned long eva = min(DIRECTMAP_VIRT_END, HYPERVISOR_VIRT_END); + + return (mfn <= (virt_to_mfn(eva - 1) + 1)); +} + #endif /* __ASM_X86_MM_H__ */