From patchwork Mon Jun 11 12:32:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xie XiuQi X-Patchwork-Id: 10457767 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 7EF77602C8 for ; Mon, 11 Jun 2018 12:33:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6B853256E6 for ; Mon, 11 Jun 2018 12:33:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5FC5628173; Mon, 11 Jun 2018 12:33:27 +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=-2.9 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D80FF256E6 for ; Mon, 11 Jun 2018 12:33:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DF87D6B0003; Mon, 11 Jun 2018 08:33:25 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id DA7926B0005; Mon, 11 Jun 2018 08:33:25 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C97636B0006; Mon, 11 Jun 2018 08:33:25 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ot0-f199.google.com (mail-ot0-f199.google.com [74.125.82.199]) by kanga.kvack.org (Postfix) with ESMTP id 9EA246B0003 for ; Mon, 11 Jun 2018 08:33:25 -0400 (EDT) Received: by mail-ot0-f199.google.com with SMTP id p12-v6so14090952oti.6 for ; Mon, 11 Jun 2018 05:33:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:subject:to :references:cc:from:message-id:date:user-agent:mime-version :in-reply-to:content-transfer-encoding; bh=OkOEZGvQ8606zgqu07bufw2Ky3zw0yVYrDAuoGYI+N8=; b=Ro49Ytch/4PTiVoFh3bmWrADglNLVL7ztHNrrfeOFEIMMrRSG9ok/jgi7EzD5NHg8Y 9M/4R6bJbogHt/jBkypvaZmK6YaDY5gIN8ObNQ+aA4WC1Mt45RNpcpNADc0OkRWXDYtu Z63r6HR4uqQQqCB0viQ1tj/Z+P0tKs6g7KcTwZyzcAFFL5rKKlF8vaazXi8I+aAmtK40 lWTV3R7AEMlIQXe+pFT/ehtVOku0mZk2egJaTGgW7IzPjfdai4AvG9RevXpCXhMKSwa8 kHW4z0Sv++jg6u2ayN8omVoxjU5EtMXpgxwO38+rWyMG2dE0PYWBS2g84PU6ooUAaL9R WKMw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of xiexiuqi@huawei.com designates 45.249.212.35 as permitted sender) smtp.mailfrom=xiexiuqi@huawei.com X-Gm-Message-State: APt69E2RKqiAztcF2YZevmoSQqjNQLNYNxSS5zxkx4c4mFu28AxdQo4V THYe8WNFDm0RI8CTMbWF52na3cvNrpLgRXmqDTOZ4h0dFtkRacBtg0OVYBxyI1/BzlSTxVyAKaN DKWxoOjVX+4IRwPXKtqN4zZr849OAKBfrR6woBtHBOmILm0s2U7L8NPFTeEQrbjXz3A== X-Received: by 2002:a9d:d0c:: with SMTP id 12-v6mr9030821oti.293.1528720405433; Mon, 11 Jun 2018 05:33:25 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKsdhOkk8GalDVvBaHqim9MmM1LUFcb5MHL1LVAr3XLUNo6cwHUAHm6lXAMYth8Zbctg+6O X-Received: by 2002:a9d:d0c:: with SMTP id 12-v6mr9030801oti.293.1528720404612; Mon, 11 Jun 2018 05:33:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528720404; cv=none; d=google.com; s=arc-20160816; b=kSWWJQnZtt5yDByHS0x1RtveFtMz60ZTlsZY/kZ+58tXho4NgJ5FVBs+WvVm5Fa9zY RUPwdY4OSd1AD2pvE76FyfgX1AEbomIPZre3hr0WzSbGbrw+L5WZcj2Kp40/1FEx42Xz +NDX+kwIb91kBJ4X5rm+3UVsgHiM5lzWC2bR0y2zADG5plopP3P0ASRuxiSl3TUYSxEe 78aEPgvxjYASzurlrZWiGj216sY32i6PoZUAfQha6gWE3KyGI5Fbv0nVEPGiekWnonCk W5/uSsiB1hZxKiLN1DkM5y5b0QwJ1WdwUeeS7boyxsY0SPg98bGJprJ0BpEM1cj/SVGs jzEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:cc:references:to:subject:arc-authentication-results; bh=OkOEZGvQ8606zgqu07bufw2Ky3zw0yVYrDAuoGYI+N8=; b=t/pOksFPomoDtHPZPrTFJCELHVVFKG0H+3rTU2s9GfdIzAGxgpBZi3AYiwW7RSCSxB 2ALv1rZop6ncgkfsrsycATMFw74NDQ0I/TW7qYKgK98DeAlQKmt+hqLQhXUXW3ydwz28 u8Ue4uKsWoYE/fL4gGbdjpR/zi+5YCp8W4p3sWoQY9T1tgT4ibvDRtwMTI5PfwlgP/5g 21P0Pgw6okZGo96O1fyfnDk9jRO+/5inCS9Cu5v3ys/qnwjNbsIjUuA9phWFGxD5htYV XKGECA/xtbgIqSV4rER1enWFo/zRuARbaltNla4cf/scxGnFcXsU9N6/y6xgKZ83I5KP QbaA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of xiexiuqi@huawei.com designates 45.249.212.35 as permitted sender) smtp.mailfrom=xiexiuqi@huawei.com Received: from huawei.com ([45.249.212.35]) by mx.google.com with ESMTPS id v127-v6si12326026oif.119.2018.06.11.05.33.24 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Jun 2018 05:33:24 -0700 (PDT) Received-SPF: pass (google.com: domain of xiexiuqi@huawei.com designates 45.249.212.35 as permitted sender) client-ip=45.249.212.35; Authentication-Results: mx.google.com; spf=pass (google.com: domain of xiexiuqi@huawei.com designates 45.249.212.35 as permitted sender) smtp.mailfrom=xiexiuqi@huawei.com Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id C6785672B379D; Mon, 11 Jun 2018 20:32:49 +0800 (CST) Received: from [127.0.0.1] (10.177.19.210) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.382.0; Mon, 11 Jun 2018 20:32:44 +0800 Subject: Re: [PATCH 1/2] arm64: avoid alloc memory on offline node To: Michal Hocko References: <1527768879-88161-1-git-send-email-xiexiuqi@huawei.com> <1527768879-88161-2-git-send-email-xiexiuqi@huawei.com> <20180606154516.GL6631@arm.com> <20180607105514.GA13139@dhcp22.suse.cz> <5ed798a0-6c9c-086e-e5e8-906f593ca33e@huawei.com> <20180607122152.GP32433@dhcp22.suse.cz> <20180611085237.GI13364@dhcp22.suse.cz> CC: Hanjun Guo , Bjorn Helgaas , Will Deacon , Catalin Marinas , Greg Kroah-Hartman , "Rafael J. Wysocki" , Jarkko Sakkinen , linux-arm , Linux Kernel Mailing List , , , , Andrew Morton , , zhongjiang From: Xie XiuQi Message-ID: <16c4db2f-bc70-d0f2-fb38-341d9117ff66@huawei.com> Date: Mon, 11 Jun 2018 20:32:10 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20180611085237.GI13364@dhcp22.suse.cz> X-Originating-IP: [10.177.19.210] X-CFilter-Loop: Reflected X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Hi Michal, On 2018/6/11 16:52, Michal Hocko wrote: > On Mon 11-06-18 11:23:18, Xie XiuQi wrote: >> Hi Michal, >> >> On 2018/6/7 20:21, Michal Hocko wrote: >>> On Thu 07-06-18 19:55:53, Hanjun Guo wrote: >>>> On 2018/6/7 18:55, Michal Hocko wrote: >>> [...] >>>>> I am not sure I have the full context but pci_acpi_scan_root calls >>>>> kzalloc_node(sizeof(*info), GFP_KERNEL, node) >>>>> and that should fall back to whatever node that is online. Offline node >>>>> shouldn't keep any pages behind. So there must be something else going >>>>> on here and the patch is not the right way to handle it. What does >>>>> faddr2line __alloc_pages_nodemask+0xf0 tells on this kernel? >>>> >>>> The whole context is: >>>> >>>> The system is booted with a NUMA node has no memory attaching to it >>>> (memory-less NUMA node), also with NR_CPUS less than CPUs presented >>>> in MADT, so CPUs on this memory-less node are not brought up, and >>>> this NUMA node will not be online (but SRAT presents this NUMA node); >>>> >>>> Devices attaching to this NUMA node such as PCI host bridge still >>>> return the valid NUMA node via _PXM, but actually that valid NUMA node >>>> is not online which lead to this issue. >>> >>> But we should have other numa nodes on the zonelists so the allocator >>> should fall back to other node. If the zonelist is not intiailized >>> properly, though, then this can indeed show up as a problem. Knowing >>> which exact place has blown up would help get a better picture... >>> >> >> I specific a non-exist node to allocate memory using kzalloc_node, >> and got this following error message. >> >> And I found out there is just a VM_WARN, but it does not prevent the memory >> allocation continue. >> >> This nid would be use to access NODE_DADA(nid), so if nid is invalid, >> it would cause oops here. >> >> 459 /* >> 460 * Allocate pages, preferring the node given as nid. The node must be valid and >> 461 * online. For more general interface, see alloc_pages_node(). >> 462 */ >> 463 static inline struct page * >> 464 __alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order) >> 465 { >> 466 VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES); >> 467 VM_WARN_ON(!node_online(nid)); >> 468 >> 469 return __alloc_pages(gfp_mask, order, nid); >> 470 } >> 471 >> >> (I wrote a ko, to allocate memory on a non-exist node using kzalloc_node().) > > OK, so this is an artificialy broken code, right. You shouldn't get a > non-existent node via standard APIs AFAICS. The original report was > about an existing node which is offline AFAIU. That would be a different > case. If I am missing something and there are legitimate users that try > to allocate from non-existing nodes then we should handle that in > node_zonelist. I think hanjun's comments may help to understood this question: - NUMA node will be built if CPUs and (or) memory are valid on this NUMA node; - But if we boot the system with memory-less node and also with CONFIG_NR_CPUS less than CPUs in SRAT, for example, 64 CPUs total with 4 NUMA nodes, 16 CPUs on each NUMA node, if we boot with CONFIG_NR_CPUS=48, then we will not built numa node for node 3, but with devices on that numa node, alloc memory will be panic because NUMA node 3 is not a valid node. I triggered this BUG on arm64 platform, and I found a similar bug has been fixed on x86 platform. So I sent a similar patch for this bug. Or, could we consider to fix it in the mm subsystem? From b755de8dfdfef97effaa91379ffafcb81f4d62a1 Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Wed, 20 Feb 2008 12:41:52 -0800 Subject: [PATCH] x86: make dev_to_node return online node a numa system (with multi HT chains) may return node without ram. Aka it is not online. Try to get an online node, otherwise return -1. Signed-off-by: Yinghai Lu Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- arch/x86/pci/acpi.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index d95de2f..ea8685f 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c @@ -172,6 +172,9 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do set_mp_bus_to_node(busnum, node); else node = get_mp_bus_to_node(busnum); + + if (node != -1 && !node_online(node)) + node = -1; #endif /* Allocate per-root-bus (not per bus) arch-specific data.