From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4E692C4332D for ; Thu, 19 Mar 2020 17:26:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2621D2080C for ; Thu, 19 Mar 2020 17:26:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QuAr0rCw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727689AbgCSR0z (ORCPT ); Thu, 19 Mar 2020 13:26:55 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:37097 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726934AbgCSR0z (ORCPT ); Thu, 19 Mar 2020 13:26:55 -0400 Received: by mail-wr1-f68.google.com with SMTP id w10so4147877wrm.4; Thu, 19 Mar 2020 10:26:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=3F6p9VA0cVyFpp1otJBkETuyS8iU0ECrOYMDdRLVRxI=; b=QuAr0rCwgtiF82xHBWqQ4lSffZ977W564JnS7kFkj4jk+O1B4hwEtwYTvDMJd0KPzC W7UMfVthKh74N0igpoKyyZvB59aca9fYgTGHWI0wxqZpebWmfrzwomuaPhyu2VJEO56g p8dYe7vIpKa4hy2K1oGI5SvuFhZUuFjqaQ5nCVNmmA+eKRhwn1dzNTMdTUiPfQVqqylK /qunIobrNuRJE4LBBm/nxChANZ1J+lczwkjXC9am2snUc9QdDh9lM9vvgy4mt1gKjnpW XeCTdXi13mIw6cdMmEAXO9RJzB/RauIdkXZbliOpFv5hr2B7Il01mhJLYeyZ4YNCat++ sZ8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=3F6p9VA0cVyFpp1otJBkETuyS8iU0ECrOYMDdRLVRxI=; b=lIfsDiusw09b4ZRQw5u7Be9F5J2jhKUzKMQDrwSBsD4UvFg6M6i5NTRFZewU099JNk 99pP+lDT6lBXMi9IZh7L/Ry5FnUfpGRneAQbPVoGzv2OdR6oqVER2Sx/nMr8FUp+d1JT K02doUFRzxo3h4we8Maw8vldCJ/57XynCyqxuTzCt/9iULyYDokU6ktNy1IsegGP73Dj j3XfoqjPPRb/ermHFu4b5iD4hXz6PmnS6Z2hPXXji4kQqeLOHHj0KYirhsO+sdDB0nIf /m9gX1yyyGDUw16sfbONd4r4iNjFHljGSqNzhpKs6FOOayfH8NlbeJTj0n6dP92zgJaV XyYw== X-Gm-Message-State: ANhLgQ24D7Uv7Whb8lmAE6csKuRIl2CAao6gNBL9h3HDk2WvqlVs8AGT w0w4+2mnAyVPDiUZiahCMxM+xdTIRAPHPVqXbDg= X-Google-Smtp-Source: ADFU+vuGxJnVkZr1vtGIyeQ2LhE/Qgr1xykJ1BEWBBmT3lH5VpBqrgI47O6jQXgHrf2qVsBwT9UGn19a4U3S1q5tmWg= X-Received: by 2002:a5d:56c9:: with SMTP id m9mr5376031wrw.289.1584638812775; Thu, 19 Mar 2020 10:26:52 -0700 (PDT) MIME-Version: 1.0 References: <20200319131221.14044-1-david@redhat.com> <20200319131221.14044-9-david@redhat.com> In-Reply-To: <20200319131221.14044-9-david@redhat.com> From: Pankaj Gupta Date: Thu, 19 Mar 2020 18:26:41 +0100 Message-ID: Subject: Re: [PATCH v3 8/8] mm/memory_hotplug: allow to specify a default online_type To: David Hildenbrand Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, linux-hyperv@vger.kernel.org, Wei Yang , Michal Hocko , Greg Kroah-Hartman , Andrew Morton , Michal Hocko , Oscar Salvador , "Rafael J. Wysocki" , Baoquan He Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > For now, distributions implement advanced udev rules to essentially > - Don't online any hotplugged memory (s390x) > - Online all memory to ZONE_NORMAL (e.g., most virt environments like > hyperv) > - Online all memory to ZONE_MOVABLE in case the zone imbalance is taken > care of (e.g., bare metal, special virt environments) > > In summary: All memory is usually onlined the same way, however, the > kernel always has to ask user space to come up with the same answer. > E.g., Hyper-V always waits for a memory block to get onlined before > continuing, otherwise it might end up adding memory faster than > onlining it, which can result in strange OOM situations. This waiting > slows down adding of a bigger amount of memory. > > Let's allow to specify a default online_type, not just "online" and > "offline". This allows distributions to configure the default online_type > when booting up and be done with it. > > We can now specify "offline", "online", "online_movable" and > "online_kernel" via > - "memhp_default_state=" on the kernel cmdline > - /sys/devices/system/memory/auto_online_blocks > just like we are able to specify for a single memory block via > /sys/devices/system/memory/memoryX/state > > Reviewed-by: Wei Yang > Acked-by: Michal Hocko > Cc: Greg Kroah-Hartman > Cc: Andrew Morton > Cc: Michal Hocko > Cc: Oscar Salvador > Cc: "Rafael J. Wysocki" > Cc: Baoquan He > Cc: Wei Yang > Signed-off-by: David Hildenbrand > --- > drivers/base/memory.c | 11 +++++------ > include/linux/memory_hotplug.h | 2 ++ > mm/memory_hotplug.c | 8 ++++---- > 3 files changed, 11 insertions(+), 10 deletions(-) > > diff --git a/drivers/base/memory.c b/drivers/base/memory.c > index 8d3e16dab69f..2b09b68b9f78 100644 > --- a/drivers/base/memory.c > +++ b/drivers/base/memory.c > @@ -35,7 +35,7 @@ static const char *const online_type_to_str[] = { > [MMOP_ONLINE_MOVABLE] = "online_movable", > }; > > -static int memhp_online_type_from_str(const char *str) > +int memhp_online_type_from_str(const char *str) > { > int i; > > @@ -394,13 +394,12 @@ static ssize_t auto_online_blocks_store(struct device *dev, > struct device_attribute *attr, > const char *buf, size_t count) > { > - if (sysfs_streq(buf, "online")) > - memhp_default_online_type = MMOP_ONLINE; > - else if (sysfs_streq(buf, "offline")) > - memhp_default_online_type = MMOP_OFFLINE; > - else > + const int online_type = memhp_online_type_from_str(buf); > + > + if (online_type < 0) > return -EINVAL; > > + memhp_default_online_type = online_type; > return count; > } > > diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h > index 6d6f85bb66e9..93d9ada74ddd 100644 > --- a/include/linux/memory_hotplug.h > +++ b/include/linux/memory_hotplug.h > @@ -118,6 +118,8 @@ extern int arch_add_memory(int nid, u64 start, u64 size, > struct mhp_params *params); > extern u64 max_mem_size; > > +extern int memhp_online_type_from_str(const char *str); > + > /* Default online_type (MMOP_*) when new memory blocks are added. */ > extern int memhp_default_online_type; > /* If movable_node boot option specified */ > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 4efcf8cb9ac5..89197163d138 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -74,10 +74,10 @@ int memhp_default_online_type = MMOP_ONLINE; > > static int __init setup_memhp_default_state(char *str) > { > - if (!strcmp(str, "online")) > - memhp_default_online_type = MMOP_ONLINE; > - else if (!strcmp(str, "offline")) > - memhp_default_online_type = MMOP_OFFLINE; > + const int online_type = memhp_online_type_from_str(str); > + > + if (online_type >= 0) > + memhp_default_online_type = online_type; > > return 1; > } > -- Acked-by: Pankaj Gupta > 2.24.1 > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8869C4332E for ; Thu, 19 Mar 2020 17:26:58 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 9E3CC2080C for ; Thu, 19 Mar 2020 17:26:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QuAr0rCw" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9E3CC2080C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 3BE356B0003; Thu, 19 Mar 2020 13:26:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 36F9D6B0005; Thu, 19 Mar 2020 13:26:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2379C6B0007; Thu, 19 Mar 2020 13:26:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0251.hostedemail.com [216.40.44.251]) by kanga.kvack.org (Postfix) with ESMTP id 08FDD6B0003 for ; Thu, 19 Mar 2020 13:26:58 -0400 (EDT) Received: from smtpin13.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id A339F80209C9 for ; Thu, 19 Mar 2020 17:26:57 +0000 (UTC) X-FDA: 76612792074.13.coach25_767635b61c208 X-HE-Tag: coach25_767635b61c208 X-Filterd-Recvd-Size: 7405 Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by imf33.hostedemail.com (Postfix) with ESMTP for ; Thu, 19 Mar 2020 17:26:53 +0000 (UTC) Received: by mail-wr1-f68.google.com with SMTP id o12so3603781wrh.11 for ; Thu, 19 Mar 2020 10:26:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=3F6p9VA0cVyFpp1otJBkETuyS8iU0ECrOYMDdRLVRxI=; b=QuAr0rCwgtiF82xHBWqQ4lSffZ977W564JnS7kFkj4jk+O1B4hwEtwYTvDMJd0KPzC W7UMfVthKh74N0igpoKyyZvB59aca9fYgTGHWI0wxqZpebWmfrzwomuaPhyu2VJEO56g p8dYe7vIpKa4hy2K1oGI5SvuFhZUuFjqaQ5nCVNmmA+eKRhwn1dzNTMdTUiPfQVqqylK /qunIobrNuRJE4LBBm/nxChANZ1J+lczwkjXC9am2snUc9QdDh9lM9vvgy4mt1gKjnpW XeCTdXi13mIw6cdMmEAXO9RJzB/RauIdkXZbliOpFv5hr2B7Il01mhJLYeyZ4YNCat++ sZ8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=3F6p9VA0cVyFpp1otJBkETuyS8iU0ECrOYMDdRLVRxI=; b=igqOXzq+dDwGlnjAXq7WiUPi29oqVj89Kkk2KBhXTi7Az5QTqOSxvKTSq0Xy4KYMhm btE3y86G/zYaz14dQe2/b6AdxlngmvJOQC8HJ259bNc7fh4We7ovXgIvZPD7KHmegsc4 JNe/petxVBF6IxcLeKbDxD0a2Qq4WTp4GU2He8njtFNUvb6S/SxHkeS2zQpul7jHWRD2 F7evXRRb2BDPWCLSbky3ONOxQzBXeu/alp7qji3/TewjEjEHRsiSUOO9Z49hkuodm5os vnXGVVAzj/WMOXOLY5RPvycBniyxkpDeZOW2nXLsoVKv38xHNAOuSXwYOJ6Y2wd6EXkP Lpdw== X-Gm-Message-State: ANhLgQ0bHf6y6Eo1e68VJKpvEHdq8/UqdOy/OGLBk4+/s8zKUbcg481M SCf2xH7isWpRrxqZ1tw3cu7itsbghgbJLIdCJzI= X-Google-Smtp-Source: ADFU+vuGxJnVkZr1vtGIyeQ2LhE/Qgr1xykJ1BEWBBmT3lH5VpBqrgI47O6jQXgHrf2qVsBwT9UGn19a4U3S1q5tmWg= X-Received: by 2002:a5d:56c9:: with SMTP id m9mr5376031wrw.289.1584638812775; Thu, 19 Mar 2020 10:26:52 -0700 (PDT) MIME-Version: 1.0 References: <20200319131221.14044-1-david@redhat.com> <20200319131221.14044-9-david@redhat.com> In-Reply-To: <20200319131221.14044-9-david@redhat.com> From: Pankaj Gupta Date: Thu, 19 Mar 2020 18:26:41 +0100 Message-ID: Subject: Re: [PATCH v3 8/8] mm/memory_hotplug: allow to specify a default online_type To: David Hildenbrand Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, linux-hyperv@vger.kernel.org, Wei Yang , Michal Hocko , Greg Kroah-Hartman , Andrew Morton , Michal Hocko , Oscar Salvador , "Rafael J. Wysocki" , Baoquan He Content-Type: text/plain; charset="UTF-8" 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: > For now, distributions implement advanced udev rules to essentially > - Don't online any hotplugged memory (s390x) > - Online all memory to ZONE_NORMAL (e.g., most virt environments like > hyperv) > - Online all memory to ZONE_MOVABLE in case the zone imbalance is taken > care of (e.g., bare metal, special virt environments) > > In summary: All memory is usually onlined the same way, however, the > kernel always has to ask user space to come up with the same answer. > E.g., Hyper-V always waits for a memory block to get onlined before > continuing, otherwise it might end up adding memory faster than > onlining it, which can result in strange OOM situations. This waiting > slows down adding of a bigger amount of memory. > > Let's allow to specify a default online_type, not just "online" and > "offline". This allows distributions to configure the default online_type > when booting up and be done with it. > > We can now specify "offline", "online", "online_movable" and > "online_kernel" via > - "memhp_default_state=" on the kernel cmdline > - /sys/devices/system/memory/auto_online_blocks > just like we are able to specify for a single memory block via > /sys/devices/system/memory/memoryX/state > > Reviewed-by: Wei Yang > Acked-by: Michal Hocko > Cc: Greg Kroah-Hartman > Cc: Andrew Morton > Cc: Michal Hocko > Cc: Oscar Salvador > Cc: "Rafael J. Wysocki" > Cc: Baoquan He > Cc: Wei Yang > Signed-off-by: David Hildenbrand > --- > drivers/base/memory.c | 11 +++++------ > include/linux/memory_hotplug.h | 2 ++ > mm/memory_hotplug.c | 8 ++++---- > 3 files changed, 11 insertions(+), 10 deletions(-) > > diff --git a/drivers/base/memory.c b/drivers/base/memory.c > index 8d3e16dab69f..2b09b68b9f78 100644 > --- a/drivers/base/memory.c > +++ b/drivers/base/memory.c > @@ -35,7 +35,7 @@ static const char *const online_type_to_str[] = { > [MMOP_ONLINE_MOVABLE] = "online_movable", > }; > > -static int memhp_online_type_from_str(const char *str) > +int memhp_online_type_from_str(const char *str) > { > int i; > > @@ -394,13 +394,12 @@ static ssize_t auto_online_blocks_store(struct device *dev, > struct device_attribute *attr, > const char *buf, size_t count) > { > - if (sysfs_streq(buf, "online")) > - memhp_default_online_type = MMOP_ONLINE; > - else if (sysfs_streq(buf, "offline")) > - memhp_default_online_type = MMOP_OFFLINE; > - else > + const int online_type = memhp_online_type_from_str(buf); > + > + if (online_type < 0) > return -EINVAL; > > + memhp_default_online_type = online_type; > return count; > } > > diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h > index 6d6f85bb66e9..93d9ada74ddd 100644 > --- a/include/linux/memory_hotplug.h > +++ b/include/linux/memory_hotplug.h > @@ -118,6 +118,8 @@ extern int arch_add_memory(int nid, u64 start, u64 size, > struct mhp_params *params); > extern u64 max_mem_size; > > +extern int memhp_online_type_from_str(const char *str); > + > /* Default online_type (MMOP_*) when new memory blocks are added. */ > extern int memhp_default_online_type; > /* If movable_node boot option specified */ > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 4efcf8cb9ac5..89197163d138 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -74,10 +74,10 @@ int memhp_default_online_type = MMOP_ONLINE; > > static int __init setup_memhp_default_state(char *str) > { > - if (!strcmp(str, "online")) > - memhp_default_online_type = MMOP_ONLINE; > - else if (!strcmp(str, "offline")) > - memhp_default_online_type = MMOP_OFFLINE; > + const int online_type = memhp_online_type_from_str(str); > + > + if (online_type >= 0) > + memhp_default_online_type = online_type; > > return 1; > } > -- Acked-by: Pankaj Gupta > 2.24.1 > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CB926C4332D for ; Thu, 19 Mar 2020 20:44:06 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (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 7C21E2071C for ; Thu, 19 Mar 2020 20:44:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QuAr0rCw" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7C21E2071C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 48jzQr4ZrnzDrfY for ; Fri, 20 Mar 2020 07:44:04 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2a00:1450:4864:20::443; helo=mail-wr1-x443.google.com; envelope-from=pankaj.gupta.linux@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=QuAr0rCw; dkim-atps=neutral Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 48jv3P4qXfzDrP6 for ; Fri, 20 Mar 2020 04:26:57 +1100 (AEDT) Received: by mail-wr1-x443.google.com with SMTP id a25so4174578wrd.0 for ; Thu, 19 Mar 2020 10:26:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=3F6p9VA0cVyFpp1otJBkETuyS8iU0ECrOYMDdRLVRxI=; b=QuAr0rCwgtiF82xHBWqQ4lSffZ977W564JnS7kFkj4jk+O1B4hwEtwYTvDMJd0KPzC W7UMfVthKh74N0igpoKyyZvB59aca9fYgTGHWI0wxqZpebWmfrzwomuaPhyu2VJEO56g p8dYe7vIpKa4hy2K1oGI5SvuFhZUuFjqaQ5nCVNmmA+eKRhwn1dzNTMdTUiPfQVqqylK /qunIobrNuRJE4LBBm/nxChANZ1J+lczwkjXC9am2snUc9QdDh9lM9vvgy4mt1gKjnpW XeCTdXi13mIw6cdMmEAXO9RJzB/RauIdkXZbliOpFv5hr2B7Il01mhJLYeyZ4YNCat++ sZ8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=3F6p9VA0cVyFpp1otJBkETuyS8iU0ECrOYMDdRLVRxI=; b=fmZBtYF8H1SCXgH3LMZEveyrOKw1o4rhL+oxhcTZ2fyZWlLe1lA0Usz62Q+BjrCsAY hpq49J2BpaoQmouFEKkSgHODxNZQwMH7ASVoFee+NYzbriE9RmT//9l/sKnNDDkw4GMj oP7hKG/t5FC1Yj6n2vo3k6PiV5UleCpvWsFPbDeewFLwxCvzNSgGDnUY4RbWdFAyY89x WGjiRzFg6LnOneA6BfKRTuOSy5W7byWatfnUqSQpkwOCLEKfC5z7ls5cGQD95TNIVaTo iGL0VnHWn+8sl3g5RmAC9vfZAQl7XmXeZOFJ0vx9lnLlLlJDwpBIUQ2D0vDoIZQfs9nz mLJQ== X-Gm-Message-State: ANhLgQ1SKUO8g0j1VodfZNOTRhWRAD67ZZZsNhYWlKKkonEZz+NaVuIQ 3Fuol/+pR6hayeJ0LpYAgx76e/l4DpIEf90o2kg= X-Google-Smtp-Source: ADFU+vuGxJnVkZr1vtGIyeQ2LhE/Qgr1xykJ1BEWBBmT3lH5VpBqrgI47O6jQXgHrf2qVsBwT9UGn19a4U3S1q5tmWg= X-Received: by 2002:a5d:56c9:: with SMTP id m9mr5376031wrw.289.1584638812775; Thu, 19 Mar 2020 10:26:52 -0700 (PDT) MIME-Version: 1.0 References: <20200319131221.14044-1-david@redhat.com> <20200319131221.14044-9-david@redhat.com> In-Reply-To: <20200319131221.14044-9-david@redhat.com> From: Pankaj Gupta Date: Thu, 19 Mar 2020 18:26:41 +0100 Message-ID: Subject: Re: [PATCH v3 8/8] mm/memory_hotplug: allow to specify a default online_type To: David Hildenbrand Content-Type: text/plain; charset="UTF-8" X-Mailman-Approved-At: Fri, 20 Mar 2020 07:34:17 +1100 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-hyperv@vger.kernel.org, Michal Hocko , Baoquan He , "Rafael J. Wysocki" , Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Wei Yang , linux-mm@kvack.org, Andrew Morton , Michal Hocko , linuxppc-dev@lists.ozlabs.org, Oscar Salvador Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" > For now, distributions implement advanced udev rules to essentially > - Don't online any hotplugged memory (s390x) > - Online all memory to ZONE_NORMAL (e.g., most virt environments like > hyperv) > - Online all memory to ZONE_MOVABLE in case the zone imbalance is taken > care of (e.g., bare metal, special virt environments) > > In summary: All memory is usually onlined the same way, however, the > kernel always has to ask user space to come up with the same answer. > E.g., Hyper-V always waits for a memory block to get onlined before > continuing, otherwise it might end up adding memory faster than > onlining it, which can result in strange OOM situations. This waiting > slows down adding of a bigger amount of memory. > > Let's allow to specify a default online_type, not just "online" and > "offline". This allows distributions to configure the default online_type > when booting up and be done with it. > > We can now specify "offline", "online", "online_movable" and > "online_kernel" via > - "memhp_default_state=" on the kernel cmdline > - /sys/devices/system/memory/auto_online_blocks > just like we are able to specify for a single memory block via > /sys/devices/system/memory/memoryX/state > > Reviewed-by: Wei Yang > Acked-by: Michal Hocko > Cc: Greg Kroah-Hartman > Cc: Andrew Morton > Cc: Michal Hocko > Cc: Oscar Salvador > Cc: "Rafael J. Wysocki" > Cc: Baoquan He > Cc: Wei Yang > Signed-off-by: David Hildenbrand > --- > drivers/base/memory.c | 11 +++++------ > include/linux/memory_hotplug.h | 2 ++ > mm/memory_hotplug.c | 8 ++++---- > 3 files changed, 11 insertions(+), 10 deletions(-) > > diff --git a/drivers/base/memory.c b/drivers/base/memory.c > index 8d3e16dab69f..2b09b68b9f78 100644 > --- a/drivers/base/memory.c > +++ b/drivers/base/memory.c > @@ -35,7 +35,7 @@ static const char *const online_type_to_str[] = { > [MMOP_ONLINE_MOVABLE] = "online_movable", > }; > > -static int memhp_online_type_from_str(const char *str) > +int memhp_online_type_from_str(const char *str) > { > int i; > > @@ -394,13 +394,12 @@ static ssize_t auto_online_blocks_store(struct device *dev, > struct device_attribute *attr, > const char *buf, size_t count) > { > - if (sysfs_streq(buf, "online")) > - memhp_default_online_type = MMOP_ONLINE; > - else if (sysfs_streq(buf, "offline")) > - memhp_default_online_type = MMOP_OFFLINE; > - else > + const int online_type = memhp_online_type_from_str(buf); > + > + if (online_type < 0) > return -EINVAL; > > + memhp_default_online_type = online_type; > return count; > } > > diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h > index 6d6f85bb66e9..93d9ada74ddd 100644 > --- a/include/linux/memory_hotplug.h > +++ b/include/linux/memory_hotplug.h > @@ -118,6 +118,8 @@ extern int arch_add_memory(int nid, u64 start, u64 size, > struct mhp_params *params); > extern u64 max_mem_size; > > +extern int memhp_online_type_from_str(const char *str); > + > /* Default online_type (MMOP_*) when new memory blocks are added. */ > extern int memhp_default_online_type; > /* If movable_node boot option specified */ > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 4efcf8cb9ac5..89197163d138 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -74,10 +74,10 @@ int memhp_default_online_type = MMOP_ONLINE; > > static int __init setup_memhp_default_state(char *str) > { > - if (!strcmp(str, "online")) > - memhp_default_online_type = MMOP_ONLINE; > - else if (!strcmp(str, "offline")) > - memhp_default_online_type = MMOP_OFFLINE; > + const int online_type = memhp_online_type_from_str(str); > + > + if (online_type >= 0) > + memhp_default_online_type = online_type; > > return 1; > } > -- Acked-by: Pankaj Gupta > 2.24.1 > >