From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: <alison.schofield@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>,
Ira Weiny <ira.weiny@intel.com>,
Vishal Verma <vishal.l.verma@intel.com>,
"Ben Widawsky" <bwidawsk@kernel.org>,
Dave Jiang <dave.jiang@intel.com>, <linux-cxl@vger.kernel.org>
Subject: Re: [PATCH v2 3/6] tools/testing/cxl: Mock the Inject Poison mailbox command
Date: Mon, 23 Jan 2023 15:10:32 +0000 [thread overview]
Message-ID: <20230123151032.00003d06@Huawei.com> (raw)
In-Reply-To: <e7ee818cd52b702e69bca6cd2f07aa786245b88c.1674101475.git.alison.schofield@intel.com>
On Wed, 18 Jan 2023 21:00:18 -0800
alison.schofield@intel.com wrote:
> From: Alison Schofield <alison.schofield@intel.com>
>
> Mock the injection of poison by storing the device:address entries in
> mock_poison_list[]. Enforce a limit of 8 poison injections per memdev
> device and 128 total entries for the cxl_test mock driver.
>
> Introducing the mock_poison[] list here, makes it available for use in
> the mock of Clear Poison, and the mock of Get Poison List.
>
> Signed-off-by: Alison Schofield <alison.schofield@intel.com>
I'm not that keen on the global nature of the list, but maybe that's
enough for this test for now at least. Nothing stops us making it more
flexible later.
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
> tools/testing/cxl/test/mem.c | 77 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 77 insertions(+)
>
> diff --git a/tools/testing/cxl/test/mem.c b/tools/testing/cxl/test/mem.c
> index 09dc358bb33b..b0ecdc4e7c87 100644
> --- a/tools/testing/cxl/test/mem.c
> +++ b/tools/testing/cxl/test/mem.c
> @@ -14,6 +14,9 @@
> #define DEV_SIZE SZ_2G
> #define EFFECT(x) (1U << x)
>
> +#define MOCK_INJECT_DEV_MAX 8
> +#define MOCK_INJECT_TEST_MAX 128
> +
> static struct cxl_cel_entry mock_cel[] = {
> {
> .opcode = cpu_to_le16(CXL_MBOX_OP_GET_SUPPORTED_LOGS),
> @@ -43,6 +46,10 @@ static struct cxl_cel_entry mock_cel[] = {
> .opcode = cpu_to_le16(CXL_MBOX_OP_GET_POISON),
> .effect = cpu_to_le16(0),
> },
> + {
> + .opcode = cpu_to_le16(CXL_MBOX_OP_INJECT_POISON),
> + .effect = cpu_to_le16(0),
> + },
> };
>
> /* See CXL 2.0 Table 181 Get Health Info Output Payload */
> @@ -144,6 +151,7 @@ static int mock_id(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *cmd)
> cpu_to_le64(SZ_256M / CXL_CAPACITY_MULTIPLIER),
> .total_capacity =
> cpu_to_le64(DEV_SIZE / CXL_CAPACITY_MULTIPLIER),
> + .inject_poison_limit = cpu_to_le16(MOCK_INJECT_DEV_MAX),
> };
>
> put_unaligned_le24(CXL_POISON_LIST_MAX, id.poison_list_max_mer);
> @@ -565,6 +573,11 @@ static int mock_health_info(struct cxl_dev_state *cxlds,
> return 0;
> }
>
> +static struct mock_poison {
> + struct cxl_dev_state *cxlds;
> + u64 dpa;
> +} mock_poison_list[MOCK_INJECT_TEST_MAX];
> +
> static int mock_get_poison(struct cxl_dev_state *cxlds,
> struct cxl_mbox_cmd *cmd)
> {
> @@ -593,6 +606,67 @@ static int mock_get_poison(struct cxl_dev_state *cxlds,
> return 0;
> }
>
> +static bool mock_poison_dev_max_injected(struct cxl_dev_state *cxlds)
> +{
> + int count = 0;
> +
> + for (int i = 0; i < MOCK_INJECT_TEST_MAX; i++) {
> + if (mock_poison_list[i].cxlds == cxlds)
> + count++;
> + }
> + return (count >= MOCK_INJECT_DEV_MAX);
> +}
> +
> +static bool mock_poison_add(struct cxl_dev_state *cxlds, u64 dpa)
> +{
> + if (mock_poison_dev_max_injected(cxlds)) {
> + dev_dbg(cxlds->dev,
> + "Device poison injection limit has been reached: %d\n",
> + MOCK_INJECT_DEV_MAX);
> + return false;
> + }
> +
> + for (int i = 0; i < MOCK_INJECT_TEST_MAX; i++) {
> + if (!mock_poison_list[i].cxlds) {
> + mock_poison_list[i].cxlds = cxlds;
> + mock_poison_list[i].dpa = dpa;
> + return true;
> + }
> + }
> + dev_dbg(cxlds->dev,
> + "Mock test poison injection limit has been reached: %d\n",
> + MOCK_INJECT_TEST_MAX);
> +
> + return false;
> +}
> +
> +static bool mock_poison_found(struct cxl_dev_state *cxlds, u64 dpa)
> +{
> + for (int i = 0; i < MOCK_INJECT_TEST_MAX; i++) {
> + if (mock_poison_list[i].cxlds == cxlds &&
> + mock_poison_list[i].dpa == dpa)
> + return true;
> + }
> + return false;
> +}
> +
> +static int mock_inject_poison(struct cxl_dev_state *cxlds,
> + struct cxl_mbox_cmd *cmd)
> +{
> + struct cxl_mbox_inject_poison *pi = cmd->payload_in;
> + u64 dpa = le64_to_cpu(pi->address);
> +
> + if (mock_poison_found(cxlds, dpa)) {
> + /* Not an error to inject poison if already poisoned */
> + dev_dbg(cxlds->dev, "DPA: 0x%llx already poisoned\n", dpa);
> + return 0;
> + }
> + if (!mock_poison_add(cxlds, dpa))
> + return -ENXIO;
> +
> + return 0;
> +}
> +
> static int cxl_mock_mbox_send(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *cmd)
> {
> struct device *dev = cxlds->dev;
> @@ -644,6 +718,9 @@ static int cxl_mock_mbox_send(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *
> case CXL_MBOX_OP_GET_POISON:
> rc = mock_get_poison(cxlds, cmd);
> break;
> + case CXL_MBOX_OP_INJECT_POISON:
> + rc = mock_inject_poison(cxlds, cmd);
> + break;
> default:
> break;
> }
next prev parent reply other threads:[~2023-01-23 15:10 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-19 5:00 [PATCH v2 0/6] cxl: CXL Inject & Clear Poison alison.schofield
2023-01-19 5:00 ` [PATCH v2 1/6] cxl/memdev: Add support for the Inject Poison mailbox command alison.schofield
2023-01-27 23:06 ` Dan Williams
2023-01-28 2:47 ` Alison Schofield
2023-01-29 3:49 ` Dan Williams
2023-01-19 5:00 ` [PATCH v2 2/6] cxl/memdev: Add support for the Clear " alison.schofield
2023-01-27 23:56 ` Dan Williams
2023-01-28 1:17 ` Alison Schofield
2023-01-28 2:19 ` Dan Williams
2023-01-19 5:00 ` [PATCH v2 3/6] tools/testing/cxl: Mock the Inject " alison.schofield
2023-01-23 15:10 ` Jonathan Cameron [this message]
2023-01-24 0:06 ` Alison Schofield
2023-01-19 5:00 ` [PATCH v2 4/6] tools/testing/cxl: Mock the Clear " alison.schofield
2023-01-19 5:00 ` [PATCH v2 5/6] tools/testing/cxl: Use injected poison for get poison list alison.schofield
2023-01-23 15:16 ` Jonathan Cameron
2023-01-24 0:24 ` Alison Schofield
2023-01-24 10:15 ` Jonathan Cameron
2023-01-19 5:00 ` [PATCH v2 6/6] tools/testing/cxl: Add a param to test poison injection limits alison.schofield
2023-01-23 15:28 ` Jonathan Cameron
2023-01-23 23:57 ` Alison Schofield
2023-01-23 17:13 ` [PATCH v2 0/6] cxl: CXL Inject & Clear Poison Jonathan Cameron
2023-01-23 23:42 ` Alison Schofield
2023-01-24 10:21 ` 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=20230123151032.00003d06@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=alison.schofield@intel.com \
--cc=bwidawsk@kernel.org \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=ira.weiny@intel.com \
--cc=linux-cxl@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.