Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp7110978imu; Tue, 22 Jan 2019 00:10:04 -0800 (PST) X-Google-Smtp-Source: ALg8bN5qOu57TUKxJV2847cxrC10+4N+mwxHgoMa76crzhRCFKs2cq9ZU3Usb8fpTsYNDzCCS4LI X-Received: by 2002:a63:7d06:: with SMTP id y6mr30749292pgc.171.1548144604321; Tue, 22 Jan 2019 00:10:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548144604; cv=none; d=google.com; s=arc-20160816; b=KesmY+f/I8CiAfCWgJr1reAV0c+flFZUk8s35N9xHgW8mje9WHCfbcXd3WLKWJuIRk gflopk9aolhwRtReR8nicwnhprCL4e7xWg93f/3P8oeGpVGDkmT2DocAhnY05L6HSFXS dfW5ninm6p9qqB7Rl89Ai3s0KB7b05RdBTMKWeeIruMksPJbQlBckdR5cMUOoB5EjDVI FHhfq4RC7dsg6YQg6Kxdodda9XQHXtLY1Wh3gSmGVpwZag+cFKVipdq2GLmO54mzWZv6 Xas/A3VBxWgnrrr+33VMXqtb0SHELIcFGtswptYLcuIHfM8sH8zdlVMF3GiRgf5p4x6D fHxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=MO7zVBScx4eOfNmGeNgwSEUXAjOZFizyaRYLdrd5bU4=; b=GNv4PH5VK3Mn0DASzLzcd5ktQwbuehFkP2c0Xrh8QA8yaZty6aIx3pbZ1phT5l98/e qr632mDWlOmGRXrEbUO3rvouj2zm/38V4bojuAwmg3W9uWxKkjRDn+sTyLr+vHEQdzDd 6pZ0twnmnRVWJmRSNxbtLz8MZ77+V0kk+Cavt/a3Jnwb3yGdB2/wbdIgGCjczWfZzEeG nye3iKD3QiYTIcvT/s9iVvC9QjYE4VhbzMvvLLbHXCjvMwT6Rkq+q3bPQhLPeb2ZkkMF 6mx4nAUOw42vnw1w7jZDOsrNSbYVUJqK67oe8ALcHNQJQSe+XKqgW+cwvGCxi+LbudG7 IVzA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f23si13721464pgv.431.2019.01.22.00.09.48; Tue, 22 Jan 2019 00:10:04 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727546AbfAVIGk (ORCPT + 99 others); Tue, 22 Jan 2019 03:06:40 -0500 Received: from mx2.suse.de ([195.135.220.15]:48832 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727219AbfAVIGk (ORCPT ); Tue, 22 Jan 2019 03:06:40 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 2B2C8AC3A; Tue, 22 Jan 2019 08:06:39 +0000 (UTC) From: Juergen Gross To: linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, x86@kernel.org, linux-mm@kvack.org Cc: boris.ostrovsky@oracle.com, sstabellini@kernel.org, hpa@zytor.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, Juergen Gross Subject: [PATCH 1/2] x86: respect memory size limiting via mem= parameter Date: Tue, 22 Jan 2019 09:06:27 +0100 Message-Id: <20190122080628.7238-2-jgross@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20190122080628.7238-1-jgross@suse.com> References: <20190122080628.7238-1-jgross@suse.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When limiting memory size via kernel parameter "mem=" this should be respected even in case of memory made accessible via a PCI card. Today this kind of memory won't be made usable in initial memory setup as the memory won't be visible in E820 map, but it might be added when adding PCI devices due to corresponding ACPI table entries. Not respecting "mem=" can be corrected by adding a global max_mem_size variable set by parse_memopt() which will result in rejecting adding memory areas resulting in a memory size above the allowed limit. Signed-off-by: Juergen Gross --- arch/x86/kernel/e820.c | 5 +++++ include/linux/memory_hotplug.h | 2 ++ mm/memory_hotplug.c | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index 50895c2f937d..e67513e2cbbb 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -881,6 +882,10 @@ static int __init parse_memopt(char *p) e820__range_remove(mem_size, ULLONG_MAX - mem_size, E820_TYPE_RAM, 1); +#ifdef CONFIG_MEMORY_HOTPLUG + max_mem_size = mem_size; +#endif + return 0; } early_param("mem", parse_memopt); diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 07da5c6c5ba0..fb6bd0022d41 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -98,6 +98,8 @@ extern void __online_page_free(struct page *page); extern int try_online_node(int nid); +extern u64 max_mem_size; + extern bool memhp_auto_online; /* If movable_node boot option specified */ extern bool movable_node_enabled; diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index b9a667d36c55..7fc2a87110a3 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -96,10 +96,16 @@ void mem_hotplug_done(void) cpus_read_unlock(); } +u64 max_mem_size = -1; + /* add this memory to iomem resource */ static struct resource *register_memory_resource(u64 start, u64 size) { struct resource *res, *conflict; + + if (start + size > max_mem_size) + return ERR_PTR(-E2BIG); + res = kzalloc(sizeof(struct resource), GFP_KERNEL); if (!res) return ERR_PTR(-ENOMEM); -- 2.16.4