Received: by 10.223.185.116 with SMTP id b49csp819763wrg; Tue, 20 Feb 2018 08:22:55 -0800 (PST) X-Google-Smtp-Source: AH8x224QWCBSKfnOl+2+eljFU1Nqiamb07MHkg4nw/UMLwk858HvU8FQKOCssYSWmxhSquwtqkZ+ X-Received: by 2002:a17:902:71c9:: with SMTP id t9-v6mr139500plm.107.1519143775529; Tue, 20 Feb 2018 08:22:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519143775; cv=none; d=google.com; s=arc-20160816; b=FXFdl08QLhUS6bI+zIHqkqGovtIJuengyakHuNM+J/nBp+LydC4bEu6r0P+RNz2kc7 92M6o9n/ke1LlPHtN3SZu1pNETzyaKAhbipv/q5oqC0oVuS78Db53SRHD4fiGmHvVWVS svKSYjgd/3EoqlJYNWidWZN+U2MUV64/hJIluBa6zovlaFxcjJd/mO6nmECEy5K2/MsS A42ELXceB3ZhtkYyKhc2MCeScw9iFSXGlHAhT/2OXgaDCR92GuVs0zaL19IDFmugMd/O p005sn33TAAX0h9LrwAtpsWg2TYPo66fm6/OxEa89TExsOpCBCKEwur9votUSO1aEMRQ 9djg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=+0AYLxzJoDiuXmIZCLZzheOH/zaYBdMpJ5hsTrczKO0=; b=Y0+Sq7MiKzPMjEyTb8RTJ7AT00rmib5XWFnWNkK6FmMwHs0yv/lc6SLnQq6mjvBodT Z6wADoRQD4av9HtKCiAy2QW+8ZVToxMZyb5jeYohuB0Nt902A39kG1eS0iHSaW2bKHcM x3N7bkPdHuRfdK3p/+TeZE6PWXVEEbDdnt61WThCIlKJ7nzxuIiIx5Vr+UO4WXVxLaTK muzl8idXLQmyJbP0eIBG7IuqikYnGprQLscFLBmAv1R817b3eJflOOryjR5/aXdQMuSU 3rffCPTQaDqm3XV955kKMI2wWD2WWBmI6yzeprjB7QZq0eC2vj0g8uJ/cAAn/ut49mfE oJXg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bf8-v6si3657799plb.751.2018.02.20.08.22.40; Tue, 20 Feb 2018 08:22:55 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752790AbeBTQWA (ORCPT + 99 others); Tue, 20 Feb 2018 11:22:00 -0500 Received: from mout.gmx.net ([212.227.17.22]:36045 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752717AbeBTQV7 (ORCPT ); Tue, 20 Feb 2018 11:21:59 -0500 Received: from latitude ([88.153.6.155]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0M9wrU-1eunM82RJo-00B2ag; Tue, 20 Feb 2018 17:16:40 +0100 From: =?UTF-8?q?Jonathan=20Neusch=C3=A4fer?= To: linuxppc-dev@lists.ozlabs.org Cc: linux-kernel@vger.kernel.org, Michael Ellerman , linux-mm@kvack.org, Joel Stanley , =?UTF-8?q?Jonathan=20Neusch=C3=A4fer?= , Benjamin Herrenschmidt , Paul Mackerras , Greg Kroah-Hartman , Thomas Gleixner , Philippe Ombredanne , Kate Stewart , Nathan Fontenot , Michael Bringmann , Thiago Jung Bauermann , Kees Cook Subject: [PATCH 5/6] powerpc: Implement DISCONTIGMEM and allow selection on PPC32 Date: Tue, 20 Feb 2018 17:14:23 +0100 Message-Id: <20180220161424.5421-6-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180220161424.5421-1-j.neuschaefer@gmx.net> References: <20180220161424.5421-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:Ef61GgKjYRLsV3CHZhmjmyAWWBvqKTYdDtb1IGBtXC5GWbRe9HO XXXBzb2sqZygGsQ3+s70/W1wNSDiXM3RUHZjIOWxluJTS5AeblzkLoOCW0mEsMKWPcQwCIx o7II6IvWyW5YMru2TriMDc8AVVK8B8pczdm0sCyc55b5Cewj2bWK6SheM7dNdK4SJfdie2L lymF5bc6m19OSQ3WCTM3Q== X-UI-Out-Filterresults: notjunk:1;V01:K0:nUdq7GK29KQ=:1o8l58jovUtY3uMuj95WFS sHC1WXKH4DXLo9vZ4l/oAOlg0eSGGX90KBQ/iEF4705V9QAW58gro81C9gvn5ZcqU4pu9DAX1 h41/KDHFADFXMw+b2jTJwHdJX2ltVhdoTF/cZLCWk2ws5dpzjkYKJm5FD+SlqFaqastsUDPJR bsCN8QK9kD8ecUy3Kz/H5gQbPVXpXpaO50cfVUMWUp/OVHoH+IFnL+L+R/6GD7lB6G70DPIVa DL+tx2udI33hM74CimK0eGVCqJHJPbbe/OYOeM6RxVM4BuFhfAxfG8rbCiP/nLCVLaD7xmWmH SSXQX37HC9KNTNakuBXQorlNOEYp+ds/nAwiG2e6PZcn/MF3EN4y4JjZE3qPkMZ4vsay4MnTs hAQjX7t9WqgVA2OdzCSXA274MLaQ0MYHAIDbXIxA8+TGTpx8CbNrwsuryAYP2F/ruKsDjUIgz sBpxAslwTHBl6u0ZTF/+i80zBC+bp3VItpTzT3by6h7VPoLk/T+nxHLo9/xNAwiOIOL6x7cZq ZoDAtcKjnC/qtU//cIpkOSJrpQ2J7lKrGkvIYGVGb3XBMe6aJWD/LBsF5nVdsEsGXMs8YuGRo 6Ry1HCukUzRqKSTb3V6OcM4etFtONrqMjWOjpaq4qcwyCPPSGEkr8jdwGoukNeaU2FWDOxuIr M9B8UumEj+mm19CloTH/K+OxBwe5suVNvE6UCA2YnqV3gsc1i4pJiJRQqgeQU1zTI/NsEsj/M vNV+12D0JwuGpEBBA8ZpijU8o3ULBm4BqPjxufqUyfZLk88nptZzDEH7QDE09dhzUc90KHqGY a9HMIvhzqPXr9dDbZrdSUS3U6NjucwudyiToY1WxJqAP4lyzh4= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The implementation of pfn_to_nid and pfn_valid in mmzone.h is based on arch/metag's implementation. Signed-off-by: Jonathan Neuschäfer --- NOTE: Checking NODE_DATA(nid) in pfn_to_nid appears to be uncommon. Running up to MAX_NUMNODES instead of checking NODE_DATA(nid) would require the node_data array to be filled with valid pointers. --- arch/powerpc/Kconfig | 5 ++++- arch/powerpc/include/asm/mmzone.h | 21 +++++++++++++++++++++ arch/powerpc/mm/numa.c | 7 +++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 73ce5dd07642..c2633b7b8ed9 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -639,7 +639,6 @@ config HAVE_MEMORYLESS_NODES config ARCH_SELECT_MEMORY_MODEL def_bool y - depends on PPC64 config ARCH_FLATMEM_ENABLE def_bool y @@ -654,6 +653,10 @@ config ARCH_SPARSEMEM_DEFAULT def_bool y depends on PPC_BOOK3S_64 +config ARCH_DISCONTIGMEM_ENABLE + def_bool y + depends on PPC32 + config SYS_SUPPORTS_HUGETLBFS bool diff --git a/arch/powerpc/include/asm/mmzone.h b/arch/powerpc/include/asm/mmzone.h index 91c69ff53a8a..1684a5c98d23 100644 --- a/arch/powerpc/include/asm/mmzone.h +++ b/arch/powerpc/include/asm/mmzone.h @@ -26,6 +26,27 @@ extern struct pglist_data *node_data[]; */ #define NODE_DATA(nid) (node_data[nid]) +static inline int pfn_to_nid(unsigned long pfn) +{ + int nid; + + for (nid = 0; nid < MAX_NUMNODES && NODE_DATA(nid); nid++) + if (pfn >= node_start_pfn(nid) && pfn <= node_end_pfn(nid)) + return nid; + + return -1; +} + +static inline int pfn_valid(int pfn) +{ + int nid = pfn_to_nid(pfn); + + if (nid >= 0) + return pfn < node_end_pfn(nid); + + return 0; +} + /* * Following are specific to this numa platform. */ diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index dfe279529463..ec47f1081509 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c @@ -744,6 +744,13 @@ static void __init setup_nonnuma(void) PFN_PHYS(end_pfn - start_pfn), &memblock.memory, nid); node_set_online(nid); + + /* + * On DISCONTIGMEM systems, place different memory blocks into + * different nodes. + */ + if (IS_ENABLED(CONFIG_DISCONTIGMEM) && nid < MAX_NUMNODES - 1) + nid++; } } -- 2.16.1