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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 090EBC00140 for ; Tue, 2 Aug 2022 18:02:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 461978E0001; Tue, 2 Aug 2022 14:02:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 410B26B0072; Tue, 2 Aug 2022 14:02:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 289CB8E0001; Tue, 2 Aug 2022 14:02:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 19DC06B0071 for ; Tue, 2 Aug 2022 14:02:51 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id DA626140CF8 for ; Tue, 2 Aug 2022 18:02:50 +0000 (UTC) X-FDA: 79755423300.02.ADA4916 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2079.outbound.protection.outlook.com [40.107.243.79]) by imf06.hostedemail.com (Postfix) with ESMTP id 26BB3180106 for ; Tue, 2 Aug 2022 18:02:48 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AVS2617ii1SpS3hfFRsPPqH+CiACYUPwa+V6xKu0SLp5Tms5C+yx1dsRNjPSA1TERPZV9RIRsXcPjgNmBNUHTTsiw5kXMq53PD5b6samIaSabju2QThyPe2zFJC6aW68PY3bYdUXAMPmG2IR2zfkj1g2eHo/RrCBtA0YQFTi6Gw04qo69Ip1IFwzA0ZujicUs2wggW2ZwDkMLY19d5R1Trx4+G2KkxGejF+BUT6QNRLbaYAnWLyhfKtBTjU4qh1eOnVk74U+mOBeCG5qCJd2RZ3KaMSuDGNt0Q0augODR2g1FlenyXaX9fL1EDFgIl4Eik9aqUCgXeTbtB8pBwpDaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pgYxqryFQU0TQAg1GecGJ58Roa5qDgiBQIVnq8IxhaY=; b=TSdNS03SP4GtC7ooqP4+ozBVHcLs5652kCTGP+eyeP/s8tx2pc70ovbsq8z1YKiTmtGiSAN4SCaAiH41uLms1xP/3gCGwaa6MrIRMLbxpsT/3lQ2hC+te+TwR0JNIJHBUe/awva1alupE25G3knLWZwYLhfpMKrMa+23m6LOL54Skmv0l9KVJ62j5Bka2LpMG50Wirmv+zoeQiCICVJJx+cqVsj6gKUjvbjnw2XTdNRydjZUJVG4etoWVF720ufmIuu2bez43kBdGEtBneY6P6SnO7pDNac310yXXV9cNXmg2TJez4027GFA+8b9YLcXvqc82lL6OdjC+RJTHbF7wA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=memverge.com; dmarc=pass action=none header.from=memverge.com; dkim=pass header.d=memverge.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=memverge.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pgYxqryFQU0TQAg1GecGJ58Roa5qDgiBQIVnq8IxhaY=; b=l4ejwIb7WVyyOlVZvc3m1/7Gq5zqT6h4uRQyirxrcRmAv2GueWvos7NoBbDzSv4/9HBYbRnaGhvXuNQJPIIJyvtt6cv6hUPfOYz1UIX8L0NKlhr2kNORN7W6uljKLfbvEZW62t7N42CFDA/+vxdtKiFCSDD+OlAMKGVFSQK8+LA= Received: from PH0PR17MB4922.namprd17.prod.outlook.com (2603:10b6:510:d7::22) by BN7PR17MB2081.namprd17.prod.outlook.com (2603:10b6:406:c8::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.16; Tue, 2 Aug 2022 18:02:37 +0000 Received: from PH0PR17MB4922.namprd17.prod.outlook.com ([fe80::5ca7:2b89:7f14:b6fb]) by PH0PR17MB4922.namprd17.prod.outlook.com ([fe80::5ca7:2b89:7f14:b6fb%8]) with mapi id 15.20.5482.016; Tue, 2 Aug 2022 18:02:34 +0000 Date: Tue, 2 Aug 2022 23:32:22 +0530 From: Srinivas Aji To: linux-nvdimm , Linux MM Cc: Dan Williams , David Hildenbrand , Vivek Goyal , David Woodhouse , "Gowans, James" , Yue Li , Beau Beauchamp Subject: [RFC PATCH 1/4] mm/memory_hotplug: Add MHP_ALLOCATE flag which treats hotplugged memory as allocated Message-ID: References: Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: MA0PR01CA0015.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:80::7) To PH0PR17MB4922.namprd17.prod.outlook.com (2603:10b6:510:d7::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ff149fa0-5f52-4e61-64e1-08da74b12ce9 X-MS-TrafficTypeDiagnostic: BN7PR17MB2081:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: f6odG9XU7a7fRfBqW735lsbz6kLWL47dqCGz9/24rNtyiSlVWvDwubfNufo8/C/fdRYzHfy++y/gpI4ZPcFdPurwSIaPtbmVMj2wYAaBwytCiWxwy56hDc+QGZxUdiFXXria6vrpmrH+1/HxBGVp1TQSLevGL+AsknoIHcgdZ2w9lFtm0HQ8A7RoRm0OHIfeBs+7KvUHgPtgjmRsR8hoXbbw58rHO5Zf/9DA+EYycncuzFYo8i9Jb2aOOGkqKwaKgqYgOPE8kmHCwg7t9wB41pYu+IN9tp6j4hnt1cGkPZk4Pt3JlaHlsDQzU99vP+cBPY9nIibJ2XP1AqyJyMp9OF6us5ZktEv5OQ8RZDBmQs8MY5T0gxMThJ/jDTK+xkUqjE3p088t/ezxEh0gtH6WYF6YzC5L7Poh17MbPRCjHqB9BM0y9gJaCviYDnO9LrOCL5JjeQCZY5J39YaDUDd31/E4csL1bBdkVvSdU0eCvBY0WaYyqwXHg3Gyp1Uutggh9DDUUyjlcOm+r/0wx5Hgnfczp0amuypN2ESX0uKFe591OYwCXx9MfUmpay8Ue9/wwopFiZiI8Xvifs16kNygoNvDRXsp+iqLD7W1S2zf7ZBy8qwASbGvJEbwra8wviJ8OchctL4eeYMgDPS7AiD5O/da5CvRAA5HEm4xAruu7gnW809H97Dr6GjPsy6S9w8cp3p8hqFqLohZBi0oIv98tixIDD8B/lAXeYx2xNb6JwSJQ9N4/XmDNfWXbJzByLzazPAPmTt/lFR0g8j8R2ECGBTYZrQxjUALjuy+vg07JvQ= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR17MB4922.namprd17.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(396003)(376002)(366004)(136003)(346002)(39830400003)(110136005)(36756003)(316002)(5660300002)(8676002)(66556008)(66476007)(54906003)(66946007)(4326008)(38100700002)(107886003)(38350700002)(6486002)(2616005)(86362001)(478600001)(6512007)(26005)(186003)(6666004)(41300700001)(83380400001)(8936002)(52116002)(44832011)(2906002)(6506007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?r4TgJ96OACp2opuJPzrMAMVWW1CVZHSKjkEm/InS4bfshqJv+7u+ojjoRZU/?= =?us-ascii?Q?1qEcjfzAr/9x4kJFP8lr9iMJG99rkqAUjcBoFD2ZNGqvmJlOTf8gsmpY+Crn?= =?us-ascii?Q?U1j0b1B0B0nSRZ9mwGniAWL/tdmW+oFZsvtTBVnJyhowW7/OcoklHmhyJV3w?= =?us-ascii?Q?FpkHAf11IfI54GwIrrGqNUwdPVuKf0EyeMlCLgHPBS4rrvOEAGrKxc/wjMwX?= =?us-ascii?Q?UUlYzVEnrxZjmIq0hDiXb3BltqDaZGwgh04/XYdNOQf7jn52BqiIMsecX5w4?= =?us-ascii?Q?QCg6Kig11qrBiX6hHDWLvG2unSrN1JBm4adsnT/yHscxI6zqVwCA+zR+htPc?= =?us-ascii?Q?c8X0LlibEowgNUOc0KxO6iC0jSiih6ctfJxGzrlMbfTLpWSajCdKm585aLG5?= =?us-ascii?Q?jg+TTiK3ATMNVFfNOdgggSKqyRxwqkZg8+LtaFewiJgrvt6/pN6u8qPBEVKO?= =?us-ascii?Q?aSQZFA6qTLnajBu+QIapFcHeh7MBBmqIwdYtx4dZs25YvUwEafd0nhC5ySVn?= =?us-ascii?Q?CaCR5KbGIKm01VWgPqw5B77Jjw6VVmQom0LPYkSQLTSj8y028mTj8VSEjq4q?= =?us-ascii?Q?EYDI95GA76MoF1XsqKQjn+EBkhttf5qIk8BR6PJcGMUyz8YWLlKulRgP3uBO?= =?us-ascii?Q?4y/5J6E7dIlre67HLq9sVboTz95KSYqyM3tMq9o5aiD2l+eoSYm/nOSk06gO?= =?us-ascii?Q?2hs3WrNq2mXOwhmbnTOKzCuMOaKgH8wZ2XRut3tKtuS9RqBkSSjUsFQyfsPp?= =?us-ascii?Q?fKaxryojEF28hmMuAICioTc/4if6aBWuwosf7c4RNAk8+9YH/uLw5AxjuOPF?= =?us-ascii?Q?BrMIIrfHNqXDwdCcmkqBySspLTjFYxAQOh4zBCBmFHeekNygASVvQfN4fwAh?= =?us-ascii?Q?mfEB9vkbbuEHrwHZM90YFxnFcQBOZqlokIAfdo13yGdb18xxELAh30dRvKIe?= =?us-ascii?Q?tpAlcgAzJvCm3a5kl7wpoW2XH5maHY4wKmQcXETXN4CviXZa9rNc2H9usfZ9?= =?us-ascii?Q?1A3dFJOFwiHj7ZjXdD+DrbpV6xetB9SUuT8/EDnCjmGGCAJxSEhU+cLsGxrN?= =?us-ascii?Q?du/0le38jEM/tcvxI4PrgKRlaCtG3DcDa0K5hz7esaduGIYGdOn69qE4EKfF?= =?us-ascii?Q?4PErwtfpz0xJr6ZIPaLcR68wCpB5RhOmE8qs/05ZCXlJEgNTTgcQMHEWvW2c?= =?us-ascii?Q?zl4PrnxvRa1aBEbHltY3Urn6m8ls+gX+XH9pDrEsklzIrrHuMNF8yWZfsqBS?= =?us-ascii?Q?nFKg1gqWXonFUe6xqPvQbISC/Jccymez47zOIqbdbVbzfY8JNS0A4baKh6iG?= =?us-ascii?Q?qqqdYqWgH6ZuCpg1ATOEw/zvrSrw72d/8YElfJdEOHdNnSQgZc2g6KEAiCxy?= =?us-ascii?Q?AMC8iArd0arr301l2ud0IeXhwTeI9W5jSrfTsgzqmq3jPQjATTbzFzfbqxWB?= =?us-ascii?Q?GbDkKukpRqzERoxwO+rqm6dXZdcADVU3GRxNqk7N1uEuNYWbKdQsnFqicMB5?= =?us-ascii?Q?E7m4CQm00x3ZYPfkON8CMSVqc082cwvezE7UP5bsxbQ4oHMSFoW6xmiiMoal?= =?us-ascii?Q?NKiwxB5pIbNwjSJlAWaLGn4gKZkWmvqV1gvWv1UEZsmUCQ0N702dw1tKkZfr?= =?us-ascii?Q?yA=3D=3D?= X-OriginatorOrg: memverge.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff149fa0-5f52-4e61-64e1-08da74b12ce9 X-MS-Exchange-CrossTenant-AuthSource: PH0PR17MB4922.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2022 18:02:34.0996 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5c90cb59-37e7-4c81-9c07-00473d5fb682 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LJbw0mQBKULgE9XTuifa4HHD8sczfFBAwBzSdW/Q3TzohNZoKWUpIVrAiZFp2gcgg7Hp4/N2rsFqVL8y2v7M276aPw+bhoRA8MdrO0HWgSU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR17MB2081 ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1659463369; a=rsa-sha256; cv=pass; b=0OwbfQOnLBCCcExCiyc9yCCFVCHCj5Ii3+R+qzCeqBD6YoyN3w4/W2B5jJpgQ7kzbnRX9G Z1TlJ88lVwwxMI2al9UHWied7TN+QFCrWVsPX+F6RoCDm5PW3p1PLYkj8yfauGNC35G2vX +Px/pVa1v4AIJg4Mh//G1fabb3a5LwM= ARC-Authentication-Results: i=2; imf06.hostedemail.com; dkim=pass header.d=memverge.com header.s=selector2 header.b=l4ejwIb7; spf=pass (imf06.hostedemail.com: domain of srinivas.aji@memverge.com designates 40.107.243.79 as permitted sender) smtp.mailfrom=srinivas.aji@memverge.com; dmarc=pass (policy=none) header.from=memverge.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1659463369; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=pgYxqryFQU0TQAg1GecGJ58Roa5qDgiBQIVnq8IxhaY=; b=Xi9PHwJ8dnUFqLonWwlLerr8ax6Ee6IIoE8rrcxGpVGuOvtiyoWvpb6hUQ4hLyzdJxDSud aZIvigeW8BRC0R5skzsKO8T/LREYY4FUUq5F208zx2BrliAPtyWE6z58j1ardNZcXlczyW bdZGHKUQPq5p1olii78ea8ulmTYpKTY= X-Rspamd-Server: rspam04 X-Stat-Signature: sk1ixiiqzhfzem7dofsh8azkomyswc8a Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=memverge.com header.s=selector2 header.b=l4ejwIb7; spf=pass (imf06.hostedemail.com: domain of srinivas.aji@memverge.com designates 40.107.243.79 as permitted sender) smtp.mailfrom=srinivas.aji@memverge.com; dmarc=pass (policy=none) header.from=memverge.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") X-Rspamd-Queue-Id: 26BB3180106 X-Rspam-User: X-HE-Tag: 1659463368-356592 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: When memory is added by hotplug, it is treated as free by default. This patch adds a flag MHP_ALLOCATE, which can be used with the add_memory_...() memory hotplug functions to treat the new memory as allocated. This allows the memory contents to be inspected before being freed for system use. This feature is useful when the hotplugged memory is persistent, since it can be scanned for any persistent data which should be retained, rather than freed up for system use and overwritten. Signed-off-by: Srinivas Aji --- include/linux/memory_hotplug.h | 4 ++++ mm/internal.h | 3 ++- mm/memory_hotplug.c | 15 +++++++++++++-- mm/page_alloc.c | 19 ++++++++++++------- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 20d7edf62a6a..15c9b1f2a5be 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -113,6 +113,10 @@ typedef int __bitwise mhp_t; * implies the node id (nid). */ #define MHP_NID_IS_MGID ((__force mhp_t)BIT(2)) +/* + * Online this memory as when added, and also treat these pages as allocated. + */ +#define MHP_ALLOCATE ((__force mhp_t)BIT(3)) /* * Extended parameters for memory hotplug: diff --git a/mm/internal.h b/mm/internal.h index c0f8fbe0445b..ee37749e341e 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -356,7 +356,8 @@ extern void __putback_isolated_page(struct page *page, unsigned int order, int mt); extern void memblock_free_pages(struct page *page, unsigned long pfn, unsigned int order); -extern void __free_pages_core(struct page *page, unsigned int order); +extern void __free_pages_core(struct page *page, unsigned int order, + int allocate); extern void prep_compound_page(struct page *page, unsigned int order); extern void post_alloc_hook(struct page *page, unsigned int order, gfp_t gfp_flags); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 1213d0c67a53..eeef37d37bfa 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -177,6 +177,11 @@ static int __init setup_memhp_default_state(char *str) } __setup("memhp_default_state=", setup_memhp_default_state); +/* + * If this is set, then this memory is allocated when onlining. + */ +static bool mhp_allocate; + void mem_hotplug_begin(void) { cpus_read_lock(); @@ -595,7 +600,7 @@ void generic_online_page(struct page *page, unsigned int order) * case in page freeing fast path. */ debug_pagealloc_map_pages(page, 1 << order); - __free_pages_core(page, order); + __free_pages_core(page, order, mhp_allocate); totalram_pages_add(1UL << order); } EXPORT_SYMBOL_GPL(generic_online_page); @@ -1417,10 +1422,16 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) if (mhp_flags & MHP_MERGE_RESOURCE) merge_system_ram_resource(res); + if (mhp_flags & MHP_ALLOCATE) + mhp_allocate = true; + /* online pages if requested */ - if (mhp_default_online_type != MMOP_OFFLINE) + if (mhp_default_online_type != MMOP_OFFLINE || + (mhp_flags & MHP_ALLOCATE)) walk_memory_blocks(start, size, NULL, online_memory_block); + mhp_allocate = false; + return ret; error: if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b0bcab50f0a3..72b3955145ef 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1643,12 +1643,12 @@ static void __free_pages_ok(struct page *page, unsigned int order, __count_vm_events(PGFREE, 1 << order); } -void __free_pages_core(struct page *page, unsigned int order) +void __free_pages_core(struct page *page, unsigned int order, int allocate) { unsigned int nr_pages = 1 << order; struct page *p = page; unsigned int loop; - + int count = allocate ? 1 : 0; /* * When initializing the memmap, __init_single_page() sets the refcount * of all pages to 1 ("allocated"/"not free"). We have to set the @@ -1658,13 +1658,18 @@ void __free_pages_core(struct page *page, unsigned int order) for (loop = 0; loop < (nr_pages - 1); loop++, p++) { prefetchw(p + 1); __ClearPageReserved(p); - set_page_count(p, 0); + set_page_count(p, count); } __ClearPageReserved(p); - set_page_count(p, 0); + set_page_count(p, count); atomic_long_add(nr_pages, &page_zone(page)->managed_pages); + /* + * Don't free the pages if we want them to appear allocated. + */ + if (allocate) + return; /* * Bypass PCP and place fresh pages right to the tail, primarily * relevant for memory onlining. @@ -1729,7 +1734,7 @@ void __init memblock_free_pages(struct page *page, unsigned long pfn, { if (early_page_uninitialised(pfn)) return; - __free_pages_core(page, order); + __free_pages_core(page, order, false); } /* @@ -1818,14 +1823,14 @@ static void __init deferred_free_range(unsigned long pfn, if (nr_pages == pageblock_nr_pages && (pfn & (pageblock_nr_pages - 1)) == 0) { set_pageblock_migratetype(page, MIGRATE_MOVABLE); - __free_pages_core(page, pageblock_order); + __free_pages_core(page, pageblock_order, false); return; } for (i = 0; i < nr_pages; i++, page++, pfn++) { if ((pfn & (pageblock_nr_pages - 1)) == 0) set_pageblock_migratetype(page, MIGRATE_MOVABLE); - __free_pages_core(page, 0); + __free_pages_core(page, 0, false); } } -- 2.30.2