From patchwork Fri Nov 30 17:59:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 10706955 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 79781109C for ; Fri, 30 Nov 2018 18:00:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 656F42FF1B for ; Fri, 30 Nov 2018 18:00:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 566632FF33; Fri, 30 Nov 2018 18:00:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A49872FF1B for ; Fri, 30 Nov 2018 18:00:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A56606B5978; Fri, 30 Nov 2018 12:59:59 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id A05386B5979; Fri, 30 Nov 2018 12:59:59 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8CD736B597A; Fri, 30 Nov 2018 12:59:59 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by kanga.kvack.org (Postfix) with ESMTP id 612EB6B5978 for ; Fri, 30 Nov 2018 12:59:59 -0500 (EST) Received: by mail-qt1-f198.google.com with SMTP id z6so6094984qtj.21 for ; Fri, 30 Nov 2018 09:59:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=sIgZT5dIN9J663fMGgb7vGURpyTl84HMrHO43+ecLco=; b=PWlnwp78CKUBbKqtS47tc2gviU4lzl+GCy1bt1BvnS/1fmarYsQe7Nfl5VsqTjYQEH 9zURs81TjEmPwsJOdV5/9TrYzM9i/bHgJFobqfgo2YaVKf2BVxeBGEVnDSZX2zRaE2X+ 9km6SfEXGkG+61HT/HdOiXq9xFoXbXk27X/XWsFPIAy2q488CZbwYR5uNCxrLjloe9/T GBT64lHoASOo9kgveMLkBfwzTSGhooh8HGbSnfsv6ik6XeC+I3lfazTRbhis7oZNQkv+ r9wAa0vScH9/8rjkRTiDfWFLtrOWRbi/uGQk1BQyiUb1UML4t185DUmUb8Uq+OGrM6yL 2NRw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com X-Gm-Message-State: AA+aEWbM9bPkqvfxj21fw7wDfpa0uRACEnhYJBXNffCmGqPTP0qd3gjX b0LC0WWVZEBuSZtkmUz5pPXgEkDJNOWUeOkS7Vz5qp9ONQf3tfWT+Rbt75emSraW02Qcd+0fh7U xrRKRSGOvd00XGAUVyV/7ygI0Wc6MS10HeDaujcp3JDboGLd/EEuLNq1csWDUz6phyA== X-Received: by 2002:a37:f706:: with SMTP id q6mr5943717qkj.96.1543600799097; Fri, 30 Nov 2018 09:59:59 -0800 (PST) X-Google-Smtp-Source: AFSGD/UxtXXxxskI6sb3AWXHIT2oP5ztMMMdYDHQyCyllb5CXgMAKnOAXyjzkIL3jK0qLrWRxLN7 X-Received: by 2002:a37:f706:: with SMTP id q6mr5943687qkj.96.1543600798413; Fri, 30 Nov 2018 09:59:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543600798; cv=none; d=google.com; s=arc-20160816; b=JDpvucQCGXcc0MJVsrhRSwaT0C6SXqkOnobIhEY8ZuKmmfcL70Mi1EVcZG1lhNoNji PgLhNfm/hEIs/Js0KsGZ0g/QUL/2qtNxgk83khxuG5zIdRz5WaeorVsbU54TCisrngfA 9BYQAjoOr6ncGGfXGeQJEzlUdgMDQWakP2qPQzN22NPZadjTgzE9tjEVIz83Gnb2+2YA ZgvlF34uRNk4XYoJc3HYi91wNfNYfBu+XcRsL7429eZKjr9fQS9GL+uAi3xnm976qzGB 53D65djphKWFUNht1F3ugYCJ0d16BuWv7TsIJchCLTfcG8Z5hiDWj0/4FbhhIXGxaAtt U06Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=sIgZT5dIN9J663fMGgb7vGURpyTl84HMrHO43+ecLco=; b=E5utkiT9c4mUp58RHS0HtOv7pzFIAbj5vHTMWg8HKfdY6StxEitFDI29QxY5wZYdy0 e8THvUgFnIX70DN58h9hwXtGfv1Gz+VzlYFYz3XW4Tl+aco6TBo7QFtDd/xgkk/kCn3e wdRFSAFVGYt7GN25k2kqkKt95C83OLXZUXe6S6cVbmkN2AF1ckcVWZQtrqbx49S9LXos BukzyVL7/HF2ZTPjhMr0tdOC6C/KCr/c8oYcJFYYZcvYCOR1gHmWEMi8ykm9qbMHXiKY 8c+4y1d0eKf0rndRgBN0+iQQJZSU2OWh4mc6ZOWS8Ypvt4/XIMU2Q+Wibk9DrjHPrkom 3zSA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id f196si4021590qka.61.2018.11.30.09.59.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Nov 2018 09:59:58 -0800 (PST) Received-SPF: pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; Authentication-Results: mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4937F8E664; Fri, 30 Nov 2018 17:59:57 +0000 (UTC) Received: from t460s.redhat.com (ovpn-126-156.rdu2.redhat.com [10.10.126.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id 734C55D9C9; Fri, 30 Nov 2018 17:59:44 +0000 (UTC) From: David Hildenbrand To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-acpi@vger.kernel.org, devel@linuxdriverproject.org, xen-devel@lists.xenproject.org, x86@kernel.org, David Hildenbrand , Greg Kroah-Hartman , "Rafael J. Wysocki" , Andrew Morton , Ingo Molnar , Pavel Tatashin , Stephen Rothwell , Andrew Banman , "mike.travis@hpe.com" , Oscar Salvador , Dave Hansen , Michal Hocko , =?utf-8?q?Michal_Such=C3=A1nek?= , Vitaly Kuznetsov , Dan Williams , Pavel Tatashin , Martin Schwidefsky , Heiko Carstens Subject: [PATCH RFCv2 1/4] mm/memory_hotplug: Introduce memory block types Date: Fri, 30 Nov 2018 18:59:19 +0100 Message-Id: <20181130175922.10425-2-david@redhat.com> In-Reply-To: <20181130175922.10425-1-david@redhat.com> References: <20181130175922.10425-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 30 Nov 2018 17:59:57 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP Memory onlining should always be handled by user space, because only user space knows which use cases it wants to satisfy. E.g. memory might be onlined to the MOVABLE zone even if it can never be removed from the system, e.g. to make usage of huge pages more reliable. However to implement such rules (especially default rules in distributions) we need more information about the memory that was added in user space. E.g. on x86 we want to online memory provided by balloon devices (e.g. XEN, Hyper-V) differently (-> will not be unplugged by offlining the whole block) than ordinary DIMMs (-> might eventually be unplugged by offlining the whole block). This might also become relevat for other architectures. Also, udev rules right now check if running on s390x and treat all added memory blocks as standby memory (-> don't online automatically). As soon as we support other memory hotplug mechanism (e.g. virtio-mem) checks would have to get more involved (e.g. also check if under KVM) but eventually also wrong (e.g. if KVM ever supports standby memory we are doomed). I decided to allow to specify the type of memory that is getting added to the system. Let's start with two types, BOOT and UNSPECIFIED to get the basic infrastructure running. We'll introduce and use further types in follow-up patches. For now we classify any hotplugged memory temporarily as as UNSPECIFIED (which will eventually be dropped later on). Cc: Greg Kroah-Hartman Cc: "Rafael J. Wysocki" Cc: Andrew Morton Cc: Ingo Molnar Cc: Pavel Tatashin Cc: Stephen Rothwell Cc: Andrew Banman Cc: "mike.travis@hpe.com" Cc: Oscar Salvador Cc: Dave Hansen Cc: Michal Hocko Cc: Michal Suchánek Cc: Vitaly Kuznetsov Cc: Dan Williams Cc: Pavel Tatashin Cc: Martin Schwidefsky Cc: Heiko Carstens Signed-off-by: David Hildenbrand --- drivers/base/memory.c | 38 +++++++++++++++++++++++++++++++++++--- include/linux/memory.h | 27 +++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/drivers/base/memory.c b/drivers/base/memory.c index 0c290f86ab20..17f2985c07c5 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -381,6 +381,29 @@ static ssize_t show_phys_device(struct device *dev, return sprintf(buf, "%d\n", mem->phys_device); } +static ssize_t type_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct memory_block *mem = to_memory_block(dev); + ssize_t len = 0; + + switch (mem->type) { + case MEMORY_BLOCK_UNSPECIFIED: + len = sprintf(buf, "unspecified\n"); + break; + case MEMORY_BLOCK_BOOT: + len = sprintf(buf, "boot\n"); + break; + default: + len = sprintf(buf, "ERROR-UNKNOWN-%ld\n", + mem->state); + WARN_ON(1); + break; + } + + return len; +} + #ifdef CONFIG_MEMORY_HOTREMOVE static void print_allowed_zone(char *buf, int nid, unsigned long start_pfn, unsigned long nr_pages, int online_type, @@ -442,6 +465,7 @@ static DEVICE_ATTR(phys_index, 0444, show_mem_start_phys_index, NULL); static DEVICE_ATTR(state, 0644, show_mem_state, store_mem_state); static DEVICE_ATTR(phys_device, 0444, show_phys_device, NULL); static DEVICE_ATTR(removable, 0444, show_mem_removable, NULL); +static DEVICE_ATTR_RO(type); /* * Block size attribute stuff @@ -620,6 +644,7 @@ static struct attribute *memory_memblk_attrs[] = { &dev_attr_state.attr, &dev_attr_phys_device.attr, &dev_attr_removable.attr, + &dev_attr_type.attr, #ifdef CONFIG_MEMORY_HOTREMOVE &dev_attr_valid_zones.attr, #endif @@ -657,13 +682,17 @@ int register_memory(struct memory_block *memory) } static int init_memory_block(struct memory_block **memory, - struct mem_section *section, unsigned long state) + struct mem_section *section, unsigned long state, + int type) { struct memory_block *mem; unsigned long start_pfn; int scn_nr; int ret = 0; + if (type == MEMORY_BLOCK_NONE) + return -EINVAL; + mem = kzalloc(sizeof(*mem), GFP_KERNEL); if (!mem) return -ENOMEM; @@ -675,6 +704,7 @@ static int init_memory_block(struct memory_block **memory, mem->state = state; start_pfn = section_nr_to_pfn(mem->start_section_nr); mem->phys_device = arch_get_memory_phys_device(start_pfn); + mem->type = type; ret = register_memory(mem); @@ -699,7 +729,8 @@ static int add_memory_block(int base_section_nr) if (section_count == 0) return 0; - ret = init_memory_block(&mem, __nr_to_section(section_nr), MEM_ONLINE); + ret = init_memory_block(&mem, __nr_to_section(section_nr), MEM_ONLINE, + MEMORY_BLOCK_BOOT); if (ret) return ret; mem->section_count = section_count; @@ -722,7 +753,8 @@ int hotplug_memory_register(int nid, struct mem_section *section) mem->section_count++; put_device(&mem->dev); } else { - ret = init_memory_block(&mem, section, MEM_OFFLINE); + ret = init_memory_block(&mem, section, MEM_OFFLINE, + MEMORY_BLOCK_UNSPECIFIED); if (ret) goto out; mem->section_count++; diff --git a/include/linux/memory.h b/include/linux/memory.h index d75ec88ca09d..06268e96e0da 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h @@ -34,12 +34,39 @@ struct memory_block { int (*phys_callback)(struct memory_block *); struct device dev; int nid; /* NID for this memory block */ + int type; /* type of this memory block */ }; int arch_get_memory_phys_device(unsigned long start_pfn); unsigned long memory_block_size_bytes(void); int set_memory_block_size_order(unsigned int order); +/* + * Memory block types allow user space to formulate rules if and how to + * online memory blocks. The types are exposed to user space as text + * strings in sysfs. + * + * MEMORY_BLOCK_NONE: + * No memory block is to be created (e.g. device memory). Not exposed to + * user space. + * + * MEMORY_BLOCK_UNSPECIFIED: + * The type of memory block was not further specified when adding the + * memory block. + * + * MEMORY_BLOCK_BOOT: + * This memory block was added during boot by the basic system. No + * specific device driver takes care of this memory block. This memory + * block type is onlined automatically by the kernel during boot and might + * later be managed by a different device driver, in which case the type + * might change. + */ +enum { + MEMORY_BLOCK_NONE = 0, + MEMORY_BLOCK_UNSPECIFIED, + MEMORY_BLOCK_BOOT, +}; + /* These states are exposed to userspace as text strings in sysfs */ #define MEM_ONLINE (1<<0) /* exposed to userspace */ #define MEM_GOING_OFFLINE (1<<1) /* exposed to userspace */ From patchwork Fri Nov 30 17:59:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 10706961 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7E60213B0 for ; Fri, 30 Nov 2018 18:00:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6AACF2FF6F for ; Fri, 30 Nov 2018 18:00:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5DA212FF86; Fri, 30 Nov 2018 18:00:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1C9D82FF6F for ; Fri, 30 Nov 2018 18:00:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C02A76B597B; Fri, 30 Nov 2018 13:00:17 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id BB45E6B597C; Fri, 30 Nov 2018 13:00:17 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A2CB56B597D; Fri, 30 Nov 2018 13:00:17 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by kanga.kvack.org (Postfix) with ESMTP id 6EBFA6B597B for ; Fri, 30 Nov 2018 13:00:17 -0500 (EST) Received: by mail-qk1-f200.google.com with SMTP id 92so6050716qkx.19 for ; Fri, 30 Nov 2018 10:00:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=LcaNqNrbyAzbnE0+wFOBNhvZUbUM5bvFtHi2pln6ues=; b=Ae1sE1htPJJjZoCB84mOHqYIfoijOpOQhK30ibEqomHsLshuUw85px5sJO4CV5gt7J Kv2vn/ldDrybXrqyDAJDcX/9YfAuTiABjAF+Ps35mg57GtaPHaMKnfXx0cMfMOa3w7tP LSrUDdDbYU8bTPpnIzpMQvQ8TyEyDybUH/EqHrBys9Q3P378E/BlBG4NYkNjygEwkxik CY918DewyaJZJaeOftM2jWIxQBpvdcR8uwo+Ma5i12a/yUeCgGmqSQ6v2gVpeBcoJu7m Q6OeNLq0XEGf8iVIHBiLNdm5zUfOOH86ymYkTLvIej1z/Arvi4sHGFUzHgL5hraFJRdZ VBXA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com X-Gm-Message-State: AA+aEWanbMLdFC9xVShZxnDJrGKdslC+CoXhevJ9Q0WORVEmaKCS6La1 fb2taDsqa8TkltJbpYv9pmYl05lIk8T+WXbjlae6tT8qM+/O5mlI0yApjFZz1Hq5hCi8nYinjNm uu14y9SNK6HYEbM6qyc3dmqXVBIDiyHVi3+M0brIPM2y+tTGdrviVkduWe1QUtR7/iw== X-Received: by 2002:a0c:d80f:: with SMTP id h15mr6540347qvj.228.1543600817162; Fri, 30 Nov 2018 10:00:17 -0800 (PST) X-Google-Smtp-Source: AFSGD/UuRXsxys6qsrMawy8zFbI9/1jvoMz2dozm8TYkLKQ1140IghLHnnxx0aRWPIXTdJPNNuBZ X-Received: by 2002:a0c:d80f:: with SMTP id h15mr6540237qvj.228.1543600815552; Fri, 30 Nov 2018 10:00:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543600815; cv=none; d=google.com; s=arc-20160816; b=VLM5g5xfIrzFjdVrD4+OZzBg2kP1cjOoLy/UmEKE2IRc457JCj3RadH69BrJZUCRJc 7C7z4FuDS+rQK3fpP5mcEFib1AyJ36KIkfQH6l3KEYNtct9m3FWXIz71uPUG4Ye0REYS qqrt0jerll629c/TtuXDH3uoCbB/JSulX0k24nV7VvTQA+kkOL8iqPBk689fgSzMROWt 4JqJ1fCG8Y4hLdOZAT41/qFiqw2o0QFdwSNZqZnnJAYCvYUI5yxdGxrVne4z8uas/wPW 1k7B1qDui3T2bwNkc+kEw5H2YEoAl9s+vWs4kMeUhgT+Mb+g8rSOLD1QT7hhcT3PDGH5 hxRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=LcaNqNrbyAzbnE0+wFOBNhvZUbUM5bvFtHi2pln6ues=; b=cuA5eqan3qrwh0YgmIk0yf5wG8pF7OKcEqyG8FPrZpUU+yDmKf7cflhHqLjld0W6zr Pazb6MgoYyITLellVunCUGTWLEwD54libo8wBugh1oyhXftaxMgsyTneFnaoby5qRWpP 2sF25XWX+OfIRagit8bElEQAijEJs29wZVwNjwLsyDMshAzqFSxQY0Dh0J8oTLXFlJyh a4nUyXaQmWsYIc9KiDaF2o/MxpCosM6fQpkoC5TpbPJBc/p1BLGR9hmg6tXPBJGHAQyF 3vCz1POnhiSjsELPvJDCdHAqimYrl2kYB1+WFMD2m7wZdUemWeL1DRV5Z6qVpzPPKbb3 CX3A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id u189si482290qkf.44.2018.11.30.10.00.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Nov 2018 10:00:15 -0800 (PST) Received-SPF: pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; Authentication-Results: mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 643938E3EA; Fri, 30 Nov 2018 18:00:13 +0000 (UTC) Received: from t460s.redhat.com (ovpn-126-156.rdu2.redhat.com [10.10.126.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id B844C5D9C9; Fri, 30 Nov 2018 17:59:57 +0000 (UTC) From: David Hildenbrand To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-acpi@vger.kernel.org, devel@linuxdriverproject.org, xen-devel@lists.xenproject.org, x86@kernel.org, David Hildenbrand , Tony Luck , Fenghua Yu , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Martin Schwidefsky , Heiko Carstens , Yoshinori Sato , Rich Felker , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Greg Kroah-Hartman , "Rafael J. Wysocki" , Andrew Morton , Mike Rapoport , Michal Hocko , Dan Williams , "Kirill A. Shutemov" , Oscar Salvador , Nicholas Piggin , Stephen Rothwell , Christophe Leroy , =?utf-8?q?Jonathan_Neusch=C3=A4?= =?utf-8?q?fer?= , Mauricio Faria de Oliveira , Vasily Gorbik , Arun KS , Rob Herring , Pavel Tatashin , "mike.travis@hpe.com" , Joonsoo Kim , Wei Yang , Logan Gunthorpe , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , =?utf-8?q?Jan_H=2E_S?= =?utf-8?q?ch=C3=B6nherr?= , Dave Jiang , Matthew Wilcox , Mathieu Malaterre Subject: [PATCH RFCv2 2/4] mm/memory_hotplug: Replace "bool want_memblock" by "int type" Date: Fri, 30 Nov 2018 18:59:20 +0100 Message-Id: <20181130175922.10425-3-david@redhat.com> In-Reply-To: <20181130175922.10425-1-david@redhat.com> References: <20181130175922.10425-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 30 Nov 2018 18:00:14 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP Let's pass a memory block type instead. Pass "MEMORY_BLOCK_NONE" for device memory and for now "MEMORY_BLOCK_UNSPECIFIED" for anything else. No functional change. Cc: Tony Luck Cc: Fenghua Yu Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Cc: Michael Ellerman Cc: Martin Schwidefsky Cc: Heiko Carstens Cc: Yoshinori Sato Cc: Rich Felker Cc: Dave Hansen Cc: Andy Lutomirski Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Borislav Petkov Cc: "H. Peter Anvin" Cc: x86@kernel.org Cc: Greg Kroah-Hartman Cc: "Rafael J. Wysocki" Cc: Andrew Morton Cc: Mike Rapoport Cc: Michal Hocko Cc: Dan Williams Cc: "Kirill A. Shutemov" Cc: Oscar Salvador Cc: Nicholas Piggin Cc: Stephen Rothwell Cc: Christophe Leroy Cc: "Jonathan Neuschäfer" Cc: Mauricio Faria de Oliveira Cc: Vasily Gorbik Cc: Arun KS Cc: Rob Herring Cc: Pavel Tatashin Cc: "mike.travis@hpe.com" Cc: Joonsoo Kim Cc: Wei Yang Cc: Logan Gunthorpe Cc: "Jérôme Glisse" Cc: "Jan H. Schönherr" Cc: Dave Jiang Cc: Matthew Wilcox Cc: Mathieu Malaterre Signed-off-by: David Hildenbrand --- arch/ia64/mm/init.c | 4 ++-- arch/powerpc/mm/mem.c | 4 ++-- arch/s390/mm/init.c | 4 ++-- arch/sh/mm/init.c | 4 ++-- arch/x86/mm/init_32.c | 4 ++-- arch/x86/mm/init_64.c | 8 ++++---- drivers/base/memory.c | 11 +++++++---- include/linux/memory.h | 2 +- include/linux/memory_hotplug.h | 12 ++++++------ kernel/memremap.c | 6 ++++-- mm/memory_hotplug.c | 16 ++++++++-------- 11 files changed, 40 insertions(+), 35 deletions(-) diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 904fe55e10fc..408635d2902f 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -646,13 +646,13 @@ mem_init (void) #ifdef CONFIG_MEMORY_HOTPLUG int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, - bool want_memblock) + int type) { unsigned long start_pfn = start >> PAGE_SHIFT; unsigned long nr_pages = size >> PAGE_SHIFT; int ret; - ret = __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); + ret = __add_pages(nid, start_pfn, nr_pages, altmap, type); if (ret) printk("%s: Problem encountered in __add_pages() as ret=%d\n", __func__, ret); diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index b3c9ee5c4f78..e394637da270 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c @@ -118,7 +118,7 @@ int __weak remove_section_mapping(unsigned long start, unsigned long end) } int __meminit arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, - bool want_memblock) + int type) { unsigned long start_pfn = start >> PAGE_SHIFT; unsigned long nr_pages = size >> PAGE_SHIFT; @@ -135,7 +135,7 @@ int __meminit arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap * } flush_inval_dcache_range(start, start + size); - return __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); + return __add_pages(nid, start_pfn, nr_pages, altmap, type); } #ifdef CONFIG_MEMORY_HOTREMOVE diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index 3e82f66d5c61..ba2c56328e6d 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c @@ -225,7 +225,7 @@ device_initcall(s390_cma_mem_init); #endif /* CONFIG_CMA */ int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, - bool want_memblock) + int type) { unsigned long start_pfn = PFN_DOWN(start); unsigned long size_pages = PFN_DOWN(size); @@ -235,7 +235,7 @@ int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, if (rc) return rc; - rc = __add_pages(nid, start_pfn, size_pages, altmap, want_memblock); + rc = __add_pages(nid, start_pfn, size_pages, altmap, type); if (rc) vmem_remove_mapping(start, size); return rc; diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index 1a483a008872..5fbb8724e0f2 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c @@ -419,14 +419,14 @@ void free_initrd_mem(unsigned long start, unsigned long end) #ifdef CONFIG_MEMORY_HOTPLUG int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, - bool want_memblock) + int type) { unsigned long start_pfn = PFN_DOWN(start); unsigned long nr_pages = size >> PAGE_SHIFT; int ret; /* We only have ZONE_NORMAL, so this is easy.. */ - ret = __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); + ret = __add_pages(nid, start_pfn, nr_pages, altmap, type); if (unlikely(ret)) printk("%s: Failed, __add_pages() == %d\n", __func__, ret); diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index 0b8c7b0033d2..41e409b29d2b 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c @@ -851,12 +851,12 @@ void __init mem_init(void) #ifdef CONFIG_MEMORY_HOTPLUG int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, - bool want_memblock) + int type) { unsigned long start_pfn = start >> PAGE_SHIFT; unsigned long nr_pages = size >> PAGE_SHIFT; - return __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); + return __add_pages(nid, start_pfn, nr_pages, altmap, type); } #ifdef CONFIG_MEMORY_HOTREMOVE diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index f80d98381a97..5b4f3dcd44cf 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -783,11 +783,11 @@ static void update_end_of_memory_vars(u64 start, u64 size) } int add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages, - struct vmem_altmap *altmap, bool want_memblock) + struct vmem_altmap *altmap, int type) { int ret; - ret = __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); + ret = __add_pages(nid, start_pfn, nr_pages, altmap, type); WARN_ON_ONCE(ret); /* update max_pfn, max_low_pfn and high_memory */ @@ -798,14 +798,14 @@ int add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages, } int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, - bool want_memblock) + int type) { unsigned long start_pfn = start >> PAGE_SHIFT; unsigned long nr_pages = size >> PAGE_SHIFT; init_memory_mapping(start, start + size); - return add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); + return add_pages(nid, start_pfn, nr_pages, altmap, type); } #define PAGE_INUSE 0xFD diff --git a/drivers/base/memory.c b/drivers/base/memory.c index 17f2985c07c5..c42300082c88 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -741,7 +741,7 @@ static int add_memory_block(int base_section_nr) * need an interface for the VM to add new memory regions, * but without onlining it. */ -int hotplug_memory_register(int nid, struct mem_section *section) +int hotplug_memory_register(int nid, struct mem_section *section, int type) { int ret = 0; struct memory_block *mem; @@ -750,11 +750,14 @@ int hotplug_memory_register(int nid, struct mem_section *section) mem = find_memory_block(section); if (mem) { - mem->section_count++; + /* make sure the type matches */ + if (mem->type == type) + mem->section_count++; + else + ret = -EINVAL; put_device(&mem->dev); } else { - ret = init_memory_block(&mem, section, MEM_OFFLINE, - MEMORY_BLOCK_UNSPECIFIED); + ret = init_memory_block(&mem, section, MEM_OFFLINE, type); if (ret) goto out; mem->section_count++; diff --git a/include/linux/memory.h b/include/linux/memory.h index 06268e96e0da..9f39ef41e6d2 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h @@ -138,7 +138,7 @@ extern int register_memory_notifier(struct notifier_block *nb); extern void unregister_memory_notifier(struct notifier_block *nb); extern int register_memory_isolate_notifier(struct notifier_block *nb); extern void unregister_memory_isolate_notifier(struct notifier_block *nb); -int hotplug_memory_register(int nid, struct mem_section *section); +int hotplug_memory_register(int nid, struct mem_section *section, int type); #ifdef CONFIG_MEMORY_HOTREMOVE extern int unregister_memory_section(int nid, struct mem_section *); #endif diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 5493d3fa0c7f..667a37aa9a3c 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -117,18 +117,18 @@ extern void shrink_zone(struct zone *zone, unsigned long start_pfn, /* reasonably generic interface to expand the physical pages */ extern int __add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages, - struct vmem_altmap *altmap, bool want_memblock); + struct vmem_altmap *altmap, int type); #ifndef CONFIG_ARCH_HAS_ADD_PAGES static inline int add_pages(int nid, unsigned long start_pfn, - unsigned long nr_pages, struct vmem_altmap *altmap, - bool want_memblock) + unsigned long nr_pages, struct vmem_altmap *altmap, + int type) { - return __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); + return __add_pages(nid, start_pfn, nr_pages, altmap, type); } #else /* ARCH_HAS_ADD_PAGES */ int add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages, - struct vmem_altmap *altmap, bool want_memblock); + struct vmem_altmap *altmap, int type); #endif /* ARCH_HAS_ADD_PAGES */ #ifdef CONFIG_NUMA @@ -330,7 +330,7 @@ extern int __add_memory(int nid, u64 start, u64 size); extern int add_memory(int nid, u64 start, u64 size); extern int add_memory_resource(int nid, struct resource *resource); extern int arch_add_memory(int nid, u64 start, u64 size, - struct vmem_altmap *altmap, bool want_memblock); + struct vmem_altmap *altmap, int type); extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, unsigned long nr_pages, struct vmem_altmap *altmap); extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages); diff --git a/kernel/memremap.c b/kernel/memremap.c index 66cbf334203b..422e4e779208 100644 --- a/kernel/memremap.c +++ b/kernel/memremap.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -215,7 +216,8 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) */ if (pgmap->type == MEMORY_DEVICE_PRIVATE) { error = add_pages(nid, align_start >> PAGE_SHIFT, - align_size >> PAGE_SHIFT, NULL, false); + align_size >> PAGE_SHIFT, NULL, + MEMORY_BLOCK_NONE); } else { error = kasan_add_zero_shadow(__va(align_start), align_size); if (error) { @@ -224,7 +226,7 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) } error = arch_add_memory(nid, align_start, align_size, altmap, - false); + MEMORY_BLOCK_NONE); } if (!error) { diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 16c600771298..7246faa44488 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -246,7 +246,7 @@ void __init register_page_bootmem_info_node(struct pglist_data *pgdat) #endif /* CONFIG_HAVE_BOOTMEM_INFO_NODE */ static int __meminit __add_section(int nid, unsigned long phys_start_pfn, - struct vmem_altmap *altmap, bool want_memblock) + struct vmem_altmap *altmap, int type) { int ret; @@ -257,10 +257,11 @@ static int __meminit __add_section(int nid, unsigned long phys_start_pfn, if (ret < 0) return ret; - if (!want_memblock) + if (type == MEMORY_BLOCK_NONE) return 0; - return hotplug_memory_register(nid, __pfn_to_section(phys_start_pfn)); + return hotplug_memory_register(nid, __pfn_to_section(phys_start_pfn), + type); } /* @@ -270,8 +271,8 @@ static int __meminit __add_section(int nid, unsigned long phys_start_pfn, * add the new pages. */ int __ref __add_pages(int nid, unsigned long phys_start_pfn, - unsigned long nr_pages, struct vmem_altmap *altmap, - bool want_memblock) + unsigned long nr_pages, struct vmem_altmap *altmap, + int type) { unsigned long i; int err = 0; @@ -295,8 +296,7 @@ int __ref __add_pages(int nid, unsigned long phys_start_pfn, } for (i = start_sec; i <= end_sec; i++) { - err = __add_section(nid, section_nr_to_pfn(i), altmap, - want_memblock); + err = __add_section(nid, section_nr_to_pfn(i), altmap, type); /* * EEXIST is finally dealt with by ioresource collision @@ -1100,7 +1100,7 @@ int __ref add_memory_resource(int nid, struct resource *res) new_node = ret; /* call arch's memory hotadd */ - ret = arch_add_memory(nid, start, size, NULL, true); + ret = arch_add_memory(nid, start, size, NULL, MEMORY_TYPE_UNSPECIFIED); if (ret < 0) goto error; From patchwork Fri Nov 30 17:59:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 10706963 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A030414D6 for ; Fri, 30 Nov 2018 18:00:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8B66F2FF8E for ; Fri, 30 Nov 2018 18:00:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7C33D2FF6F; Fri, 30 Nov 2018 18:00:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1CBCB2FF6F for ; Fri, 30 Nov 2018 18:00:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B1A5E6B597C; Fri, 30 Nov 2018 13:00:34 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id AEF016B597D; Fri, 30 Nov 2018 13:00:34 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 991296B597E; Fri, 30 Nov 2018 13:00:34 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by kanga.kvack.org (Postfix) with ESMTP id 66A216B597C for ; Fri, 30 Nov 2018 13:00:34 -0500 (EST) Received: by mail-qk1-f199.google.com with SMTP id a199so5927768qkb.23 for ; Fri, 30 Nov 2018 10:00:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=fOAgJv4CYab+0jm77qRExhD+tagc1uJFvHyePFoSYg8=; b=XiIx4YCNCeVAgO0kKCmPS6z5cGUucvuQEt96o9qMBwEMmxxQmjwILZuKsE2bK2qU1r Z0bj7zKIslnFRrC9/EORBu91lSH6mSMYvaQes81Q74hI4H42dov2VybFjI9CdQHD4obo 2o+VKT85r8bAICjhdFxNK51OafhBxE1IONj6srQrZDkPc+IS3lHSMvETGT7wMK6yw8Pp vUUkiyFW5sYt/wH22SU7El3uGD+i/jXXM4/Yu1DWu4nOcWqZChAnC3Js6fOEeYPz4X9i wJNFO8meMezc5wP5i6DuzmBp9Kxxd1NJdqZf+3e51aYW5JMzxqFp6tIZ3AKUqIChD8gu ZSpw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com X-Gm-Message-State: AA+aEWbyqsD/mOc42fMu3k0XS5xNLo1AhH1KyfHgBakmrD0IYxIGSOrA EpbsERNgsgFAdoVkllDl4Oppe7E/Wj9JiPr7MdaKm1xEC++CoT+orv27p9ypBjOJTVQDCUFP5O0 IeGVQhD6sbhfCJdvdz1QoGHtIjPkuFDDmMDP+K/QZ4zy4s0j4HdtkBtpqfrauVf2/FQ== X-Received: by 2002:a0c:f289:: with SMTP id k9mr6349002qvl.97.1543600834051; Fri, 30 Nov 2018 10:00:34 -0800 (PST) X-Google-Smtp-Source: AFSGD/WoFujKVpecTb4pmQ13qUQGHCs6XtO720gTunX8fLOlIlgRXTqOuCNbOMMO6PQk5M3C5GeE X-Received: by 2002:a0c:f289:: with SMTP id k9mr6348913qvl.97.1543600832691; Fri, 30 Nov 2018 10:00:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543600832; cv=none; d=google.com; s=arc-20160816; b=GvHe45vOl9B5WxXA5p3TDJA0OAQX4q6jRXTTY0/4Nx36jIDGJVdHcCjnrHfWnnS/No 2BLQsSBDNIrs6LEl97kXFvL2h9cfkBuVFyMdyeuUywuVAz+DS4BPEROiNO0Ow9K4oYkF JRIVEl4SeOBoVYJbl76F07eiFBBRdVAtUP5vMLKiVGuG7erA3w9WCwfCvp7FdlZVwfI+ qug27HcokthuNgVZHwUdnryDnAB2BNo+hB07OOaU73kPX4mwnR0z8HbmTrg2q1gDSgBB 8pEiNmHSpva5mt8p5BXEqLQNMnaqqLtny9jmxNLLhYzAuFKVf14rbjOrWhJFxijW0myT cHvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=fOAgJv4CYab+0jm77qRExhD+tagc1uJFvHyePFoSYg8=; b=H/7Gv9yJ+9dlYYTUhOKg6+c6hdAgATK+F2i955+d4wEOQ/9F5Z7PpsKZkawtnCvbgW ZLAQH4VRje7vzxVjrFpyMnzkmljCg8PEldNjnchLhvVXSp5eKs2Z+PC3ayssOJC0XB4y XzVOWsnmgtT94cYDjSC9Qtz3SXZ21wI/BeSjG7eUNMdHAtOeGu+MJyfkkygmvPVsODxZ aoyFat6AUjCE7ObyzNHvOGHrNS6bo6q356qYDJy/1WwL9Fu8iHs3/Chw5V/2TRItYFyf ngjvbcnhwDLwp7nFvErJD2dWLyXGCuReOfOQNpRIYacjtf676Omx4k88LO3N/UnE1YJL s4sg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id n27si337732qtl.90.2018.11.30.10.00.32 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Nov 2018 10:00:32 -0800 (PST) Received-SPF: pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; Authentication-Results: mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C27F63001569; Fri, 30 Nov 2018 18:00:30 +0000 (UTC) Received: from t460s.redhat.com (ovpn-126-156.rdu2.redhat.com [10.10.126.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6455C5D9C9; Fri, 30 Nov 2018 18:00:15 +0000 (UTC) From: David Hildenbrand To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-acpi@vger.kernel.org, devel@linuxdriverproject.org, xen-devel@lists.xenproject.org, x86@kernel.org, David Hildenbrand , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , "Rafael J. Wysocki" , Len Brown , Greg Kroah-Hartman , "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , Martin Schwidefsky , Heiko Carstens , Boris Ostrovsky , Juergen Gross , Stefano Stabellini , Rashmica Gupta , Andrew Morton , Pavel Tatashin , Balbir Singh , Michael Neuling , Nathan Fontenot , YueHaibing , Vasily Gorbik , Ingo Molnar , Stephen Rothwell , "mike.travis@hpe.com" , Oscar Salvador , Joonsoo Kim , Mathieu Malaterre , Michal Hocko , Arun KS , Andrew Banman , Dave Hansen , =?utf-8?q?Michal_Such=C3=A1nek?= , Vitaly Kuznetsov , Dan Williams Subject: [PATCH RFCv2 3/4] mm/memory_hotplug: Introduce and use more memory types Date: Fri, 30 Nov 2018 18:59:21 +0100 Message-Id: <20181130175922.10425-4-david@redhat.com> In-Reply-To: <20181130175922.10425-1-david@redhat.com> References: <20181130175922.10425-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Fri, 30 Nov 2018 18:00:31 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP Let's introduce new types for different kinds of memory blocks and use them in existing code. As I don't see an easy way to split this up, do it in one hunk for now. acpi: Use DIMM or DIMM_UNREMOVABLE depending on hotremove support in the kernel. Properly change the type when trying to add memory that was already detected and used during boot (so this memory will correctly end up as "acpi" in user space). pseries: Use DIMM or DIMM_UNREMOVABLE depending on hotremove support in the kernel. As far as I see, handling like in the acpi case for existing blocks is not required. probed memory from user space: Use DIMM_UNREMOVABLE as there is no interface to get rid of this code again. hv_balloon,xen/balloon: Use BALLOON. As simple as that :) s390x/sclp: Use a dedicated type S390X_STANDBY as this type of memory and it's semantics are very s390x specific. powernv/memtrace: Only allow to use BOOT memory for memtrace. I consider this code in general dangerous, but we have to keep it working ... most probably just a debug feature. Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Cc: Michael Ellerman Cc: "Rafael J. Wysocki" Cc: Len Brown Cc: Greg Kroah-Hartman Cc: "K. Y. Srinivasan" Cc: Haiyang Zhang Cc: Stephen Hemminger Cc: Martin Schwidefsky Cc: Heiko Carstens Cc: Boris Ostrovsky Cc: Juergen Gross Cc: Stefano Stabellini Cc: Rashmica Gupta Cc: Andrew Morton Cc: Pavel Tatashin Cc: Balbir Singh Cc: Michael Neuling Cc: Nathan Fontenot Cc: YueHaibing Cc: Vasily Gorbik Cc: Ingo Molnar Cc: Stephen Rothwell Cc: "mike.travis@hpe.com" Cc: Oscar Salvador Cc: Joonsoo Kim Cc: Mathieu Malaterre Cc: Michal Hocko Cc: Arun KS Cc: Andrew Banman Cc: Dave Hansen Cc: Michal Suchánek Cc: Vitaly Kuznetsov Cc: Dan Williams Signed-off-by: David Hildenbrand --- At first I tried to abstract the types quite a lot, but I think there are subtle differences that are worth differentiating. More details about the types can be found in the excessive documentation. It is wort noting that BALLOON_MOVABLE has no user yet, but I have something in mind that might want to make use of that (virtio-mem). Just included it to discuss the general approach. I can drop it from this patch. --- arch/powerpc/platforms/powernv/memtrace.c | 9 ++-- .../platforms/pseries/hotplug-memory.c | 7 ++- drivers/acpi/acpi_memhotplug.c | 16 ++++++- drivers/base/memory.c | 18 ++++++- drivers/hv/hv_balloon.c | 3 +- drivers/s390/char/sclp_cmd.c | 3 +- drivers/xen/balloon.c | 2 +- include/linux/memory.h | 47 ++++++++++++++++++- include/linux/memory_hotplug.h | 6 +-- mm/memory_hotplug.c | 15 +++--- 10 files changed, 104 insertions(+), 22 deletions(-) diff --git a/arch/powerpc/platforms/powernv/memtrace.c b/arch/powerpc/platforms/powernv/memtrace.c index 248a38ad25c7..5d08db87091e 100644 --- a/arch/powerpc/platforms/powernv/memtrace.c +++ b/arch/powerpc/platforms/powernv/memtrace.c @@ -54,9 +54,9 @@ static const struct file_operations memtrace_fops = { .open = simple_open, }; -static int check_memblock_online(struct memory_block *mem, void *arg) +static int check_memblock_boot_and_online(struct memory_block *mem, void *arg) { - if (mem->state != MEM_ONLINE) + if (mem->type != MEM_BLOCK_BOOT || mem->state != MEM_ONLINE) return -1; return 0; @@ -77,7 +77,7 @@ static bool memtrace_offline_pages(u32 nid, u64 start_pfn, u64 nr_pages) u64 end_pfn = start_pfn + nr_pages - 1; if (walk_memory_range(start_pfn, end_pfn, NULL, - check_memblock_online)) + check_memblock_boot_and_online)) return false; walk_memory_range(start_pfn, end_pfn, (void *)MEM_GOING_OFFLINE, @@ -233,7 +233,8 @@ static int memtrace_online(void) ent->mem = 0; } - if (add_memory(ent->nid, ent->start, ent->size)) { + if (add_memory(ent->nid, ent->start, ent->size, + MEMORY_BLOCK_BOOT)) { pr_err("Failed to add trace memory to node %d\n", ent->nid); ret += 1; diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index 2a983b5a52e1..5f91359c7993 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c @@ -651,7 +651,7 @@ static int dlpar_memory_remove_by_ic(u32 lmbs_to_remove, u32 drc_index) static int dlpar_add_lmb(struct drmem_lmb *lmb) { unsigned long block_sz; - int nid, rc; + int nid, rc, type = MEMORY_BLOCK_DIMM; if (lmb->flags & DRCONF_MEM_ASSIGNED) return -EINVAL; @@ -667,8 +667,11 @@ static int dlpar_add_lmb(struct drmem_lmb *lmb) /* Find the node id for this address */ nid = memory_add_physaddr_to_nid(lmb->base_addr); + if (!IS_ENABLED(CONFIG_MEMORY_HOTREMOVE)) + type = MEMORY_BLOCK_DIMM_UNREMOVABLE; + /* Add the memory */ - rc = __add_memory(nid, lmb->base_addr, block_sz); + rc = __add_memory(nid, lmb->base_addr, block_sz, type); if (rc) { invalidate_lmb_associativity_index(lmb); return rc; diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c index 8fe0960ea572..f841113b450d 100644 --- a/drivers/acpi/acpi_memhotplug.c +++ b/drivers/acpi/acpi_memhotplug.c @@ -177,6 +177,13 @@ static unsigned long acpi_meminfo_end_pfn(struct acpi_memory_info *info) static int acpi_bind_memblk(struct memory_block *mem, void *arg) { + /* switch the type of memory block if this memory was already present */ + if (mem->type == MEMORY_BLOCK_BOOT) { + if (IS_ENABLED(CONFIG_MEMORY_HOTREMOVE)) + mem->type = MEMORY_BLOCK_DIMM; + else + mem->type = MEMORY_BLOCK_DIMM_UNREMOVABLE; + } return acpi_bind_one(&mem->dev, arg); } @@ -191,6 +198,7 @@ static int acpi_bind_memory_blocks(struct acpi_memory_info *info, static int acpi_unbind_memblk(struct memory_block *mem, void *arg) { acpi_unbind_one(&mem->dev); + mem->type = MEMORY_BLOCK_BOOT; return 0; } @@ -203,10 +211,13 @@ static void acpi_unbind_memory_blocks(struct acpi_memory_info *info) static int acpi_memory_enable_device(struct acpi_memory_device *mem_device) { acpi_handle handle = mem_device->device->handle; - int result, num_enabled = 0; + int result, num_enabled = 0, type = MEMORY_BLOCK_DIMM; struct acpi_memory_info *info; int node; + if (!IS_ENABLED(CONFIG_MEMORY_HOTREMOVE)) + type = MEMORY_BLOCK_DIMM_UNREMOVABLE; + node = acpi_get_node(handle); /* * Tell the VM there is more memory here... @@ -228,7 +239,8 @@ static int acpi_memory_enable_device(struct acpi_memory_device *mem_device) if (node < 0) node = memory_add_physaddr_to_nid(info->start_addr); - result = __add_memory(node, info->start_addr, info->length); + result = __add_memory(node, info->start_addr, info->length, + type); /* * If the memory block has been used by the kernel, add_memory() diff --git a/drivers/base/memory.c b/drivers/base/memory.c index c42300082c88..c5fdca7a3009 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -394,6 +394,21 @@ static ssize_t type_show(struct device *dev, struct device_attribute *attr, case MEMORY_BLOCK_BOOT: len = sprintf(buf, "boot\n"); break; + case MEMORY_BLOCK_DIMM: + len = sprintf(buf, "dimm\n"); + break; + case MEMORY_BLOCK_DIMM_UNREMOVABLE: + len = sprintf(buf, "dimm-unremovable\n"); + break; + case MEMORY_BLOCK_BALLOON: + len = sprintf(buf, "balloon\n"); + break; + case MEMORY_BLOCK_BALLOON_MOVABLE: + len = sprintf(buf, "balloon-movable\n"); + break; + case MEMORY_BLOCK_S390X_STANDBY: + len = sprintf(buf, "s390x-standby\n"); + break; default: len = sprintf(buf, "ERROR-UNKNOWN-%ld\n", mem->state); @@ -538,7 +553,8 @@ memory_probe_store(struct device *dev, struct device_attribute *attr, nid = memory_add_physaddr_to_nid(phys_addr); ret = __add_memory(nid, phys_addr, - MIN_MEMORY_BLOCK_SIZE * sections_per_block); + MIN_MEMORY_BLOCK_SIZE * sections_per_block, + MEMORY_BLOCK_DIMM_UNREMOVABLE); if (ret) goto out; diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c index 47719862e57f..f502ea6cd255 100644 --- a/drivers/hv/hv_balloon.c +++ b/drivers/hv/hv_balloon.c @@ -741,7 +741,8 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size, nid = memory_add_physaddr_to_nid(PFN_PHYS(start_pfn)); ret = add_memory(nid, PFN_PHYS((start_pfn)), - (HA_CHUNK << PAGE_SHIFT)); + (HA_CHUNK << PAGE_SHIFT), + MEMORY_BLOCK_BALLOON); if (ret) { pr_err("hot_add memory failed error is %d\n", ret); diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c index 37d42de06079..0ca6f77e7e1d 100644 --- a/drivers/s390/char/sclp_cmd.c +++ b/drivers/s390/char/sclp_cmd.c @@ -406,7 +406,8 @@ static void __init add_memory_merged(u16 rn) if (!size) goto skip_add; for (addr = start; addr < start + size; addr += block_size) - add_memory(numa_pfn_to_nid(PFN_DOWN(addr)), addr, block_size); + add_memory(numa_pfn_to_nid(PFN_DOWN(addr)), addr, block_size, + MEMORY_BLOCK_S390X_STANDBY); skip_add: first_rn = rn; num = 1; diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c index 5d2d7a917b4e..953ff86d609b 100644 --- a/drivers/xen/balloon.c +++ b/drivers/xen/balloon.c @@ -352,7 +352,7 @@ static enum bp_state reserve_additional_memory(void) mutex_unlock(&balloon_mutex); /* add_memory_resource() requires the device_hotplug lock */ lock_device_hotplug(); - rc = add_memory_resource(nid, resource); + rc = add_memory_resource(nid, resource, MEMORY_BLOCK_BALLOON); unlock_device_hotplug(); mutex_lock(&balloon_mutex); diff --git a/include/linux/memory.h b/include/linux/memory.h index 9f39ef41e6d2..a3a1e9764805 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h @@ -59,12 +59,57 @@ int set_memory_block_size_order(unsigned int order); * specific device driver takes care of this memory block. This memory * block type is onlined automatically by the kernel during boot and might * later be managed by a different device driver, in which case the type - * might change. + * might change (e.g. to MEMORY_BLOCK_DIMM). + * + * MEMORY_BLOCK_DIMM: + * This memory block is managed by a device driver taking care of DIMMs + * (or similar). Once all memory blocks belonging to the DIMM have been + * offlined, the DIMM along with the memory blocks can be removed to + * effectively unplug it. This memory block type is usually onlined to the + * MOVABLE zone, to make offlining and unplug possible. Examples include + * ACPI DIMMs and PPC LMBs if the kernel supports removal of memory. + * + * MEMORY_BLOCK_DIMM_UNREMOVABLE: + * This memory block is managed by a device driver taking care of DIMMs + * (or similar). There is either no HW interface to remove the DIMM or + * the kernel does not support offlining/removal of memory, so this memory + * block can never be removed. Examples include ACPI DIMMs and PPC LMBs + * when removal of memory is not supported by the kernel, as well as + * memory probed manually from user space. + * This memory block type is usually onlined to the NORMAL zone. + * + * MEMORY_BLOCK_BALLOON: + * This memory block was added by a balloon device driver (or similar) + * that does not require a specific zone for optimal operation + * (e.g. unplug memory using balloon inflation on this memory block on + * page granularity). Examples include memory added by the XEN and Hyper-V + * balloon driver. + * This memory block type is usually onlined to the NORMAL zone. + * + * MEMORY_BLOCK_BALLOON_MOVABLE: + * This memory block was added by a balloon device driver (or similar) + * that suggests to online this memory block to the MOVABLE zone for + * optimal operation (a.g. unplug using balloon inflation on this memory + * block in bigger chunks than pages). There are no examples yet. + * This memory block type is usually onlined to the MOVABLE zone. + * + * MEMORY_BLOCK_S390X_STANDBY: + * The memory block is special standby memory on s390x. As long as + * offline, no memory will be allocated to the system for this memory + * block. Onlining memory will result in memory getting allocated to the + * system and memory can usually not be offlined again. The memory block + * will never be removed. This memory type is usually not onlined + * automatically but explicitly by the administrator. */ enum { MEMORY_BLOCK_NONE = 0, MEMORY_BLOCK_UNSPECIFIED, MEMORY_BLOCK_BOOT, + MEMORY_BLOCK_DIMM, + MEMORY_BLOCK_DIMM_UNREMOVABLE, + MEMORY_BLOCK_BALLOON, + MEMORY_BLOCK_BALLOON_MOVABLE, + MEMORY_BLOCK_S390X_STANDBY, }; /* These states are exposed to userspace as text strings in sysfs */ diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 667a37aa9a3c..7c8895299e8c 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -326,9 +326,9 @@ static inline void __remove_memory(int nid, u64 start, u64 size) {} extern void __ref free_area_init_core_hotplug(int nid); extern int walk_memory_range(unsigned long start_pfn, unsigned long end_pfn, void *arg, int (*func)(struct memory_block *, void *)); -extern int __add_memory(int nid, u64 start, u64 size); -extern int add_memory(int nid, u64 start, u64 size); -extern int add_memory_resource(int nid, struct resource *resource); +extern int __add_memory(int nid, u64 start, u64 size, int type); +extern int add_memory(int nid, u64 start, u64 size, int type); +extern int add_memory_resource(int nid, struct resource *resource, int type); extern int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, int type); extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 7246faa44488..f109002d6e6e 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1071,7 +1071,7 @@ static int online_memory_block(struct memory_block *mem, void *arg) * * we are OK calling __meminit stuff here - we have CONFIG_MEMORY_HOTPLUG */ -int __ref add_memory_resource(int nid, struct resource *res) +int __ref add_memory_resource(int nid, struct resource *res, int type) { u64 start, size; bool new_node = false; @@ -1080,6 +1080,9 @@ int __ref add_memory_resource(int nid, struct resource *res) start = res->start; size = resource_size(res); + if (type == MEMORY_BLOCK_NONE) + return -EINVAL; + ret = check_hotplug_memory_range(start, size); if (ret) return ret; @@ -1100,7 +1103,7 @@ int __ref add_memory_resource(int nid, struct resource *res) new_node = ret; /* call arch's memory hotadd */ - ret = arch_add_memory(nid, start, size, NULL, MEMORY_TYPE_UNSPECIFIED); + ret = arch_add_memory(nid, start, size, NULL, type); if (ret < 0) goto error; @@ -1141,7 +1144,7 @@ int __ref add_memory_resource(int nid, struct resource *res) } /* requires device_hotplug_lock, see add_memory_resource() */ -int __ref __add_memory(int nid, u64 start, u64 size) +int __ref __add_memory(int nid, u64 start, u64 size, int type) { struct resource *res; int ret; @@ -1150,18 +1153,18 @@ int __ref __add_memory(int nid, u64 start, u64 size) if (IS_ERR(res)) return PTR_ERR(res); - ret = add_memory_resource(nid, res); + ret = add_memory_resource(nid, res, type); if (ret < 0) release_memory_resource(res); return ret; } -int add_memory(int nid, u64 start, u64 size) +int add_memory(int nid, u64 start, u64 size, int type) { int rc; lock_device_hotplug(); - rc = __add_memory(nid, start, size); + rc = __add_memory(nid, start, size, type); unlock_device_hotplug(); return rc; From patchwork Fri Nov 30 17:59:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 10706967 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A28EB13B0 for ; Fri, 30 Nov 2018 18:00:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 908EF2FF6F for ; Fri, 30 Nov 2018 18:00:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8465F2FF86; Fri, 30 Nov 2018 18:00:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 043702FF6F for ; Fri, 30 Nov 2018 18:00:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7BD3A6B597D; Fri, 30 Nov 2018 13:00:41 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 793206B597E; Fri, 30 Nov 2018 13:00:41 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 65A896B597F; Fri, 30 Nov 2018 13:00:41 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by kanga.kvack.org (Postfix) with ESMTP id 3A2A86B597D for ; Fri, 30 Nov 2018 13:00:41 -0500 (EST) Received: by mail-qk1-f200.google.com with SMTP id y83so6001294qka.7 for ; Fri, 30 Nov 2018 10:00:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=+6DSR1HTc51AcSoaV6DRzZ5L0RhPVEyXeNTwSvUeYxE=; b=laW5GpzW1rNG4ZF+IkPi6z3KyFP2uCBRgk1zzu/2TP3dUwbijFJziWOzcga+0vhUOi KUCkziO/nB3zK31d61s5GopRVRJtlzR9xa0JW1QZpUeMcpfzQLQvctnuZkHymhcsRovH m8Ipyhnl7y8awhijFBFjeHEBWtpQ4wjgj2m6X0d6M7m2YTXoi3AqHoOuuQlLa94i6y01 URsShJD3NXLpQ5Uwq+xF6I432O4L4PBc56Z7TM9cKq44TZ1gxpm3P2gD+x5qcPjTyhMD eISKftIOSPf1Fr3kfD7k5NSQg5cvbo/yXqQRi9iqyIGaf6hg9wJRF5nxPRvptg2mWqVj /YIg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com X-Gm-Message-State: AA+aEWY7bdCJRJGyVBqOmimNquSOZqIxA3jv3j0EHwR6id0IiLsYx/kq y+XtIbaDsUGGg0H5Q0btyN+PiuJRBRWacrx+H5w9RRDbpfcpq5gJth2VggtmNGAfnv6CIBqtZXy zdVG+cDCeets+RI365tyA9w4M0qASSW+nclxa/N/nlte31lT/TAK8hN5s+ywYOAAmmQ== X-Received: by 2002:ac8:33b6:: with SMTP id c51mr6416315qtb.190.1543600840943; Fri, 30 Nov 2018 10:00:40 -0800 (PST) X-Google-Smtp-Source: AFSGD/WmdctzHB91MQ3I/R71SGXYjkIZxZTMqBrT/fIlXzrDsy62Se3ib97Ps2DZSh8I+NRnTzt9 X-Received: by 2002:ac8:33b6:: with SMTP id c51mr6416207qtb.190.1543600839324; Fri, 30 Nov 2018 10:00:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543600839; cv=none; d=google.com; s=arc-20160816; b=U496o00L/fR3A/rJ7+bp3dPlgqyCB/wGrBxAERkldsSXNUi5kAIzI99LyB66XhrnT/ ODJReyOSb7kfBd6s4RRLkJSzvxQSIBD/XHhdmiJgimG40ZKkW/Uen5SU09F8mpTFP7Ha upSJ5GO66stRIN6ekpjK6nUY7227thjZxd+qgMrAv86h0sy+Pr1qEaUOdDJLbH1SGVJs bVc9dmWw6kqbrl7Ig4HxOeFbZvT/Q+2N25W+7JjmCF+pCq1QZLVkgpDbydqDuOZR6++0 DqvCRI7ehvjhnUgx0rlP2zIh7flnnPpuRNZ+9i7QMgkrkrs+DCK5fmUuINJVlZhU8a+C FN8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=+6DSR1HTc51AcSoaV6DRzZ5L0RhPVEyXeNTwSvUeYxE=; b=ieIqMI868W8kAT8A9VDp195ji2fkY4pyHGAha8UiNpbScp2TeqFUywj9zOA4kUB5DH CIvye9n6jFL0LGUGpKlixAWWo7/Da81fOjpi8eAmPUsjKyb6TV6OkMGIjgumisM60BBd eDidKwtqmVNwwlQFzSZUiV3NkjOKQm3k6jnOGfs+M6yuJuOs29mN5McGEoPX49G14lzr 6F1pU9iiQPjlOyXNHMetKjR6Voxew8jRy2fVOHPHWOtnmHERgLP83LkMEVecJBzsYkH/ NYoDvQNDNFNPzxDqW0tAOW1rYNr4Pt0mzyoG2wna8Qd4eVy2BuBFtHwGQphR33w10YSt wHfw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id 31si1067894qvp.175.2018.11.30.10.00.39 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Nov 2018 10:00:39 -0800 (PST) Received-SPF: pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; Authentication-Results: mx.google.com; spf=pass (google.com: domain of david@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CFEBD307D982; Fri, 30 Nov 2018 18:00:37 +0000 (UTC) Received: from t460s.redhat.com (ovpn-126-156.rdu2.redhat.com [10.10.126.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id 26FAB6870A; Fri, 30 Nov 2018 18:00:30 +0000 (UTC) From: David Hildenbrand To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-acpi@vger.kernel.org, devel@linuxdriverproject.org, xen-devel@lists.xenproject.org, x86@kernel.org, David Hildenbrand , Greg Kroah-Hartman , "Rafael J. Wysocki" , Andrew Morton , Ingo Molnar , Pavel Tatashin , Stephen Rothwell , Andrew Banman , "mike.travis@hpe.com" , Oscar Salvador , Dave Hansen , Michal Hocko , =?utf-8?q?Michal_Such=C3=A1nek?= , Vitaly Kuznetsov , Dan Williams , Pavel Tatashin Subject: [PATCH RFCv2 4/4] mm/memory_hotplug: Drop MEMORY_TYPE_UNSPECIFIED Date: Fri, 30 Nov 2018 18:59:22 +0100 Message-Id: <20181130175922.10425-5-david@redhat.com> In-Reply-To: <20181130175922.10425-1-david@redhat.com> References: <20181130175922.10425-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Fri, 30 Nov 2018 18:00:38 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP We now have proper types for all users, we can drop this one. Cc: Greg Kroah-Hartman Cc: "Rafael J. Wysocki" Cc: Andrew Morton Cc: Ingo Molnar Cc: Pavel Tatashin Cc: Stephen Rothwell Cc: Andrew Banman Cc: "mike.travis@hpe.com" Cc: Oscar Salvador Cc: Dave Hansen Cc: Michal Hocko Cc: Michal Suchánek Cc: Vitaly Kuznetsov Cc: Dan Williams Cc: Pavel Tatashin Signed-off-by: David Hildenbrand --- drivers/base/memory.c | 3 --- include/linux/memory.h | 5 ----- 2 files changed, 8 deletions(-) diff --git a/drivers/base/memory.c b/drivers/base/memory.c index c5fdca7a3009..a6e524f0ea38 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -388,9 +388,6 @@ static ssize_t type_show(struct device *dev, struct device_attribute *attr, ssize_t len = 0; switch (mem->type) { - case MEMORY_BLOCK_UNSPECIFIED: - len = sprintf(buf, "unspecified\n"); - break; case MEMORY_BLOCK_BOOT: len = sprintf(buf, "boot\n"); break; diff --git a/include/linux/memory.h b/include/linux/memory.h index a3a1e9764805..11679622f743 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h @@ -50,10 +50,6 @@ int set_memory_block_size_order(unsigned int order); * No memory block is to be created (e.g. device memory). Not exposed to * user space. * - * MEMORY_BLOCK_UNSPECIFIED: - * The type of memory block was not further specified when adding the - * memory block. - * * MEMORY_BLOCK_BOOT: * This memory block was added during boot by the basic system. No * specific device driver takes care of this memory block. This memory @@ -103,7 +99,6 @@ int set_memory_block_size_order(unsigned int order); */ enum { MEMORY_BLOCK_NONE = 0, - MEMORY_BLOCK_UNSPECIFIED, MEMORY_BLOCK_BOOT, MEMORY_BLOCK_DIMM, MEMORY_BLOCK_DIMM_UNREMOVABLE,