From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Davidlohr Bueso <dave@stgolabs.net>
Cc: <fan.ni@samsung.com>, <dan.j.williams@intel.com>,
<alison.schofield@intel.com>, <ayush.m55@samsung.com>,
<a.manzanares@samsung.com>, <linux-cxl@vger.kernel.org>
Subject: Re: [PATCH 2/4] hw/cxl: Add get scan media capabilities cmd support
Date: Tue, 12 Sep 2023 12:20:20 +0100 [thread overview]
Message-ID: <20230912122020.00007d28@Huawei.com> (raw)
In-Reply-To: <20230908073152.4386-3-dave@stgolabs.net>
On Fri, 8 Sep 2023 00:31:50 -0700
Davidlohr Bueso <dave@stgolabs.net> wrote:
> Use simple heuristics to determine the cost of scanning any given
> chunk, assuming cost is equal across the whole device, without
> differentiating between volatile or persistent partitions. This
> is aligned to the fact that these constraints are not enforced
> in respective poison query commands.
>
> Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
Looks good to me I'll queue this up on my gitlab tree for now
given it is dependent on the CCI rework at least.
I should figure out how to move that forward independent of
solving the question of how to provide the MCTP hosts adapters.
Still need the NVME series to land first though and seems that
has had some more feedback today.
I might shuffle the tree around to pull this ahead of DCD
(possibly carrying the rename of static_mem_size along with
it to simplify the rebase). I suspect this will be easier
to get upstream as it is short and sweet.
Jonathan
> ---
> hw/cxl/cxl-mailbox-utils.c | 53 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 53 insertions(+)
>
> diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c
> index 4e8651ebe2e9..3073222060ab 100644
> --- a/hw/cxl/cxl-mailbox-utils.c
> +++ b/hw/cxl/cxl-mailbox-utils.c
> @@ -80,6 +80,7 @@ enum {
> #define GET_POISON_LIST 0x0
> #define INJECT_POISON 0x1
> #define CLEAR_POISON 0x2
> + #define GET_SCAN_MEDIA_CAPABILITIES 0x3
> DCD_CONFIG = 0x48,
> #define GET_DC_CONFIG 0x0
> #define GET_DYN_CAP_EXT_LIST 0x1
> @@ -1174,6 +1175,56 @@ static CXLRetCode cmd_media_clear_poison(const struct cxl_cmd *cmd,
> return CXL_MBOX_SUCCESS;
> }
>
> +/*
> + * CXL r3.0 section 8.2.9.8.4.4: Get Scan Media Capabilities
> + */
> +static CXLRetCode
> +cmd_media_get_scan_media_capabilities(const struct cxl_cmd *cmd,
> + uint8_t *payload_in,
> + size_t len_in,
> + uint8_t *payload_out,
> + size_t *len_out,
> + CXLCCI *cci)
> +{
> + struct get_scan_media_capabilities_pl {
> + uint64_t pa;
> + uint64_t length;
> + } QEMU_PACKED;
> +
> + struct get_scan_media_capabilities_out_pl {
> + uint32_t estimated_runtime_ms;
> + } QEMU_PACKED;
> +
> + CXLType3Dev *ct3d = CXL_TYPE3(cci->d);
> + CXLDeviceState *cxl_dstate = &ct3d->cxl_dstate;
> + struct get_scan_media_capabilities_pl *in = (void *)payload_in;
> + struct get_scan_media_capabilities_out_pl *out = (void *)payload_out;
> + uint64_t query_start;
> + uint64_t query_length;
> +
> + query_start = ldq_le_p(&in->pa);
> + /* 64 byte alignment required */
> + if (query_start & 0x3f) {
> + return CXL_MBOX_INVALID_INPUT;
> + }
> + query_length = ldq_le_p(&in->length) * CXL_CACHE_LINE_SIZE;
> +
> + if (query_start + query_length > cxl_dstate->static_mem_size) {
> + return CXL_MBOX_INVALID_PA;
> + }
> +
> + /*
> + * Just use 400 nanosecond access/read latency + 100 ns for
> + * the cost of updating the poison list. For small enough
> + * chunks return at least 1 ms.
> + */
> + stl_le_p(&out->estimated_runtime_ms,
> + MAX(1, query_length * (0.0005L/64)));
> +
> + *len_out = sizeof(*out);
> + return CXL_MBOX_SUCCESS;
> +}
> +
> /*
> * CXL r3.0 section 8.2.9.8.9.1: Dynamic Capacity Configuration
> */
> @@ -1602,6 +1653,8 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = {
> cmd_media_inject_poison, 8, 0 },
> [MEDIA_AND_POISON][CLEAR_POISON] = { "MEDIA_AND_POISON_CLEAR_POISON",
> cmd_media_clear_poison, 72, 0 },
> + [MEDIA_AND_POISON][GET_SCAN_MEDIA_CAPABILITIES] = { "MEDIA_AND_POISON_GET_SCAN_MEDIA_CAPABILITIES",
> + cmd_media_get_scan_media_capabilities, 16, 0 },
> };
>
> static const struct cxl_cmd cxl_cmd_set_dcd[256][256] = {
next prev parent reply other threads:[~2023-09-12 11:20 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-08 7:31 [PATCH -qemu 0/4] hw/cxl: Support for scan media Davidlohr Bueso
2023-09-08 7:31 ` [PATCH 1/4] cxl/type3: Fix crash in set_cacheline() Davidlohr Bueso
2023-09-08 18:37 ` Fan Ni
2023-09-12 10:59 ` Jonathan Cameron
2023-09-08 7:31 ` [PATCH 2/4] hw/cxl: Add get scan media capabilities cmd support Davidlohr Bueso
2023-09-08 18:47 ` Fan Ni
2023-09-08 19:44 ` Davidlohr Bueso
2023-09-12 11:20 ` Jonathan Cameron [this message]
2023-09-12 11:25 ` Jonathan Cameron
2023-09-08 7:31 ` [PATCH 3/4] hw/cxl: Add scan media " Davidlohr Bueso
2023-09-12 11:57 ` Jonathan Cameron
2023-09-13 3:47 ` Davidlohr Bueso
2023-09-08 7:31 ` [PATCH 4/4] hw/cxl: Add get scan media results " Davidlohr Bueso
2023-09-12 12:04 ` Jonathan Cameron
2023-09-13 3:33 ` Davidlohr Bueso
2023-09-13 13:30 ` Jonathan Cameron
2023-09-16 0:11 ` Davidlohr Bueso
2023-09-18 11:11 ` Jonathan Cameron
2023-09-18 16:58 ` 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=20230912122020.00007d28@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=a.manzanares@samsung.com \
--cc=alison.schofield@intel.com \
--cc=ayush.m55@samsung.com \
--cc=dan.j.williams@intel.com \
--cc=dave@stgolabs.net \
--cc=fan.ni@samsung.com \
--cc=linux-cxl@vger.kernel.org \
/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