All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jonathan.cameron@huawei.com>
To: Gregory Price <gourry@gourry.net>
Cc: <linux-cxl@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<kernel-team@meta.com>, <dave@stgolabs.net>,
	<dave.jiang@intel.com>, <alison.schofield@intel.com>,
	<vishal.l.verma@intel.com>, <ira.weiny@intel.com>,
	<dan.j.williams@intel.com>
Subject: Re: [PATCH v4 1/3] cxl/core/region: move pmem region driver logic into region_pmem.c
Date: Mon, 23 Mar 2026 15:08:47 +0000	[thread overview]
Message-ID: <20260323150847.00002e6a@huawei.com> (raw)
In-Reply-To: <20260322131638.3636725-2-gourry@gourry.net>

On Sun, 22 Mar 2026 09:16:36 -0400
Gregory Price <gourry@gourry.net> wrote:

> core/region.c is overloaded with per-region control logic (pmem, dax,
> sysram, etc). Move the pmem region driver logic from region.c into
> region_pmem.c make it clear that this code only applies to pmem regions.
> 
> No functional changes.
> 
> Signed-off-by: Gregory Price <gourry@gourry.net>
> ---
>  drivers/cxl/core/Makefile      |   1 +
>  drivers/cxl/core/core.h        |   1 +
>  drivers/cxl/core/region.c      | 184 --------------------------------
>  drivers/cxl/core/region_pmem.c | 189 +++++++++++++++++++++++++++++++++
>  4 files changed, 191 insertions(+), 184 deletions(-)
>  create mode 100644 drivers/cxl/core/region_pmem.c
> 
> diff --git a/drivers/cxl/core/Makefile b/drivers/cxl/core/Makefile
> index a639a9499972..d1484a0e5eb4 100644
> --- a/drivers/cxl/core/Makefile
> +++ b/drivers/cxl/core/Makefile
> @@ -16,6 +16,7 @@ cxl_core-y += pmu.o
>  cxl_core-y += cdat.o
>  cxl_core-$(CONFIG_TRACING) += trace.o
>  cxl_core-$(CONFIG_CXL_REGION) += region.o
> +cxl_core-$(CONFIG_CXL_REGION) += region_pmem.o

cxl_core-$(CONFIG_CXL_REGION) += region.o region_pmem.o

For me having them on one line makes it more obvious it's
either neither or both. Cost is a bit more churn if you
decide later to split the CONFIG_* up.

>  cxl_core-$(CONFIG_CXL_MCE) += mce.o
>  cxl_core-$(CONFIG_CXL_FEATURES) += features.o
>  cxl_core-$(CONFIG_CXL_EDAC_MEM_FEATURES) += edac.o
Otherwise a couple of white space things. + a passing comment on the lifetime
management being more complex than I'd like.

Fix the white space and you can add
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>

> diff --git a/drivers/cxl/core/region_pmem.c b/drivers/cxl/core/region_pmem.c
> new file mode 100644
> index 000000000000..138c373a5700
> --- /dev/null
> +++ b/drivers/cxl/core/region_pmem.c

> +const struct device_type cxl_pmem_region_type = {
> +	.name = "cxl_pmem_region",
> +	.release = cxl_pmem_region_release,
> +	.groups = cxl_pmem_region_attribute_groups,
> +};

Blank line here. There is one in the original and I can't see why
we'd want to get rid of it.

> +bool is_cxl_pmem_region(struct device *dev)
> +{
> +	return dev->type == &cxl_pmem_region_type;
> +}
> +EXPORT_SYMBOL_NS_GPL(is_cxl_pmem_region, "CXL");
> +
> +struct cxl_pmem_region *to_cxl_pmem_region(struct device *dev)
> +{
> +	if (dev_WARN_ONCE(dev, !is_cxl_pmem_region(dev),
> +				"not a cxl_pmem_region device\n"))
> +		return NULL;
> +	return container_of(dev, struct cxl_pmem_region, dev);
> +}
> +EXPORT_SYMBOL_NS_GPL(to_cxl_pmem_region, "CXL");

Blank line here probably makes sense as the key has nothing to do
with the EXPORT_SYMBOL...


> +static struct lock_class_key cxl_pmem_region_key;
> +

> +
> +/**
> + * devm_cxl_add_pmem_region() - add a cxl_region-to-nd_region bridge
> + * @cxlr: parent CXL region for this pmem region bridge device
> + *
> + * Return: 0 on success negative error code on failure.

FWIW the lifetime management in here feels way to complex to me.  Not
a problem for this patch and I'm not immediately sure what we can do about it.

> + */
> +int devm_cxl_add_pmem_region(struct cxl_region *cxlr)
> +{
> +	struct cxl_pmem_region *cxlr_pmem;
> +	struct cxl_nvdimm_bridge *cxl_nvb;
> +	struct device *dev;
> +	int rc;
> +
> +	rc = cxl_pmem_region_alloc(cxlr);
> +	if (rc)
> +		return rc;
> +	cxlr_pmem = cxlr->cxlr_pmem;
> +	cxl_nvb = cxlr->cxl_nvb;
> +
> +	dev = &cxlr_pmem->dev;
> +	rc = dev_set_name(dev, "pmem_region%d", cxlr->id);
> +	if (rc)
> +		goto err;
> +
> +	rc = device_add(dev);
> +	if (rc)
> +		goto err;
> +
> +	dev_dbg(&cxlr->dev, "%s: register %s\n", dev_name(dev->parent),
> +			dev_name(dev));
> +
> +	scoped_guard(device, &cxl_nvb->dev) {
> +		if (cxl_nvb->dev.driver)
> +			rc = devm_add_action_or_reset(&cxl_nvb->dev,
> +					cxlr_pmem_unregister,
> +					cxlr_pmem);
> +		else
> +			rc = -ENXIO;
As an example. If we happen to take this path... Where is the device_add() undone?
> +	}
> +
> +	if (rc)
> +		goto err_bridge;
> +
> +	/* @cxlr carries a reference on @cxl_nvb until cxlr_release_nvdimm */
> +	return devm_add_action_or_reset(&cxlr->dev, cxlr_release_nvdimm, cxlr);
> +
> +err:
> +	put_device(dev);
> +err_bridge:
> +	put_device(&cxl_nvb->dev);
> +	cxlr->cxl_nvb = NULL;
> +	return rc;
> +}


  parent reply	other threads:[~2026-03-23 15:08 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-22 13:16 [PATCH v4 0/3] pull region-specific logic into new files Gregory Price
2026-03-22 13:16 ` [PATCH v4 1/3] cxl/core/region: move pmem region driver logic into region_pmem.c Gregory Price
2026-03-23  2:37   ` Alison Schofield
2026-03-23  5:37     ` Gregory Price
2026-03-24  3:49       ` Alison Schofield
2026-03-24 15:11         ` Gregory Price
2026-03-23 15:08   ` Jonathan Cameron [this message]
2026-03-23 15:47     ` Gregory Price
2026-03-23 17:58       ` Jonathan Cameron
2026-04-11 20:34     ` Dan Williams
2026-03-25  1:31   ` Alison Schofield
2026-03-22 13:16 ` [PATCH v4 2/3] cxl/core/region: move dax region device logic into region_dax.c Gregory Price
2026-03-23 15:11   ` Jonathan Cameron
2026-03-25  1:31   ` Alison Schofield
2026-03-22 13:16 ` [PATCH v4 3/3] cxl/core: use cleanup.h for devm_cxl_add_dax_region Gregory Price
2026-03-23 12:17   ` Jonathan Cameron
2026-03-25  1:33   ` Alison Schofield
2026-03-26 16:28 ` [PATCH v4 0/3] pull region-specific logic into new files Ira Weiny
2026-03-26 16:34   ` 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=20260323150847.00002e6a@huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=alison.schofield@intel.com \
    --cc=dan.j.williams@intel.com \
    --cc=dave.jiang@intel.com \
    --cc=dave@stgolabs.net \
    --cc=gourry@gourry.net \
    --cc=ira.weiny@intel.com \
    --cc=kernel-team@meta.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=vishal.l.verma@intel.com \
    /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.