From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757153AbcIUOK3 (ORCPT ); Wed, 21 Sep 2016 10:10:29 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:50929 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756093AbcIUOK1 (ORCPT ); Wed, 21 Sep 2016 10:10:27 -0400 X-IMSS-HAND-OFF-DIRECTIVE: 127.0.0.1:10026 Date: Wed, 21 Sep 2016 09:08:47 -0500 From: Reza Arbab To: "Aneesh Kumar K.V" Cc: Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Rob Herring , Frank Rowand , Jonathan Corbet , Andrew Morton , Bharata B Rao , Nathan Fontenot , Stewart Smith , Alistair Popple , Balbir Singh , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, devicetree@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH v2 3/3] mm: enable CONFIG_MOVABLE_NODE on powerpc References: <1473883618-14998-1-git-send-email-arbab@linux.vnet.ibm.com> <1473883618-14998-4-git-send-email-arbab@linux.vnet.ibm.com> <87h99cxv00.fsf@linux.vnet.ibm.com> <20160921054500.lrqktzjqjhuzewqg@arbab-laptop> <87oa3hwwxs.fsf@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <87oa3hwwxs.fsf@linux.vnet.ibm.com> Organization: IBM Linux Technology Center User-Agent: Mutt/1.6.2-neo (2016-08-21) X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16092114-0056-0000-0000-0000016BEB01 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00005797; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000185; SDB=6.00759873; UDB=6.00361326; IPR=6.00534282; BA=6.00004743; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00012737; XFM=3.00000011; UTC=2016-09-21 14:08:54 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16092114-0057-0000-0000-0000059EF24A Message-Id: <20160921140846.m6wp2ij5f2fx4cps@arbab-laptop> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-09-21_09:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609020000 definitions=main-1609210259 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Sep 21, 2016 at 12:39:51PM +0530, Aneesh Kumar K.V wrote: >What I was checking was how will one mark a node movable in ppc64 ? I >don't see ppc64 code doing the equivalent of memblock_mark_hotplug(). Post boot, the marking mechanism is not necessary. You can create a movable node by putting all of the node's memory into ZONE_MOVABLE during the hotplug. >So when you say "Onlining memory into ZONE_MOVABLE requires >CONFIG_MOVABLE_NODE" where is that restriction ?. IIUC, >should_add_memory_movable() will only return ZONE_MOVABLE only if it is >non empty and MOVABLE_NODE will create a ZONE_MOVABLE zone by default >only if it finds a memblock marked hotpluggable. So wondering if we >are not calling memblock_mark_hotplug() how is it working. Or am I >missing something ? You are looking at the addition step of hotplug. You're correct there, the memory is added to the default zone, not ZONE_MOVABLE. The transition to ZONE_MOVABLE takes place during the onlining step. In online_pages(): zone = move_pfn_range(zone_shift, pfn, pfn + nr_pages); The reason we need CONFIG_MOVABLE_NODE is right before that: if ((zone_idx(zone) > ZONE_NORMAL || online_type == MMOP_ONLINE_MOVABLE) && !can_online_high_movable(zone)) return -EINVAL; where can_online_high_movable() is defined like this: #ifdef CONFIG_MOVABLE_NODE /* * When CONFIG_MOVABLE_NODE, we permit onlining of a node which doesn't have * normal memory. */ static bool can_online_high_movable(struct zone *zone) { return true; } #else /* CONFIG_MOVABLE_NODE */ /* ensure every online node has NORMAL memory */ static bool can_online_high_movable(struct zone *zone) { return node_state(zone_to_nid(zone), N_NORMAL_MEMORY); } #endif /* CONFIG_MOVABLE_NODE */ To be more clear, I can change the commit log to say "Onlining all of a node's memory into ZONE_MOVABLE requires CONFIG_MOVABLE_NODE". -- Reza Arbab