From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: Dave Jiang <dave.jiang@intel.com>
Cc: <linux-cxl@vger.kernel.org>, <dan.j.williams@intel.com>,
<ira.weiny@intel.com>, <vishal.l.verma@intel.com>,
<alison.schofield@intel.com>, <dave@stgolabs.net>,
<jgg@nvidia.com>, <shiju.jose@huawei.com>
Subject: Re: [RFC PATCH v2 16/20] fwctl/cxl: Add support to filter exclusive features
Date: Fri, 22 Nov 2024 15:05:46 +0000 [thread overview]
Message-ID: <20241122150546.00004b18@huawei.com> (raw)
In-Reply-To: <20241115212745.869552-17-dave.jiang@intel.com>
On Fri, 15 Nov 2024 14:25:49 -0700
Dave Jiang <dave.jiang@intel.com> wrote:
> Add support to allow filtering of CXL features that are exclusive to the
> kernel and make them not visible to user space. The "get supported
> features" mailbox command returned to the userspace is emulated and
> will skip the features that is marked exclusive for the kernel. The
> exclusion allows certain the feature setting of certain commands such
> as claimed by RAS to be exclusive to the kernel.
Well behaved software is only going to issue features that were returned
by get_supported_features. However we need to block badly behaved software
too. So a check is needed in the set_feature() / get_feature() paths.
A few queries inline but basically LGTM other than that.
Jonathan
>
> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
> ---
> drivers/cxl/core/mbox.c | 115 ++++++++++++++++++++++++++++++++++++----
> drivers/fwctl/cxl/cxl.c | 7 +--
> include/cxl/features.h | 52 ++++++++++++++++++
> include/cxl/mailbox.h | 8 ++-
> 4 files changed, 168 insertions(+), 14 deletions(-)
> create mode 100644 include/cxl/features.h
>
> diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c
> index e7c5c709ac79..12ace2951f7c 100644
> --- a/drivers/cxl/core/mbox.c
> +++ b/drivers/cxl/core/mbox.c
> @@ -5,6 +5,7 @@
> #include <linux/ktime.h>
> #include <linux/mutex.h>
> #include <linux/unaligned.h>
> +#include <cxl/features.h>
> #include <cxl/mailbox.h>
> #include <cxlpci.h>
> #include <cxlmem.h>
> @@ -897,6 +898,78 @@ static int handle_mailbox_cmd_from_fwctl(struct cxl_mailbox *cxl_mbox,
> return 0;
> }
>
> +/*
> + * Emulate the 'get supported features' mailbox command and only copy out the
> + * features that are not marked as exclusive for kernel.
> + */
> +static void cxl_mbox_get_supported_features_filtered(struct cxl_mailbox *cxl_mbox,
> + struct cxl_mbox_cmd *mbox_cmd)
> +{
> + struct cxl_mbox_get_sup_feats_in *feat_in = mbox_cmd->payload_in;
> + struct cxl_mbox_get_sup_feats_out *feat_out = mbox_cmd->payload_out;
> + const int feat_out_size = sizeof(*feat_out);
Worth while? I'd just use sizeof(*feat_out) inline.
Compiler will sort out out and it is self documenting.
> + struct cxl_feat_entry *pos;
> + const int feat_ent_size = sizeof(*pos);
Same for this.
> + int out_count, ents, u;
> + u32 count;
> + u16 start;
> +
> + count = le32_to_cpu(feat_in->count);
> + start = le16_to_cpu(feat_in->start_idx);
> + ents = count / sizeof(struct cxl_feat_entry);
> + ents -= start;
You've lost me on this maths. ents is what?
> + if (ents < 0) {
> + mbox_cmd->size_out = 0;
> + mbox_cmd->return_code = CXL_MBOX_CMD_RC_INPUT;
> + return;
> + }
> +
> + if (mbox_cmd->size_out < feat_out_size) {
> + mbox_cmd->size_out = 0;
> + mbox_cmd->return_code = CXL_MBOX_CMD_RC_INPUT;
> + return;
> + }
> +
> + feat_out->supported_feats =
> + cpu_to_le16(cxl_mbox->num_user_feats);
> + if (ents == 0) {
> + feat_out->num_entries = cpu_to_le16(0);
> + mbox_cmd->size_out = feat_out_size;
> + mbox_cmd->return_code = CXL_MBOX_CMD_RC_SUCCESS;
> + return;
> + }
> +
> + pos = &feat_out->ents[0];
> + out_count = feat_out_size;
> + for (int i = 0, u = 0; i < cxl_mbox->num_features; i++) {
> + struct cxl_feature *feat = &cxl_mbox->entries[i];
> +
> + if (feat->exclusive)
> + continue;
> +
> + if (u < start) {
> + u++;
> + continue;
> + }
> +
> + memcpy(pos, &feat->entry, feat_ent_size);
> + out_count += feat_ent_size;
> + pos++;
> + u++;
> +
> + if (u == count)
> + break;
> +
> + /* Make sure it does not go over total output buffer size */
> + if (out_count + feat_ent_size >= mbox_cmd->size_out)
> + break;
> + }
> +
> + feat_out->num_entries = cpu_to_le16(u);
> + mbox_cmd->size_out = out_count;
> + mbox_cmd->return_code = CXL_MBOX_CMD_RC_SUCCESS;
> +}
> diff --git a/include/cxl/features.h b/include/cxl/features.h
> new file mode 100644
> index 000000000000..6074a3f79d70
> --- /dev/null
> +++ b/include/cxl/features.h
> @@ -0,0 +1,52 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/* Copyright(c) 2024 Intel Corporation. */
> +#ifndef __CXL_FEATS_H_
> +#define __CXL_FEATS_H_
> +
> +#include <linux/uuid.h>
> +
> +#define CXL_FEAT_PATROL_SCRUB_UUID \
> + UUID_INIT(0x96dad7d6, 0xfde8, 0x482b, 0xa7, 0x33, 0x75, 0x77, 0x4e, \
> + 0x06, 0xdb, 0x8a)
We should figure out ordering for this one to avoid introducing the UUIDs in
Shiju's set then pulling them here. Shiju, maybe just use the UUID
part of this file as a patch in your series?
The exclusive array belongs only with this patch.
I guess it doesn't really matter if we end up with repeated UUID definitions
and cleanup after though.
> +
> +#define CXL_FEAT_ECS_UUID \
> + UUID_INIT(0xe5b13f22, 0x2328, 0x4a14, 0xb8, 0xba, 0xb9, 0x69, 0x1e, \
> + 0x89, 0x33, 0x86)
> +
> +#define CXL_FEAT_SPPR_UUID \
> + UUID_INIT(0x892ba475, 0xfad8, 0x474e, 0x9d, 0x3e, 0x69, 0x2c, 0x91, \
> + 0x75, 0x68, 0xbb)
> +
> +#define CXL_FEAT_HPPR_UUID \
> + UUID_INIT(0x80ea4521, 0x786f, 0x4127, 0xaf, 0xb1, 0xec, 0x74, 0x59, \
> + 0xfb, 0x0e, 0x24)
> +
> +#define CXL_FEAT_CACHELINE_SPARING_UUID \
> + UUID_INIT(0x96C33386, 0x91dd, 0x44c7, 0x9e, 0xcb, 0xfd, 0xaf, 0x65, \
> + 0x03, 0xba, 0xc4)
> +
> +#define CXL_FEAT_ROW_SPARING_UUID \
> + UUID_INIT(0x450ebf67, 0xb135, 0x4f97, 0xa4, 0x98, 0xc2, 0xd5, 0x7f, \
> + 0x27, 0x9b, 0xed)
> +
> +#define CXL_FEAT_BANK_SPARING_UUID \
> + UUID_INIT(0x78b79636, 0x90ac, 0x4b64, 0xa4, 0xef, 0xfa, 0xac, 0x5d, \
> + 0x18, 0xa8, 0x63)
> +
> +#define CXL_FEAT_RANK_SPARING_UUID \
> + UUID_INIT(0x34dbaff5, 0x0552, 0x4281, 0x8f, 0x76, 0xda, 0x0b, 0x5e, \
> + 0x7a, 0x76, 0xa7)
> +
> +#define CXL_FEAT_UUID_MAX 8
Why not size automatically and use ARRAY_SIZE() to figure out size?
> +static uuid_t cxl_exclusive_feats[CXL_FEAT_UUID_MAX] = {
> + CXL_FEAT_PATROL_SCRUB_UUID,
> + CXL_FEAT_ECS_UUID,
> + CXL_FEAT_SPPR_UUID,
> + CXL_FEAT_HPPR_UUID,
> + CXL_FEAT_CACHELINE_SPARING_UUID,
> + CXL_FEAT_ROW_SPARING_UUID,
> + CXL_FEAT_BANK_SPARING_UUID,
> + CXL_FEAT_RANK_SPARING_UUID,
> +};
> +
> +#endif
next prev parent reply other threads:[~2024-11-22 15:05 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-15 21:25 [RFC PATCH v2 0/20] fwctl/cxl: Add CXL feature commands support via fwctl Dave Jiang
2024-11-15 21:25 ` [RFC PATCH v2 01/20] cxl: Refactor user ioctl command path from mds to mailbox Dave Jiang
2024-11-21 17:33 ` Jonathan Cameron
2024-12-06 0:00 ` Dan Williams
2024-11-15 21:25 ` [RFC PATCH v2 02/20] cxl: Add Get Supported Features command for kernel usage Dave Jiang
2024-11-21 17:42 ` Jonathan Cameron
2024-12-06 0:33 ` Dan Williams
2024-12-09 12:20 ` Shiju Jose
2024-11-15 21:25 ` [RFC PATCH v2 03/20] cxl/test: Add Get Supported Features mailbox command support Dave Jiang
2024-11-21 17:45 ` Jonathan Cameron
2024-12-06 0:36 ` Dan Williams
2024-11-15 21:25 ` [RFC PATCH v2 04/20] cxl/mbox: Add GET_FEATURE mailbox command Dave Jiang
2024-12-06 0:44 ` Dan Williams
2024-12-09 12:20 ` Shiju Jose
2024-11-15 21:25 ` [RFC PATCH v2 05/20] cxl: Add Get Feature command support for user submission Dave Jiang
2024-11-21 17:47 ` Jonathan Cameron
2024-11-22 20:14 ` Dave Jiang
2024-11-25 20:14 ` Shiju Jose
2024-12-06 0:45 ` Dan Williams
2024-11-15 21:25 ` [RFC PATCH v2 06/20] cxl/mbox: Add SET_FEATURE mailbox command Dave Jiang
2024-12-06 0:48 ` Dan Williams
2024-12-09 12:20 ` Shiju Jose
2024-11-15 21:25 ` [RFC PATCH v2 07/20] cxl: Add Set Feature command support for user submission Dave Jiang
2024-11-21 17:49 ` Jonathan Cameron
2024-11-21 18:08 ` Dave Jiang
2024-11-22 14:17 ` Jonathan Cameron
2024-12-06 0:53 ` Dan Williams
2024-11-15 21:25 ` [RFC PATCH v2 08/20] cxl: Move cxl_driver related bits to be usable by external drivers Dave Jiang
2024-11-21 17:55 ` Jonathan Cameron
2024-11-15 21:25 ` [RFC PATCH v2 09/20] fwctl/cxl: Add driver for CXL mailbox for handling CXL features commands Dave Jiang
2024-11-20 18:01 ` Jason Gunthorpe
2024-11-20 18:35 ` Dave Jiang
2024-11-21 18:02 ` Jonathan Cameron
2024-12-06 1:21 ` Dan Williams
2024-12-09 13:30 ` Jason Gunthorpe
2024-12-09 20:35 ` Dan Williams
2024-12-10 13:40 ` Jason Gunthorpe
2024-11-15 21:25 ` [RFC PATCH v2 10/20] fwctl/cxl: Add support for get driver information Dave Jiang
2024-11-20 18:05 ` Jason Gunthorpe
2024-11-21 18:11 ` Jonathan Cameron
2024-11-22 23:22 ` Dave Jiang
2024-11-25 18:06 ` Jonathan Cameron
2024-12-06 5:15 ` Dan Williams
2024-11-15 21:25 ` [RFC PATCH v2 11/20] fwctl: FWCTL_HW_INFO to return hardware information Dave Jiang
2024-11-20 18:53 ` Jason Gunthorpe
2024-11-21 18:20 ` Jonathan Cameron
2024-11-22 22:42 ` Dave Jiang
2024-12-06 5:32 ` Dan Williams
2024-12-06 18:39 ` Dave Jiang
2024-12-09 13:32 ` Jason Gunthorpe
2024-11-15 21:25 ` [RFC PATCH v2 12/20] cxl: Save Command Effects Log (CEL) effects for enabled commands Dave Jiang
2024-11-21 18:22 ` Jonathan Cameron
2024-11-15 21:25 ` [RFC PATCH v2 13/20] fwctl/cxl: Add hw_info callback Dave Jiang
2024-11-21 18:26 ` Jonathan Cameron
2024-12-06 5:40 ` Dan Williams
2024-11-15 21:25 ` [RFC PATCH v2 14/20] cxl: Move defines and error codes from cxlmem.h to cxl/mailbox.h Dave Jiang
2024-11-21 18:31 ` Jonathan Cameron
2024-12-06 5:50 ` Dan Williams
2024-11-15 21:25 ` [RFC PATCH v2 15/20] fwctl/cxl: Add support for fwctl RPC command to enable CXL feature commands Dave Jiang
2024-11-20 18:42 ` Jason Gunthorpe
2024-11-22 14:49 ` Jonathan Cameron
2024-12-06 6:13 ` Dan Williams
2024-11-15 21:25 ` [RFC PATCH v2 16/20] fwctl/cxl: Add support to filter exclusive features Dave Jiang
2024-11-22 15:05 ` Jonathan Cameron [this message]
2024-12-03 18:06 ` Dave Jiang
2024-11-15 21:25 ` [RFC PATCH v2 17/20] cxl/test: Add Get Feature support to cxl_test Dave Jiang
2024-11-22 15:19 ` Jonathan Cameron
2024-11-15 21:25 ` [RFC PATCH v2 18/20] cxl/test: Add Set " Dave Jiang
2024-11-22 15:20 ` Jonathan Cameron
2024-11-15 21:25 ` [RFC PATCH v2 19/20] fwctl: Move fwctl documentation to its own directory Dave Jiang
2024-11-20 17:52 ` Jason Gunthorpe
2024-11-15 21:25 ` [RFC PATCH v2 20/20] fwctl/cxl: Add documentation to FWCTL CXL Dave Jiang
2024-11-22 15:26 ` Jonathan Cameron
2024-12-03 21:07 ` Dave Jiang
2024-12-06 21:10 ` Dan Williams
2024-11-20 18:57 ` [RFC PATCH v2 0/20] fwctl/cxl: Add CXL feature commands support via fwctl Jason Gunthorpe
2024-11-21 18:38 ` Jonathan Cameron
2025-01-21 20:30 ` Jason Gunthorpe
2025-01-21 20:34 ` Dave Jiang
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=20241122150546.00004b18@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=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