From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: <linux-cxl@vger.kernel.org>, <vishal.l.verma@intel.com>,
<dave.hansen@linux.intel.com>, <linux-mm@kvack.org>,
<linux-acpi@vger.kernel.org>
Subject: Re: [PATCH v2 12/20] cxl/port: Split endpoint and switch port probe
Date: Fri, 10 Feb 2023 17:41:13 +0000 [thread overview]
Message-ID: <20230210174113.000079d0@Huawei.com> (raw)
In-Reply-To: <167601999378.1924368.15071142145866277623.stgit@dwillia2-xfh.jf.intel.com>
On Fri, 10 Feb 2023 01:06:33 -0800
Dan Williams <dan.j.williams@intel.com> wrote:
> Jonathan points out that the shared code between the switch and endpoint
> case is small. Before adding another is_cxl_endpoint() conditional,
> just split the two cases.
>
> Rather than duplicate the "Couldn't enumerate decoders" error message
> take the opportunity to improve the error messages in
> devm_cxl_enumerate_decoders().
>
> Reported-by: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
> Link: http://lore.kernel.org/r/20230208170724.000067ec@Huawei.com
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
LGTM.
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
> drivers/cxl/core/hdm.c | 11 ++++++--
> drivers/cxl/port.c | 69 +++++++++++++++++++++++++++---------------------
> 2 files changed, 47 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c
> index dcc16d7cb8f3..a0891c3464f1 100644
> --- a/drivers/cxl/core/hdm.c
> +++ b/drivers/cxl/core/hdm.c
> @@ -826,7 +826,8 @@ int devm_cxl_enumerate_decoders(struct cxl_hdm *cxlhdm)
> cxled = cxl_endpoint_decoder_alloc(port);
> if (IS_ERR(cxled)) {
> dev_warn(&port->dev,
> - "Failed to allocate the decoder\n");
> + "Failed to allocate decoder%d.%d\n",
> + port->id, i);
> return PTR_ERR(cxled);
> }
> cxld = &cxled->cxld;
> @@ -836,7 +837,8 @@ int devm_cxl_enumerate_decoders(struct cxl_hdm *cxlhdm)
> cxlsd = cxl_switch_decoder_alloc(port, target_count);
> if (IS_ERR(cxlsd)) {
> dev_warn(&port->dev,
> - "Failed to allocate the decoder\n");
> + "Failed to allocate decoder%d.%d\n",
> + port->id, i);
> return PTR_ERR(cxlsd);
> }
> cxld = &cxlsd->cxld;
> @@ -844,13 +846,16 @@ int devm_cxl_enumerate_decoders(struct cxl_hdm *cxlhdm)
>
> rc = init_hdm_decoder(port, cxld, target_map, hdm, i, &dpa_base);
> if (rc) {
> + dev_warn(&port->dev,
> + "Failed to initialize decoder%d.%d\n",
> + port->id, i);
> put_device(&cxld->dev);
> return rc;
> }
> rc = add_hdm_decoder(port, cxld, target_map);
> if (rc) {
> dev_warn(&port->dev,
> - "Failed to add decoder to port\n");
> + "Failed to add decoder%d.%d\n", port->id, i);
> return rc;
> }
> }
> diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c
> index 5453771bf330..a8d46a67b45e 100644
> --- a/drivers/cxl/port.c
> +++ b/drivers/cxl/port.c
> @@ -30,55 +30,64 @@ static void schedule_detach(void *cxlmd)
> schedule_cxl_memdev_detach(cxlmd);
> }
>
> -static int cxl_port_probe(struct device *dev)
> +static int cxl_switch_port_probe(struct cxl_port *port)
> {
> - struct cxl_port *port = to_cxl_port(dev);
> struct cxl_hdm *cxlhdm;
> int rc;
>
> + rc = devm_cxl_port_enumerate_dports(port);
> + if (rc < 0)
> + return rc;
>
> - if (!is_cxl_endpoint(port)) {
> - rc = devm_cxl_port_enumerate_dports(port);
> - if (rc < 0)
> - return rc;
> - if (rc == 1)
> - return devm_cxl_add_passthrough_decoder(port);
> - }
> + if (rc == 1)
> + return devm_cxl_add_passthrough_decoder(port);
>
> cxlhdm = devm_cxl_setup_hdm(port);
> if (IS_ERR(cxlhdm))
> return PTR_ERR(cxlhdm);
>
> - if (is_cxl_endpoint(port)) {
> - struct cxl_memdev *cxlmd = to_cxl_memdev(port->uport);
> - struct cxl_dev_state *cxlds = cxlmd->cxlds;
> + return devm_cxl_enumerate_decoders(cxlhdm);
> +}
>
> - /* Cache the data early to ensure is_visible() works */
> - read_cdat_data(port);
> +static int cxl_endpoint_port_probe(struct cxl_port *port)
> +{
> + struct cxl_memdev *cxlmd = to_cxl_memdev(port->uport);
> + struct cxl_dev_state *cxlds = cxlmd->cxlds;
> + struct cxl_hdm *cxlhdm;
> + int rc;
> +
> + cxlhdm = devm_cxl_setup_hdm(port);
> + if (IS_ERR(cxlhdm))
> + return PTR_ERR(cxlhdm);
>
> - get_device(&cxlmd->dev);
> - rc = devm_add_action_or_reset(dev, schedule_detach, cxlmd);
> - if (rc)
> - return rc;
> + /* Cache the data early to ensure is_visible() works */
> + read_cdat_data(port);
>
> - rc = cxl_hdm_decode_init(cxlds, cxlhdm);
> - if (rc)
> - return rc;
> + get_device(&cxlmd->dev);
> + rc = devm_add_action_or_reset(&port->dev, schedule_detach, cxlmd);
> + if (rc)
> + return rc;
>
> - rc = cxl_await_media_ready(cxlds);
> - if (rc) {
> - dev_err(dev, "Media not active (%d)\n", rc);
> - return rc;
> - }
> - }
> + rc = cxl_hdm_decode_init(cxlds, cxlhdm);
> + if (rc)
> + return rc;
>
> - rc = devm_cxl_enumerate_decoders(cxlhdm);
> + rc = cxl_await_media_ready(cxlds);
> if (rc) {
> - dev_err(dev, "Couldn't enumerate decoders (%d)\n", rc);
> + dev_err(&port->dev, "Media not active (%d)\n", rc);
> return rc;
> }
>
> - return 0;
> + return devm_cxl_enumerate_decoders(cxlhdm);
> +}
> +
> +static int cxl_port_probe(struct device *dev)
> +{
> + struct cxl_port *port = to_cxl_port(dev);
> +
> + if (is_cxl_endpoint(port))
> + return cxl_endpoint_port_probe(port);
> + return cxl_switch_port_probe(port);
> }
>
> static ssize_t CDAT_read(struct file *filp, struct kobject *kobj,
>
next prev parent reply other threads:[~2023-02-10 17:41 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-10 9:05 [PATCH v2 00/20] CXL RAM and the 'Soft Reserved' => 'System RAM' default Dan Williams
2023-02-10 9:05 ` [PATCH v2 01/20] cxl/memdev: Fix endpoint port removal Dan Williams
2023-02-10 17:28 ` Jonathan Cameron
2023-02-10 21:14 ` Dan Williams
2023-02-10 23:17 ` Verma, Vishal L
2023-02-10 9:05 ` [PATCH v2 02/20] cxl/Documentation: Update references to attributes added in v6.0 Dan Williams
2023-02-10 9:05 ` [PATCH v2 03/20] cxl/region: Add a mode attribute for regions Dan Williams
2023-02-10 9:05 ` [PATCH v2 04/20] cxl/region: Support empty uuids for non-pmem regions Dan Williams
2023-02-10 17:30 ` Jonathan Cameron
2023-02-10 23:34 ` Ira Weiny
2023-02-10 9:05 ` [PATCH v2 05/20] cxl/region: Validate region mode vs decoder mode Dan Williams
2023-02-10 9:05 ` [PATCH v2 06/20] cxl/region: Add volatile region creation support Dan Williams
2023-02-10 9:06 ` [PATCH v2 07/20] cxl/region: Refactor attach_target() for autodiscovery Dan Williams
2023-02-10 9:06 ` [PATCH v2 08/20] cxl/region: Cleanup target list on attach error Dan Williams
2023-02-10 17:31 ` Jonathan Cameron
2023-02-10 23:17 ` Verma, Vishal L
2023-02-10 23:46 ` Ira Weiny
2023-02-10 9:06 ` [PATCH v2 09/20] cxl/region: Move region-position validation to a helper Dan Williams
2023-02-10 17:34 ` Jonathan Cameron
2023-02-10 9:06 ` [PATCH v2 10/20] kernel/range: Uplevel the cxl subsystem's range_contains() helper Dan Williams
2023-02-10 9:06 ` [PATCH v2 11/20] cxl/region: Enable CONFIG_CXL_REGION to be toggled Dan Williams
2023-02-10 9:06 ` [PATCH v2 12/20] cxl/port: Split endpoint and switch port probe Dan Williams
2023-02-10 17:41 ` Jonathan Cameron [this message]
2023-02-10 23:21 ` Verma, Vishal L
2023-02-10 9:06 ` [PATCH v2 13/20] cxl/region: Add region autodiscovery Dan Williams
2023-02-10 18:09 ` Jonathan Cameron
2023-02-10 21:35 ` Dan Williams
2023-02-14 13:23 ` Jonathan Cameron
2023-02-14 16:43 ` Dan Williams
2023-02-10 21:49 ` Dan Williams
2023-02-11 0:29 ` Verma, Vishal L
2023-02-11 1:03 ` Dan Williams
2023-02-13 19:27 ` Fan Ni
2023-02-28 18:53 ` Fan Ni
2023-02-10 9:06 ` [PATCH v2 14/20] tools/testing/cxl: Define a fixed volatile configuration to parse Dan Williams
2023-02-10 18:12 ` Jonathan Cameron
2023-02-10 18:36 ` Dave Jiang
2023-02-11 0:39 ` Verma, Vishal L
2023-02-10 9:06 ` [PATCH v2 15/20] dax/hmem: Move HMAT and Soft reservation probe initcall level Dan Williams
2023-02-10 21:53 ` Dave Jiang
2023-02-10 21:57 ` Dave Jiang
2023-02-11 0:40 ` Verma, Vishal L
2023-02-10 9:06 ` [PATCH v2 16/20] dax/hmem: Drop unnecessary dax_hmem_remove() Dan Williams
2023-02-10 21:59 ` Dave Jiang
2023-02-11 0:41 ` Verma, Vishal L
2023-02-10 9:07 ` [PATCH v2 17/20] dax/hmem: Convey the dax range via memregion_info() Dan Williams
2023-02-10 22:03 ` Dave Jiang
2023-02-11 4:25 ` Verma, Vishal L
2023-02-10 9:07 ` [PATCH v2 18/20] dax/hmem: Move hmem device registration to dax_hmem.ko Dan Williams
2023-02-10 18:25 ` Jonathan Cameron
2023-02-10 22:09 ` Dave Jiang
2023-02-11 4:41 ` Verma, Vishal L
2023-02-10 9:07 ` [PATCH v2 19/20] dax: Assign RAM regions to memory-hotplug by default Dan Williams
2023-02-10 22:19 ` Dave Jiang
2023-02-11 5:57 ` Verma, Vishal L
2023-02-10 9:07 ` [PATCH v2 20/20] cxl/dax: Create dax devices for CXL RAM regions Dan Williams
2023-02-10 18:38 ` Jonathan Cameron
2023-02-10 22:42 ` Dave Jiang
2023-02-10 17:53 ` [PATCH v2 00/20] CXL RAM and the 'Soft Reserved' => 'System RAM' default Dan Williams
2023-02-11 14:04 ` Gregory Price
2023-02-13 18:22 ` Gregory Price
2023-02-13 18:31 ` Gregory Price
2023-02-22 21:41 ` Fan Ni
2023-02-22 22:18 ` Dan Williams
2023-02-14 13:35 ` Jonathan Cameron
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=20230210174113.000079d0@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 \
--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.