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=-7.0 required=3.0 tests=INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham 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 5B074C0044D for ; Mon, 16 Mar 2020 15:31:36 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 193CF20663 for ; Mon, 16 Mar 2020 15:31:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 193CF20663 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id B65D66B0003; Mon, 16 Mar 2020 11:31:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B166D6B0005; Mon, 16 Mar 2020 11:31:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A054B6B0007; Mon, 16 Mar 2020 11:31:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0148.hostedemail.com [216.40.44.148]) by kanga.kvack.org (Postfix) with ESMTP id 886AD6B0003 for ; Mon, 16 Mar 2020 11:31:35 -0400 (EDT) Received: from smtpin12.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 18F2B180AD807 for ; Mon, 16 Mar 2020 15:31:35 +0000 (UTC) X-FDA: 76601614950.12.money71_651789f3ccb39 X-HE-Tag: money71_651789f3ccb39 X-Filterd-Recvd-Size: 7367 Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by imf41.hostedemail.com (Postfix) with ESMTP for ; Mon, 16 Mar 2020 15:31:34 +0000 (UTC) Received: by mail-wm1-f68.google.com with SMTP id m3so18572858wmi.0 for ; Mon, 16 Mar 2020 08:31:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=2enG6C5+gvMUBNCdTFQ/fIEu52PBtZwHWzc4db6XZpQ=; b=HHKYmWkt3ENQpQClP2rZp97yg+pRLfCD/qae7JcXDUPX3tgeaMVdHrTVnzu7fS6ZU3 1gQdO/LALjVa6r/TmHf+eyAedLvp/VGcmCrKxFslDvPHrlTJKI7az9tvLmnJAe557dIs pNq3ArX+ISdEnPGb8dGj6XWwFKlID95WcXWaR552bWuMwDiVYaz7Y8T7bQwnv1mW4hcu eX/da8P25tWb+VGkFs9LUTy59kBO2angWEdgExc2zPI054Ign1ehZ5L15F/KeAKrym6p 3D/ZpPU/wKmAEHVjvxqyoA1/tQTiUkOhoac+ftVvnONVCQRKWPOPwO9ApAyJq6LRzh3l bjYw== X-Gm-Message-State: ANhLgQ34qHM/Jrx7SvQv0XavFLK6U1lvx5aB2MCGLAsOyFW9C9IpzH8y hV3kfwfTLO2lO7qDlCDPRtw= X-Google-Smtp-Source: ADFU+vvbB2Au5sNpIKfd6SgHcAn8IC+EDtW12OQN9jVlc5ApS3fGOjrBFNIuPUEGD0eSFUwGgVqj/g== X-Received: by 2002:a1c:7901:: with SMTP id l1mr28381812wme.188.1584372693830; Mon, 16 Mar 2020 08:31:33 -0700 (PDT) Received: from localhost ([37.188.132.163]) by smtp.gmail.com with ESMTPSA id h15sm320797wrw.97.2020.03.16.08.31.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2020 08:31:33 -0700 (PDT) Date: Mon, 16 Mar 2020 16:31:31 +0100 From: Michal Hocko To: David Hildenbrand Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, linux-hyperv@vger.kernel.org, Greg Kroah-Hartman , Andrew Morton , Oscar Salvador , "Rafael J. Wysocki" , Baoquan He , Wei Yang Subject: Re: [PATCH v1 5/5] mm/memory_hotplug: allow to specify a default online_type Message-ID: <20200316153131.GW11482@dhcp22.suse.cz> References: <20200311123026.16071-1-david@redhat.com> <20200311123026.16071-6-david@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200311123026.16071-6-david@redhat.com> 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: On Wed 11-03-20 13:30:26, David Hildenbrand wrote: > 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 userspace to come up with the same answer. > E.g., HyperV always waits for a memory block to get onlined before > continuing, otherwise it might end up adding memory faster than > hotplugging it, which can result in strange OOM situations. > > 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/systemn/memory/auto_online_blocks > just like we are able to specify for a single memory block via > /sys/devices/systemn/memory/memoryX/state I still strongly believe that the whole interface is wrong. This is just adding more lipstick on the pig. On the other hand I recognize that the event based onlining is a PITA as well. The proper interface would somehow communicate the type of the memory via the event or other sysfs attribute and then the FW/HV could tell that this is an offline memory, hotplugable memory or just an additional memory that doesn't need to support hotremove by the consumer. The userspace or the kernel could handle the hotadd request much more easier that way. > 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 That being said, I will not object to this patch. I simply gave up fighting this interface. So if it works for consumers and it doesn't break the existing userspace (which is shouldn't AFAICS) then go ahead. > --- > 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 c6e090b34c4b..ef55115320fb 100644 > --- a/include/linux/memory_hotplug.h > +++ b/include/linux/memory_hotplug.h > @@ -117,6 +117,8 @@ extern int arch_add_memory(int nid, u64 start, u64 size, > struct mhp_restrictions *restrictions); > 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 01443c70aa27..4a96273eafa7 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -75,10 +75,10 @@ EXPORT_SYMBOL_GPL(memhp_default_online_type); > > 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; > } > -- > 2.24.1 -- Michal Hocko SUSE Labs