All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: <linux-cxl@vger.kernel.org>, <dave.hansen@linux.intel.com>,
	<linux-mm@kvack.org>, <linux-acpi@vger.kernel.org>
Subject: Re: [PATCH 15/18] dax/hmem: Convey the dax range via memregion_info()
Date: Wed, 8 Feb 2023 17:35:31 +0000	[thread overview]
Message-ID: <20230208173531.00000687@Huawei.com> (raw)
In-Reply-To: <167564543303.847146.11045895213318648441.stgit@dwillia2-xfh.jf.intel.com>

On Sun, 05 Feb 2023 17:03:53 -0800
Dan Williams <dan.j.williams@intel.com> wrote:

> In preparation for hmem platform devices to be unregistered, stop using
> platform_device_add_resources() to convey the address range. The
> platform_device_add_resources() API causes an existing "Soft Reserved"
> iomem resource to be re-parented under an inserted platform device
> resource. When that platform device is deleted it removes the platform
> device resource and all children.
> 
> Instead, it is sufficient to convey just the address range and let
> request_mem_region() insert resources to indicate the devices active in
> the range. This allows the "Soft Reserved" resource to be re-enumerated
> upon the next probe event.
> 
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Seems sensible to me.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/dax/hmem/device.c |   37 ++++++++++++++-----------------------
>  drivers/dax/hmem/hmem.c   |   14 +++-----------
>  include/linux/memregion.h |    2 ++
>  3 files changed, 19 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/dax/hmem/device.c b/drivers/dax/hmem/device.c
> index 20749c7fab81..b1b339bccfe5 100644
> --- a/drivers/dax/hmem/device.c
> +++ b/drivers/dax/hmem/device.c
> @@ -15,15 +15,8 @@ static struct resource hmem_active = {
>  	.flags = IORESOURCE_MEM,
>  };
>  
> -void hmem_register_device(int target_nid, struct resource *r)
> +void hmem_register_device(int target_nid, struct resource *res)
>  {
> -	/* define a clean / non-busy resource for the platform device */
> -	struct resource res = {
> -		.start = r->start,
> -		.end = r->end,
> -		.flags = IORESOURCE_MEM,
> -		.desc = IORES_DESC_SOFT_RESERVED,
> -	};
>  	struct platform_device *pdev;
>  	struct memregion_info info;
>  	int rc, id;
> @@ -31,55 +24,53 @@ void hmem_register_device(int target_nid, struct resource *r)
>  	if (nohmem)
>  		return;
>  
> -	rc = region_intersects(res.start, resource_size(&res), IORESOURCE_MEM,
> -			IORES_DESC_SOFT_RESERVED);
> +	rc = region_intersects(res->start, resource_size(res), IORESOURCE_MEM,
> +			       IORES_DESC_SOFT_RESERVED);
>  	if (rc != REGION_INTERSECTS)
>  		return;
>  
>  	id = memregion_alloc(GFP_KERNEL);
>  	if (id < 0) {
> -		pr_err("memregion allocation failure for %pr\n", &res);
> +		pr_err("memregion allocation failure for %pr\n", res);
>  		return;
>  	}
>  
>  	pdev = platform_device_alloc("hmem", id);
>  	if (!pdev) {
> -		pr_err("hmem device allocation failure for %pr\n", &res);
> +		pr_err("hmem device allocation failure for %pr\n", res);
>  		goto out_pdev;
>  	}
>  
> -	if (!__request_region(&hmem_active, res.start, resource_size(&res),
> +	if (!__request_region(&hmem_active, res->start, resource_size(res),
>  			      dev_name(&pdev->dev), 0)) {
> -		dev_dbg(&pdev->dev, "hmem range %pr already active\n", &res);
> +		dev_dbg(&pdev->dev, "hmem range %pr already active\n", res);
>  		goto out_active;
>  	}
>  
>  	pdev->dev.numa_node = numa_map_to_online_node(target_nid);
>  	info = (struct memregion_info) {
>  		.target_node = target_nid,
> +		.range = {
> +			.start = res->start,
> +			.end = res->end,
> +		},
>  	};
>  	rc = platform_device_add_data(pdev, &info, sizeof(info));
>  	if (rc < 0) {
> -		pr_err("hmem memregion_info allocation failure for %pr\n", &res);
> -		goto out_resource;
> -	}
> -
> -	rc = platform_device_add_resources(pdev, &res, 1);
> -	if (rc < 0) {
> -		pr_err("hmem resource allocation failure for %pr\n", &res);
> +		pr_err("hmem memregion_info allocation failure for %pr\n", res);
>  		goto out_resource;
>  	}
>  
>  	rc = platform_device_add(pdev);
>  	if (rc < 0) {
> -		dev_err(&pdev->dev, "device add failed for %pr\n", &res);
> +		dev_err(&pdev->dev, "device add failed for %pr\n", res);
>  		goto out_resource;
>  	}
>  
>  	return;
>  
>  out_resource:
> -	__release_region(&hmem_active, res.start, resource_size(&res));
> +	__release_region(&hmem_active, res->start, resource_size(res));
>  out_active:
>  	platform_device_put(pdev);
>  out_pdev:
> diff --git a/drivers/dax/hmem/hmem.c b/drivers/dax/hmem/hmem.c
> index c7351e0dc8ff..5025a8c9850b 100644
> --- a/drivers/dax/hmem/hmem.c
> +++ b/drivers/dax/hmem/hmem.c
> @@ -15,25 +15,17 @@ static int dax_hmem_probe(struct platform_device *pdev)
>  	struct memregion_info *mri;
>  	struct dev_dax_data data;
>  	struct dev_dax *dev_dax;
> -	struct resource *res;
> -	struct range range;
> -
> -	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -	if (!res)
> -		return -ENOMEM;
>  
>  	mri = dev->platform_data;
> -	range.start = res->start;
> -	range.end = res->end;
> -	dax_region = alloc_dax_region(dev, pdev->id, &range, mri->target_node,
> -			PMD_SIZE, 0);
> +	dax_region = alloc_dax_region(dev, pdev->id, &mri->range,
> +				      mri->target_node, PMD_SIZE, 0);
>  	if (!dax_region)
>  		return -ENOMEM;
>  
>  	data = (struct dev_dax_data) {
>  		.dax_region = dax_region,
>  		.id = -1,
> -		.size = region_idle ? 0 : resource_size(res),
> +		.size = region_idle ? 0 : range_len(&mri->range),
>  	};
>  	dev_dax = devm_create_dev_dax(&data);
>  	if (IS_ERR(dev_dax))
> diff --git a/include/linux/memregion.h b/include/linux/memregion.h
> index bf83363807ac..c01321467789 100644
> --- a/include/linux/memregion.h
> +++ b/include/linux/memregion.h
> @@ -3,10 +3,12 @@
>  #define _MEMREGION_H_
>  #include <linux/types.h>
>  #include <linux/errno.h>
> +#include <linux/range.h>
>  #include <linux/bug.h>
>  
>  struct memregion_info {
>  	int target_node;
> +	struct range range;
>  };
>  
>  #ifdef CONFIG_MEMREGION
> 


  reply	other threads:[~2023-02-08 17:41 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20230208173730uscas1p2af3a9eeb8946dfa607b190c079a49653@uscas1p2.samsung.com>
2023-02-06  1:02 ` [PATCH 00/18] CXL RAM and the 'Soft Reserved' => 'System RAM' default Dan Williams
2023-02-06  1:02   ` [PATCH 01/18] cxl/Documentation: Update references to attributes added in v6.0 Dan Williams
2023-02-06 15:17     ` Jonathan Cameron
2023-02-06 16:37     ` Gregory Price
2023-02-06 17:27     ` [PATCH 1/18] " Davidlohr Bueso
2023-02-06 19:15     ` [PATCH 01/18] " Ira Weiny
2023-02-06 21:04     ` Dave Jiang
2023-02-09  0:20     ` Verma, Vishal L
2023-02-06  1:02   ` [PATCH 02/18] cxl/region: Add a mode attribute for regions Dan Williams
2023-02-06 15:46     ` Jonathan Cameron
2023-02-06 17:47       ` Dan Williams
2023-02-06 16:39     ` Gregory Price
2023-02-06 19:16     ` Ira Weiny
2023-02-06 21:05     ` Dave Jiang
2023-02-09  0:22     ` Verma, Vishal L
2023-02-06  1:02   ` [PATCH 03/18] cxl/region: Support empty uuids for non-pmem regions Dan Williams
2023-02-06 15:54     ` Jonathan Cameron
2023-02-06 18:07       ` Dan Williams
2023-02-06 19:22     ` Ira Weiny
2023-02-06 19:35       ` Dan Williams
2023-02-09  0:24     ` Verma, Vishal L
2023-02-06  1:02   ` [PATCH 04/18] cxl/region: Validate region mode vs decoder mode Dan Williams
2023-02-06 16:02     ` Jonathan Cameron
2023-02-06 18:14       ` Dan Williams
2023-02-06 16:44     ` Gregory Price
2023-02-06 21:51       ` Dan Williams
2023-02-06 19:55         ` Gregory Price
2023-02-06 19:23     ` Ira Weiny
2023-02-06 22:16     ` Dave Jiang
2023-02-09  0:25     ` Verma, Vishal L
2023-02-06  1:02   ` [PATCH 05/18] cxl/region: Add volatile region creation support Dan Williams
2023-02-06 16:18     ` Jonathan Cameron
2023-02-06 18:19       ` Dan Williams
2023-02-06 16:55     ` Gregory Price
2023-02-06 21:57       ` Dan Williams
2023-02-06 19:56         ` Gregory Price
2023-02-06 19:25     ` Ira Weiny
2023-02-06 22:31     ` Dave Jiang
2023-02-06 22:37       ` Dan Williams
2023-02-09  1:02     ` Verma, Vishal L
2023-02-06  1:03   ` [PATCH 06/18] cxl/region: Refactor attach_target() for autodiscovery Dan Williams
2023-02-06 17:06     ` Jonathan Cameron
2023-02-06 18:48       ` Dan Williams
2023-02-06 19:26     ` Ira Weiny
2023-02-06 22:41     ` Dave Jiang
2023-02-09  1:09     ` Verma, Vishal L
2023-02-06  1:03   ` [PATCH 07/18] cxl/region: Move region-position validation to a helper Dan Williams
2023-02-06 17:44     ` Ira Weiny
2023-02-06 19:15       ` Dan Williams
2023-02-08 12:30     ` Jonathan Cameron
2023-02-09  4:09       ` Dan Williams
2023-02-09  4:26       ` Dan Williams
2023-02-09 11:07         ` Jonathan Cameron
2023-02-09 20:52           ` Dan Williams
2023-02-09 19:45     ` Verma, Vishal L
2023-02-06  1:03   ` [PATCH 08/18] kernel/range: Uplevel the cxl subsystem's range_contains() helper Dan Williams
2023-02-06 17:02     ` Gregory Price
2023-02-06 22:01       ` Dan Williams
2023-02-06 19:28     ` Ira Weiny
2023-02-06 23:41     ` Dave Jiang
2023-02-08 12:32     ` Jonathan Cameron
2023-02-09 19:47     ` Verma, Vishal L
2023-02-06  1:03   ` [PATCH 09/18] cxl/region: Enable CONFIG_CXL_REGION to be toggled Dan Williams
2023-02-06 17:03     ` Gregory Price
2023-02-06 23:57     ` Dave Jiang
2023-02-08 12:36     ` Jonathan Cameron
2023-02-09 20:17     ` Verma, Vishal L
2023-02-06  1:03   ` [PATCH 10/18] cxl/region: Fix passthrough-decoder detection Dan Williams
2023-02-06  5:38     ` Greg KH
2023-02-06 17:22       ` Dan Williams
2023-02-07  0:00     ` Dave Jiang
2023-02-08 12:44     ` Jonathan Cameron
2023-02-09 20:28     ` Verma, Vishal L
2023-02-06  1:03   ` [PATCH 11/18] cxl/region: Add region autodiscovery Dan Williams
2023-02-06 19:02     ` Ira Weiny
2023-02-07 23:54     ` Dave Jiang
2023-02-08 17:07     ` Jonathan Cameron
2023-02-09  4:07       ` Dan Williams
2023-02-06  1:03   ` [PATCH 12/18] tools/testing/cxl: Define a fixed volatile configuration to parse Dan Williams
2023-02-08 17:31     ` Jonathan Cameron
2023-02-09 20:50       ` Dan Williams
2023-02-06  1:03   ` [PATCH 13/18] dax/hmem: Move HMAT and Soft reservation probe initcall level Dan Williams
2023-02-06  1:03   ` [PATCH 14/18] dax/hmem: Drop unnecessary dax_hmem_remove() Dan Williams
2023-02-06 17:15     ` Gregory Price
2023-02-08 17:33     ` Jonathan Cameron
2023-02-06  1:03   ` [PATCH 15/18] dax/hmem: Convey the dax range via memregion_info() Dan Williams
2023-02-08 17:35     ` Jonathan Cameron [this message]
2023-02-06  1:03   ` [PATCH 16/18] dax/hmem: Move hmem device registration to dax_hmem.ko Dan Williams
2023-02-06  1:04   ` [PATCH 17/18] dax: Assign RAM regions to memory-hotplug by default Dan Williams
2023-02-06 17:26     ` Gregory Price
2023-02-06 22:15       ` Dan Williams
2023-02-06 19:05         ` Gregory Price
2023-02-06 23:20           ` Dan Williams
2023-02-06  1:04   ` [PATCH 18/18] cxl/dax: Create dax devices for CXL RAM regions Dan Williams
2023-02-06  5:36   ` [PATCH 00/18] CXL RAM and the 'Soft Reserved' => 'System RAM' default Gregory Price
2023-02-06 16:40     ` Davidlohr Bueso
2023-02-06 18:23       ` Dan Williams
2023-02-06 17:29     ` Dan Williams
2023-02-06 17:18       ` Davidlohr Bueso
2023-02-08 17:37   ` Fan Ni
2023-02-09  4:56     ` Dan Williams
2023-02-13 12:13   ` David Hildenbrand
2023-02-14 18:45     ` Dan Williams
2023-02-14 18:27   ` Gregory Price
2023-02-14 18:39     ` Dan Williams
2023-02-14 19:01       ` Gregory Price
2023-02-14 21:18         ` Jonathan Cameron
2023-02-14 21:51           ` Gregory Price
2023-02-14 21:54             ` Gregory Price
2023-02-15 10:03               ` Jonathan Cameron
2023-02-15 10:03                 ` Jonathan Cameron via
2023-02-18  9:47                 ` Gregory Price

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230208173531.00000687@Huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-cxl@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.