Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp539059pxa; Fri, 31 Jul 2020 20:44:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxlcomVjwGWJKObPbNAitQatt2c7VeclWCCW3Spo+AnLWuUJTsvvLv3sV7fc+ZYMMGOG1uH X-Received: by 2002:a17:906:a253:: with SMTP id bi19mr6860858ejb.338.1596253498193; Fri, 31 Jul 2020 20:44:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596253498; cv=none; d=google.com; s=arc-20160816; b=SIa9Li6lLU0LBErM4gyIMNuuMD312N/6Qnqob1jtLs0K0xvCPLWLhhQa9RSUsOGZXd q5WUzBvfvuw7/6q9NmK0Xq3FFXSpT19jqujpddkLz3L9cfUaePBrqBOBRCrO/naMXEHf 90nuCYAFwaCbmPiYc/gzayOX1eFjYwYaKZpYjZ6b0iRTdm64J+Qg9EQgB261fEetYl4q kAopYxmu6Z0jpAqYwgtVPvaQptFmrv1WdoA2QJ5It+C3zLPmtFnYOitDZ1qO1Vhrv2QZ ed5GLFNstmyosb2x0d9rV0L0IHfISzlAWzv6PjQ995dXR9eC4/1MDUUq7gahKR39xC3a oWPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject:ironport-sdr:ironport-sdr; bh=OSpkvRx1X4dPSaUkrTEea98IM0yQ4TzqC6nlhbm73/I=; b=JROuuJvwb9OQM1EFHVxXmtsolR25vKnseQmO4D1p2HEY9Lz4Bc4PRnLv3S032r28Yi TItl2JSTTS3k4MxI8OBWK5x+CTyvbM3mNwwjsMVH+UCPFkR43ngS1IJXp3F04ZiLK/hm FHJIIjubivbz/XCiFDfBJzd36WThuT1hSKNEX/meWrWOU5Ckdd3DbaIAtFIFxnzlKzyh UA7TFpMOp6Edlk7nY7rvKxfXeTeTrXd69gTS8MMroJpV8O93nAgBtO6whJyv0kZi0soK CCGrVSzWWrIyzIsSm1Jg+UQ/OTuEjB7+MZroV2OIw0/lv65sr7hxS1/VVwHX1hru5vUr ILxQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f9si6426226edw.239.2020.07.31.20.44.36; Fri, 31 Jul 2020 20:44:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728674AbgHADl7 (ORCPT + 99 others); Fri, 31 Jul 2020 23:41:59 -0400 Received: from mga18.intel.com ([134.134.136.126]:9389 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727978AbgHADl6 (ORCPT ); Fri, 31 Jul 2020 23:41:58 -0400 IronPort-SDR: fw+doFts8qEt0qAcyfQuN2yg9moXAYtEV2oOxJnN5wU+PPoQ8eiDyXH5ch0MfWhLC9vCl6Bx2B 81S1gVEiHycA== X-IronPort-AV: E=McAfee;i="6000,8403,9699"; a="139464194" X-IronPort-AV: E=Sophos;i="5.75,420,1589266800"; d="scan'208";a="139464194" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Jul 2020 20:41:58 -0700 IronPort-SDR: IP/TkpGeFfA97QpWiU3jPgwPL0sH2KoqCPvSCgl1N8zc6ekPOyiKrwEY8326/lPHLg5CgAS0Gq ZZZbGLTTFTbA== X-IronPort-AV: E=Sophos;i="5.75,420,1589266800"; d="scan'208";a="395519913" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.16]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Jul 2020 20:41:57 -0700 Subject: [PATCH v3 07/23] ACPI: HMAT: Attach a device for each soft-reserved range From: Dan Williams To: akpm@linux-foundation.org Cc: Jonathan Cameron , Brice Goglin , Ard Biesheuvel , "Rafael J. Wysocki" , Jeff Moyer , Catalin Marinas , Will Deacon , Joao Martins , peterz@infradead.org, vishal.l.verma@intel.com, dave.hansen@linux.intel.com, vishal.l.verma@intel.com, linux-mm@kvack.org, linux-nvdimm@lists.01.org, joao.m.martins@oracle.com, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, dri-devel@lists.freedesktop.org Date: Fri, 31 Jul 2020 20:25:39 -0700 Message-ID: <159625233946.3040297.14289523802580847523.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <159625229779.3040297.11363509688097221416.stgit@dwillia2-desk3.amr.corp.intel.com> References: <159625229779.3040297.11363509688097221416.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.18-3-g996c MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The hmem enabling in commit 'cf8741ac57ed ("ACPI: NUMA: HMAT: Register "soft reserved" memory as an "hmem" device")' only registered ranges to the hmem driver for each soft-reservation that also appeared in the HMAT. While this is meant to encourage platform firmware to "do the right thing" and publish an HMAT, the corollary is that platforms that fail to publish an accurate HMAT will strand memory from Linux usage. Additionally, the "efi_fake_mem" kernel command line option enabling will strand memory by default without an HMAT. Arrange for "soft reserved" memory that goes unclaimed by HMAT entries to be published as raw resource ranges for the hmem driver to consume. Include a module parameter to disable either this fallback behavior, or the hmat enabling from creating hmem devices. The module parameter requires the hmem device enabling to have unique name in the module namespace: "device_hmem". The driver depends on the architecture providing phys_to_target_node() which is only x86 via numa_meminfo() and arm64 via a generic memblock implementation. Cc: Jonathan Cameron Cc: Brice Goglin Cc: Ard Biesheuvel Cc: "Rafael J. Wysocki" Cc: Jeff Moyer Cc: Catalin Marinas Cc: Will Deacon Reviewed-by: Joao Martins Signed-off-by: Dan Williams --- drivers/dax/hmem/Makefile | 3 ++- drivers/dax/hmem/device.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/drivers/dax/hmem/Makefile b/drivers/dax/hmem/Makefile index a9d353d0c9ed..57377b4c3d47 100644 --- a/drivers/dax/hmem/Makefile +++ b/drivers/dax/hmem/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_DEV_DAX_HMEM) += dax_hmem.o -obj-$(CONFIG_DEV_DAX_HMEM_DEVICES) += device.o +obj-$(CONFIG_DEV_DAX_HMEM_DEVICES) += device_hmem.o +device_hmem-y := device.o dax_hmem-y := hmem.o diff --git a/drivers/dax/hmem/device.c b/drivers/dax/hmem/device.c index b9dd6b27745c..cb6401c9e9a4 100644 --- a/drivers/dax/hmem/device.c +++ b/drivers/dax/hmem/device.c @@ -5,6 +5,9 @@ #include #include +static bool nohmem; +module_param_named(disable, nohmem, bool, 0444); + void hmem_register_device(int target_nid, struct resource *r) { /* define a clean / non-busy resource for the platform device */ @@ -17,6 +20,9 @@ void hmem_register_device(int target_nid, struct resource *r) struct memregion_info info; int rc, id; + if (nohmem) + return; + rc = region_intersects(res.start, resource_size(&res), IORESOURCE_MEM, IORES_DESC_SOFT_RESERVED); if (rc != REGION_INTERSECTS) @@ -63,3 +69,32 @@ void hmem_register_device(int target_nid, struct resource *r) out_pdev: memregion_free(id); } + +static __init int hmem_register_one(struct resource *res, void *data) +{ + /* + * If the resource is not a top-level resource it was already + * assigned to a device by the HMAT parsing. + */ + if (res->parent != &iomem_resource) { + pr_info("HMEM: skip %pr, already claimed\n", res); + return 0; + } + + hmem_register_device(phys_to_target_node(res->start), res); + + return 0; +} + +static __init int hmem_init(void) +{ + walk_iomem_res_desc(IORES_DESC_SOFT_RESERVED, + IORESOURCE_MEM, 0, -1, NULL, hmem_register_one); + return 0; +} + +/* + * As this is a fallback for address ranges unclaimed by the ACPI HMAT + * parsing it must be at an initcall level greater than hmat_init(). + */ +late_initcall(hmem_init);