From: Dan Williams <dan.j.williams@intel.com>
To: Dave Jiang <dave.jiang@intel.com>, <linux-cxl@vger.kernel.org>
Cc: <dan.j.williams@intel.com>, <ira.weiny@intel.com>,
<vishal.l.verma@intel.com>, <alison.schofield@intel.com>,
<Jonathan.Cameron@huawei.com>, <dave@stgolabs.net>,
<jgg@nvidia.com>, <shiju.jose@huawei.com>
Subject: Re: [PATCH v1 04/19] cxl: Add Get Supported Features command for kernel usage
Date: Thu, 23 Jan 2025 16:30:17 -0800 [thread overview]
Message-ID: <6792df1982a19_20fa294db@dwillia2-xfh.jf.intel.com.notmuch> (raw)
In-Reply-To: <20250122235159.2716036-5-dave.jiang@intel.com>
Dave Jiang wrote:
> CXL spec r3.1 8.2.9.6.1 Get Supported Features (Opcode 0500h)
> The command retrieve the list of supported device-specific features
> (identified by UUID) and general information about each Feature.
>
> The driver will retrieve the feature entries in order to make checks and
> provide information for the Get Feature and Set Feature command. One of
> the main piece of information retrieved are the effects a Set Feature
> command would have for a particular feature.
>
> Co-developed-by: Shiju Jose <shiju.jose@huawei.com>
> Signed-off-by: Shiju Jose <shiju.jose@huawei.com>
> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
> ---
> v1:
> - Change input param from cxlds to cxl_mbox
> - Move mbox_out declaration inline. (Jonathan)
> - Fix __counted_by() input. (Jonathan)
> - Return count for cxl_get_supported_features_count(). (Dan)
> - Remove goto from cxl_get_supported_features(). (Dan)
> - Return cxl_get_supported_feature_entry() directly. (Dan)
> - Drop user path enumeration. (Dan)
> - Move to the feature driver model. (Dan)
> - Add support for 0 feature data requested.
> - Add missing increment of feature data ptr during copy.
> ---
> drivers/cxl/core/features.c | 28 +++++++
> drivers/cxl/core/mbox.c | 3 +-
> drivers/cxl/cxl.h | 2 +
> drivers/cxl/features.c | 146 +++++++++++++++++++++++++++++++++++-
> include/cxl/features.h | 32 ++++++++
> 5 files changed, 209 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/cxl/core/features.c b/drivers/cxl/core/features.c
> index eb6eb191a32e..66a4b82910e6 100644
> --- a/drivers/cxl/core/features.c
> +++ b/drivers/cxl/core/features.c
> @@ -1,6 +1,7 @@
> // SPDX-License-Identifier: GPL-2.0-only
> /* Copyright(c) 2024-2025 Intel Corporation. All rights reserved. */
> #include <linux/device.h>
> +#include <cxl/mailbox.h>
> #include "cxl.h"
> #include "core.h"
>
> @@ -69,3 +70,30 @@ struct cxl_features *cxl_features_alloc(struct cxl_mailbox *cxl_mbox,
> return ERR_PTR(rc);
> }
> EXPORT_SYMBOL_NS_GPL(cxl_features_alloc, "CXL");
> +
> +struct cxl_feat_entry *
> +cxl_get_supported_feature_entry(struct cxl_features *features,
> + const uuid_t *feat_uuid)
> +{
> + struct cxl_feat_entry *feat_entry;
> + struct cxl_features_state *cfs;
> + int count;
> +
> + cfs = dev_get_drvdata(&features->dev);
> + if (!cfs)
> + return ERR_PTR(-EOPNOTSUPP);
How could this function be called outside of the driver being enabled?
If the driver might not be enabled when this is called, what stops it
from being disabled immediately after this check?
Went looking for the caller of this function... none in this patch set.
If this is for the EDAC use case, that enabling had better be triggered
from a known context where these questions have a satisfactory answer.
As it stands I think you can just delete it, right?
This has me thinking that the EDAC integration should just be a feature
of the cxl_features_driver.
...that last sentence made me itch because I don't want to have to
untangle future sentences like: A new feature of the features driver
features a new Feature to complement the existing Features and other
features.
So I might need to ask you to be explicit about at least using capital
'Feature' when talking about a command, 'cxl_features_device' when
talking about the device and 'cxl_features_driver' when talking about
the driver.
> diff --git a/drivers/cxl/features.c b/drivers/cxl/features.c
> index 644add26975f..a5949312a4ab 100644
> --- a/drivers/cxl/features.c
> +++ b/drivers/cxl/features.c
[..]
> +static int cxl_get_supported_features(struct cxl_features_state *cfs)
> +{
> + int remain_feats, max_size, max_feats, start, rc, hdr_size;
> + struct cxl_mailbox *cxl_mbox = cfs->features->cxl_mbox;
> + int feat_size = sizeof(struct cxl_feat_entry);
> + struct cxl_mbox_get_sup_feats_in mbox_in;
> + struct cxl_feat_entry *entry;
> + struct cxl_mbox_cmd mbox_cmd;
> + struct cxl_mem_command *cmd;
> + int count;
> +
> + /* Get supported features is optional, need to check */
> + cmd = cxl_find_feature_command(CXL_MBOX_OP_GET_SUPPORTED_FEATURES);
> + if (!cmd)
> + return -EOPNOTSUPP;
> + if (!test_bit(cmd->info.id, cxl_mbox->feature_cmds))
> + return -EOPNOTSUPP;
First, who is calling this function without knowing that features are
supported? Like how did we get here if something already did that first
level enumeration.
Otherwise, that looks like a lot of work just to ask the question, "did
the mailbox see CXL_MBOX_OP_GET_SUPPORTED_FEATURES" at init?
That could probably all be boiled down into an enum like:
enum cxl_features_capability {
CXL_FEATURES_NONE,
CXL_FEATURES_RO,
CXL_FEATURES_RW,
};
...for tracking Feature command enumeration and optional write support.
The cxl_mem_commands organization is quirk of the CXL ioctl
implementation cxl_features is free to not copy it.
Longer term we need to think about how to make cxl_mailbox more
independent of the memory expander / cxl_pci use case. Whereby, perhaps
the consumer of the mailbox passes is in a callback that takes action on
each found command. Then we get out of this game of how to cache command
capabilities that are awkward fits depending on command set or driver
use case.
[..]
next prev parent reply other threads:[~2025-01-24 0:30 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-22 23:50 [PATCH v1 0/19] cxl: Add CXL feature commands support via fwctl Dave Jiang
2025-01-22 23:50 ` [PATCH v1 01/19] cxl: Refactor user ioctl command path from mds to mailbox Dave Jiang
2025-01-22 23:50 ` [PATCH v1 02/19] cxl: Add skeletal features driver Dave Jiang
2025-01-23 3:59 ` Dan Williams
2025-01-23 15:49 ` Dave Jiang
2025-01-23 19:57 ` Dan Williams
2025-01-23 17:24 ` Jonathan Cameron
2025-01-22 23:50 ` [PATCH v1 03/19] cxl: Enumerate feature commands Dave Jiang
2025-01-23 17:33 ` Jonathan Cameron
2025-01-23 23:55 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 04/19] cxl: Add Get Supported Features command for kernel usage Dave Jiang
2025-01-23 17:43 ` Jonathan Cameron
2025-01-24 0:30 ` Dan Williams [this message]
2025-01-24 15:01 ` Jason Gunthorpe
2025-01-27 11:10 ` Jonathan Cameron
2025-01-28 0:54 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 05/19] cxl: Add features driver attribute to emit number of features supported Dave Jiang
2025-01-23 17:44 ` Jonathan Cameron
2025-01-24 0:35 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 06/19] cxl/test: Add Get Supported Features mailbox command support Dave Jiang
2025-01-23 17:47 ` Jonathan Cameron
2025-01-24 0:42 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 07/19] cxl/mbox: Add GET_FEATURE mailbox command Dave Jiang
2025-01-23 17:50 ` Jonathan Cameron
2025-01-24 22:58 ` Dan Williams
2025-01-29 0:14 ` Dave Jiang
2025-01-22 23:50 ` [PATCH v1 08/19] cxl/mbox: Add SET_FEATURE " Dave Jiang
2025-01-23 17:52 ` Jonathan Cameron
2025-01-24 23:01 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 09/19] cxl: Setup exclusive CXL features that are reserved for the kernel Dave Jiang
2025-01-23 17:59 ` Jonathan Cameron
2025-01-24 23:05 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 10/19] cxl: Add FWCTL support to the CXL features driver Dave Jiang
2025-01-23 18:04 ` Jonathan Cameron
2025-01-23 18:53 ` Jason Gunthorpe
2025-01-24 23:14 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 11/19] cxl: Add support for get driver information Dave Jiang
2025-01-23 18:09 ` Jonathan Cameron
2025-01-25 1:26 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 12/19] cxl: Move cxl_mem.h under uapi to cxl exclusive directory Dave Jiang
2025-01-23 18:10 ` Jonathan Cameron
2025-01-25 1:29 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 13/19] cxl: Move cxl feature command structs to user header Dave Jiang
2025-01-23 18:12 ` Jonathan Cameron
2025-01-23 18:13 ` Jonathan Cameron
2025-01-25 1:34 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 14/19] cxl: Add support for fwctl RPC command to enable CXL feature commands Dave Jiang
2025-01-23 18:21 ` Jonathan Cameron
2025-01-25 2:08 ` Dan Williams
2025-01-27 10:51 ` Jonathan Cameron
2025-01-28 0:40 ` Dan Williams
2025-01-28 12:01 ` Jonathan Cameron
2025-01-28 15:55 ` Dave Jiang
2025-01-30 13:42 ` Jonathan Cameron
2025-02-04 1:43 ` Dan Williams
2025-02-04 10:04 ` Jonathan Cameron
2025-02-04 22:26 ` Dan Williams
2025-02-05 17:36 ` Jonathan Cameron
2025-02-05 18:02 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 15/19] cxl: Add support to handle user feature commands for get feature Dave Jiang
2025-01-23 18:25 ` Jonathan Cameron
2025-01-25 2:23 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 16/19] cxl: Add support to handle user feature commands for set feature Dave Jiang
2025-01-23 18:26 ` Jonathan Cameron
2025-01-25 2:29 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 17/19] cxl/test: Add Get Feature support to cxl_test Dave Jiang
2025-01-25 2:33 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 18/19] cxl/test: Add Set " Dave Jiang
2025-01-25 2:36 ` Dan Williams
2025-01-22 23:50 ` [PATCH v1 19/19] fwctl/cxl: Add documentation to FWCTL CXL Dave Jiang
2025-01-25 2:55 ` Dan Williams
2025-01-23 17:03 ` [PATCH v1 0/19] cxl: Add CXL feature commands support via fwctl 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=6792df1982a19_20fa294db@dwillia2-xfh.jf.intel.com.notmuch \
--to=dan.j.williams@intel.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=alison.schofield@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=ira.weiny@intel.com \
--cc=jgg@nvidia.com \
--cc=linux-cxl@vger.kernel.org \
--cc=shiju.jose@huawei.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox