From patchwork Sat Aug 31 05:58:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yunsheng Lin X-Patchwork-Id: 11124809 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8208414E5 for ; Sat, 31 Aug 2019 06:04:08 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 60AC823697 for ; Sat, 31 Aug 2019 06:04:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="bdbcfsJM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 60AC823697 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=z1ghRu44wH48SaaZ6Rfmr9BCg5gjugmeR1X3zreOTxA=; b=bdbcfsJMYTJ9B6 zl/8dlD5zUFJq748mvHWKc1CvOCGIFNbgEjL4vcHpJtKyjkDy9rP/wh/3gkOsDZ49t71Zk0nVZTfh cLbV6pZq8IkY3wew0FDbw6yrbgA2fi1X9t7G/FNAd4+F4TVAc+ILTVrVS8zvFDLzMah+Hv6XmwJjA ZOLy0Y3pznyMalFFLVeTXEmpF46OUgLDhxH0klssvcBChrMyIO+neTTzNjf+7f9OFi6dd4pkqC9sx b4JNKd3ZHjUNvSNo6wLUjcmYi8XKR2MJP9Gvz5l3Q7prxHDC8lRv7hTDwgPmj0FbiKgJlr3cLzMi7 o7e6zrReY0zb8RBQjmew==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i3wUZ-00009h-Ka; Sat, 31 Aug 2019 06:04:07 +0000 Received: from szxga07-in.huawei.com ([45.249.212.35] helo=huawei.com) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i3wRY-0006X2-5y for linux-arm-kernel@lists.infradead.org; Sat, 31 Aug 2019 06:01:02 +0000 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id F0A4275DC8D547CF3F21; Sat, 31 Aug 2019 14:00:41 +0800 (CST) Received: from localhost.localdomain (10.67.212.75) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.439.0; Sat, 31 Aug 2019 14:00:33 +0800 From: Yunsheng Lin To: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v2 0/9] check the node id consistently across different arches Date: Sat, 31 Aug 2019 13:58:14 +0800 Message-ID: <1567231103-13237-1-git-send-email-linyunsheng@huawei.com> X-Mailer: git-send-email 2.8.1 MIME-Version: 1.0 X-Originating-IP: [10.67.212.75] X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190830_230100_674924_F86064D3 X-CRM114-Status: UNSURE ( 9.11 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -2.3 (--) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-2.3 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.35 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-sh@vger.kernel.org, peterz@infradead.org, dave.hansen@linux.intel.com, linuxarm@huawei.com, linux-mips@vger.kernel.org, mwb@linux.vnet.ibm.com, hpa@zytor.com, sparclinux@vger.kernel.org, linux-s390@vger.kernel.org, x86@kernel.org, rppt@linux.ibm.com, dledford@redhat.com, jeffrey.t.kirsher@intel.com, nfont@linux.vnet.ibm.com, naveen.n.rao@linux.vnet.ibm.com, len.brown@intel.com, anshuman.khandual@arm.com, cai@lca.pw, luto@kernel.org, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, axboe@kernel.dk, robin.murphy@arm.com, linux-kernel@vger.kernel.org, tbogendoerfer@suse.de, linux-alpha@vger.kernel.org, akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org According to Section 6.2.14 from ACPI spec 6.3 [1], the setting of proximity domain is optional, as below: This optional object is used to describe proximity domain associations within a machine. _PXM evaluates to an integer that identifies a device as belonging to a Proximity Domain defined in the System Resource Affinity Table (SRAT). When enabling KASAN and bios has not implemented the proximity domain of the hns3 device, there is a global-out-of-bounds error below: [ 42.970381] ================================================================== [ 42.977595] BUG: KASAN: global-out-of-bounds in __bitmap_weight+0x48/0xb0 [ 42.984370] Read of size 8 at addr ffff20008cdf8790 by task kworker/0:1/13 [ 42.991230] [ 42.992712] CPU: 0 PID: 13 Comm: kworker/0:1 Tainted: G O 5.2.0-rc4-g8bde06a-dirty #3 [ 43.001830] Hardware name: Huawei TaiShan 2280 V2/BC82AMDA, BIOS TA BIOS 2280-A CS V2.B050.01 08/08/2019 [ 43.011298] Workqueue: events work_for_cpu_fn [ 43.015643] Call trace: [ 43.018078] dump_backtrace+0x0/0x1e8 [ 43.021727] show_stack+0x14/0x20 [ 43.025031] dump_stack+0xc4/0xfc [ 43.028335] print_address_description+0x178/0x270 [ 43.033113] __kasan_report+0x164/0x1b8 [ 43.036936] kasan_report+0xc/0x18 [ 43.040325] __asan_load8+0x84/0xa8 [ 43.043801] __bitmap_weight+0x48/0xb0 [ 43.047552] hclge_init_ae_dev+0x988/0x1e78 [hclge] [ 43.052418] hnae3_register_ae_dev+0xcc/0x278 [hnae3] [ 43.057467] hns3_probe+0xe0/0x120 [hns3] [ 43.061464] local_pci_probe+0x74/0xf0 [ 43.065200] work_for_cpu_fn+0x2c/0x48 [ 43.068937] process_one_work+0x3c0/0x878 [ 43.072934] worker_thread+0x400/0x670 [ 43.076670] kthread+0x1b0/0x1b8 [ 43.079885] ret_from_fork+0x10/0x18 [ 43.083446] [ 43.084925] The buggy address belongs to the variable: [ 43.090052] numa_distance+0x30/0x40 [ 43.093613] [ 43.095091] Memory state around the buggy address: [ 43.099870] ffff20008cdf8680: fa fa fa fa 04 fa fa fa fa fa fa fa 00 00 fa fa [ 43.107078] ffff20008cdf8700: fa fa fa fa 04 fa fa fa fa fa fa fa 00 fa fa fa [ 43.114286] >ffff20008cdf8780: fa fa fa fa 00 00 00 00 00 00 00 00 fa fa fa fa [ 43.121494] ^ [ 43.125230] ffff20008cdf8800: 01 fa fa fa fa fa fa fa 04 fa fa fa fa fa fa fa [ 43.132439] ffff20008cdf8880: fa fa fa fa fa fa fa fa 00 00 fa fa fa fa fa fa [ 43.139646] ================================================================== As suggested [2] by Michal Hocko: "if the specification really allows to provide NUMA_NO_NODE (-1) then the code really has to be prepared for that. And ideally all arches should deal with that." This patchset checks the node id with the below case consistently across different arches in order to be compliant with spec and backward compatible as much as possible: 1. if node_id < 0, return cpu_online_mask 2. if node_id >= nr_node_ids, return cpu_none_mask 3. if node_to_cpumask_map[node_id] is NULL, return cpu_online_mask Note: 1. Only arm64 has been compile tested and tested on real board. 2. x86 has been compile tested with defconfig. 3. Other arch has not been compile tested or tested on real board. Changelog: V2: Change commit log as suggested by Michal Hocko, and make the change to other arches as well. [1] https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf [2] https://patchwork.kernel.org/patch/11122823/ Yunsheng Lin (9): arm64: numa: check the node id consistently for arm64 x86: numa: check the node id consistently for x86 alpha: numa: check the node id consistently for alpha powerpc: numa: check the node id consistently for powerpc s390: numa: check the node id consistently for s390 sh: numa: check the node id consistently for sh sparc64: numa: check the node id consistently for sparc64 mips: numa: check the node id consistently for mips ip27 mips: numa: check the node id consistently for mips loongson64 arch/alpha/include/asm/topology.h | 7 +++++-- arch/arm64/include/asm/numa.h | 6 ++++++ arch/arm64/mm/numa.c | 2 +- arch/mips/include/asm/mach-ip27/topology.h | 15 ++++++++++++--- arch/mips/include/asm/mach-loongson64/topology.h | 12 +++++++++++- arch/powerpc/include/asm/topology.h | 13 ++++++++++--- arch/s390/include/asm/topology.h | 6 ++++++ arch/sh/include/asm/topology.h | 14 +++++++++++++- arch/sparc/include/asm/topology_64.h | 16 +++++++++++++--- arch/x86/include/asm/topology.h | 6 ++++++ arch/x86/mm/numa.c | 2 +- 11 files changed, 84 insertions(+), 15 deletions(-)