From: ajay.opensrc <ajay.opensrc@micron.com>
To: Davidlohr Bueso <dave@stgolabs.net>
Cc: "Jonathan.Cameron@Huawei.com" <Jonathan.Cameron@Huawei.com>,
"linux-cxl@vger.kernel.org" <linux-cxl@vger.kernel.org>,
"john@jagalactic.com" <john@jagalactic.com>,
Eishan Mirakhur <emirakhur@micron.com>,
Ajay Joshi <ajayjoshi@micron.com>,
"Srinivasulu Thanneeru" <sthanneeru@micron.com>,
Ravis OpenSrc <Ravis.OpenSrc@micron.com>,
Aravind Ramesh <arramesh@micron.com>,
"Tushar M Mulgund ." <tmmulgund@micron.com>
Subject: Re: [EXT] Re: [PATCH] hw/cxl: Add support for abort of background operation
Date: Fri, 2 Aug 2024 13:04:57 +0000 [thread overview]
Message-ID: <027f6872f7ae42c4ba97ed1209e50253@micron.com> (raw)
In-Reply-To: <jvbuxqaqjclc5cy5veltygpo4dg3naej456gvphndpdc3ttyoa@p64fmecqr67r>
>From: Davidlohr Bueso <dave@stgolabs.net>
>>From: Ajay Joshi <ajay.opensrc@micron.com>
>>
>>This patch adds the support for aborting the background
>>operation if one is progress(r3.1 8.2.9.1.5)
>>
>>"Request Abort Background Operation" command is requested
>>by the host to cancel an ongoing background operation. When
>>the command is sent, the device will abort the ongoing
>>background operation. When the operation is aborted,
>>background command status register will maintain a completion
>>percentage value of less then 100. The "Request Abort
>>Background Operation" command support has to be advertised in
>>the Command Effects Log to be honoured.
>
>So I had a patch for this which I had not sent out, and compared
>to this one I think the below is more robust, would you mind
>testing this out?
Didn't realize you were working on one already.
This looks good to me as well. I tested this and it seems to be
working as expected. Feel free to use:
Tested-by: Ajay Joshi <ajay.opensrc@micron.com>
Reviewed-by: Ajay Joshi <ajay.opensrc@micron.com>
>Thanks,
>Davidlohr
>
>--8<--------
>[PATCH] hw/cxl: Support aborting background commands
>
>As of 3.1 spec, background commands can be canceled with a new
>abort command. Implement the support, which is advertised in
>the CEL. No ad-hoc context undoing is necessary as all the
>command logic of the running bg command is done upon completion.
>
>Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
>---
> hw/cxl/cxl-device-utils.c | 2 +-
> hw/cxl/cxl-mailbox-utils.c | 39 ++++++++++++++++++++++++++++++++++--
> include/hw/cxl/cxl_device.h | 1 +
> include/hw/cxl/cxl_mailbox.h | 1 +
> 4 files changed, 40 insertions(+), 3 deletions(-)
>
>diff --git a/hw/cxl/cxl-device-utils.c b/hw/cxl/cxl-device-utils.c
>index 035d034f6dd8..4f4ccfa92d82 100644
>--- a/hw/cxl/cxl-device-utils.c
>+++ b/hw/cxl/cxl-device-utils.c
>@@ -95,7 +95,7 @@ static uint64_t mailbox_reg_read(void *opaque, hwaddr offset, >unsigned size)
> }
> if (offset == A_CXL_DEV_MAILBOX_STS) {
> uint64_t status_reg = cxl_dstate->mbox_reg_state64[offset / size];
>- if (cci->bg.complete_pct) {
>+ if (cci->bg.complete_pct || cci->bg.aborted) {
> status_reg = FIELD_DP64(status_reg, CXL_DEV_MAILBOX_STS, BG_OP,
> 0);
> cxl_dstate->mbox_reg_state64[offset / size] = status_reg;
>diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c
>index 80a80f1ec29b..ae4b3cabbb86 100644
>--- a/hw/cxl/cxl-mailbox-utils.c
>+++ b/hw/cxl/cxl-mailbox-utils.c
>@@ -53,6 +53,7 @@ enum {
> INFOSTAT = 0x00,
> #define IS_IDENTIFY 0x1
> #define BACKGROUND_OPERATION_STATUS 0x2
>+ #define BACKGROUND_OPERATION_ABORT 0x5
> EVENTS = 0x01,
> #define GET_RECORDS 0x0
> #define CLEAR_RECORDS 0x1
>@@ -815,6 +816,33 @@ static CXLRetCode cmd_infostat_bg_op_sts(const struct >cxl_cmd *cmd,
> return CXL_MBOX_SUCCESS;
> }
>
>+/* CXL r3.1 Section 8.2.9.1.5: Request Abort Background Operation (Opcode >0005h) */
>+static CXLRetCode cmd_infostat_bg_op_abort(const struct cxl_cmd *cmd,
>+ uint8_t *payload_in,
>+ size_t len_in,
>+ uint8_t *payload_out,
>+ size_t *len_out,
>+ CXLCCI *cci)
>+{
>+ int bg_set = cci->bg.opcode >> 8;
>+ int bg_cmd = cci->bg.opcode & 0xff;
>+ const struct cxl_cmd *bg_c = &cci->cxl_cmd_set[bg_set][bg_cmd];
>+
>+ if (!(bg_c->effect & CXL_MBOX_BACKGROUND_OPERATION_ABORT)) {
>+ return CXL_MBOX_REQUEST_ABORT_NOTSUP;
>+ }
>+
>+ if (cci->bg.runtime) {
>+ assert(cci->bg.complete_pct < 100);
>+ timer_del(cci->bg.timer);
>+ cci->bg.ret_code = CXL_MBOX_ABORTED;
>+ cci->bg.starttime = 0;
>+ cci->bg.runtime = 0;
>+ cci->bg.aborted = true;
>+ }
>+ return CXL_MBOX_SUCCESS;
>+}
>+
> /* CXL r3.1 Section 8.2.9.3.1: Get FW Info (Opcode 0200h) */
> static CXLRetCode cmd_firmware_update_get_info(const struct cxl_cmd *cmd,
> uint8_t *payload_in,
>@@ -2149,6 +2177,8 @@ static CXLRetCode cmd_dcd_release_dyn_cap(const struct >cxl_cmd *cmd,
> }
>
> static const struct cxl_cmd cxl_cmd_set[256][256] = {
>+ [INFOSTAT][BACKGROUND_OPERATION_ABORT] = { "BACKGROUND_OPERATION_ABORT",
>+ cmd_infostat_bg_op_abort, 0, 0 },
> [EVENTS][GET_RECORDS] = { "EVENTS_GET_RECORDS",
> cmd_events_get_records, 1, 0 },
> [EVENTS][CLEAR_RECORDS] = { "EVENTS_CLEAR_RECORDS",
>@@ -2176,7 +2206,7 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = {
> [SANITIZE][OVERWRITE] = { "SANITIZE_OVERWRITE", cmd_sanitize_overwrite, 0,
> (CXL_MBOX_IMMEDIATE_DATA_CHANGE |
> CXL_MBOX_SECURITY_STATE_CHANGE |
>- CXL_MBOX_BACKGROUND_OPERATION)},
>+ CXL_MBOX_BACKGROUND_OPERATION | >CXL_MBOX_BACKGROUND_OPERATION_ABORT)},
> [PERSISTENT_MEM][GET_SECURITY_STATE] = { "GET_SECURITY_STATE",
> cmd_get_security_state, 0, 0 },
> [MEDIA_AND_POISON][GET_POISON_LIST] = { >"MEDIA_AND_POISON_GET_POISON_LIST",
>@@ -2189,7 +2219,8 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = {
> "MEDIA_AND_POISON_GET_SCAN_MEDIA_CAPABILITIES",
> cmd_media_get_scan_media_capabilities, 16, 0 },
> [MEDIA_AND_POISON][SCAN_MEDIA] = { "MEDIA_AND_POISON_SCAN_MEDIA",
>- cmd_media_scan_media, 17, CXL_MBOX_BACKGROUND_OPERATION },
>+ cmd_media_scan_media, 17,
>+ CXL_MBOX_BACKGROUND_OPERATION | CXL_MBOX_BACKGROUND_OPERATION_ABORT},
> [MEDIA_AND_POISON][GET_SCAN_MEDIA_RESULTS] = {
> "MEDIA_AND_POISON_GET_SCAN_MEDIA_RESULTS",
> cmd_media_get_scan_media_results, 0, 0 },
>@@ -2214,6 +2245,8 @@ static const struct cxl_cmd cxl_cmd_set_sw[256][256] = {
> [INFOSTAT][IS_IDENTIFY] = { "IDENTIFY", cmd_infostat_identify, 0, 0 },
> [INFOSTAT][BACKGROUND_OPERATION_STATUS] = { "BACKGROUND_OPERATION_STATUS",
> cmd_infostat_bg_op_sts, 0, 0 },
>+ [INFOSTAT][BACKGROUND_OPERATION_ABORT] = { "BACKGROUND_OPERATION_ABORT",
>+ cmd_infostat_bg_op_abort, 0, 0 },
> [TIMESTAMP][GET] = { "TIMESTAMP_GET", cmd_timestamp_get, 0, 0 },
> [TIMESTAMP][SET] = { "TIMESTAMP_SET", cmd_timestamp_set, 8,
> CXL_MBOX_IMMEDIATE_POLICY_CHANGE },
>@@ -2295,6 +2328,7 @@ int cxl_process_cci_message(CXLCCI *cci, uint8_t set, >uint8_t cmd,
> cci->bg.opcode = (set << 8) | cmd;
>
> cci->bg.complete_pct = 0;
>+ cci->bg.aborted = false;
> cci->bg.ret_code = 0;
>
> now = qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL);
>@@ -2386,6 +2420,7 @@ void cxl_init_cci(CXLCCI *cci, size_t payload_max)
> cxl_rebuild_cel(cci);
>
> cci->bg.complete_pct = 0;
>+ cci->bg.aborted = false;
> cci->bg.starttime = 0;
> cci->bg.runtime = 0;
> cci->bg.timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,
>diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h
>index d38391b26f0e..d83b359e9994 100644
>--- a/include/hw/cxl/cxl_device.h
>+++ b/include/hw/cxl/cxl_device.h
>@@ -197,6 +197,7 @@ typedef struct CXLCCI {
> struct {
> uint16_t opcode;
> uint16_t complete_pct;
>+ bool aborted;
> uint16_t ret_code; /* Current value of retcode */
> uint64_t starttime;
> /* set by each bg cmd, cleared by the bg_timer when complete */
>diff --git a/include/hw/cxl/cxl_mailbox.h b/include/hw/cxl/cxl_mailbox.h
>index beb048052e1b..9008402d1c46 100644
>--- a/include/hw/cxl/cxl_mailbox.h
>+++ b/include/hw/cxl/cxl_mailbox.h
>@@ -14,5 +14,6 @@
> #define CXL_MBOX_IMMEDIATE_LOG_CHANGE (1 << 4)
> #define CXL_MBOX_SECURITY_STATE_CHANGE (1 << 5)
> #define CXL_MBOX_BACKGROUND_OPERATION (1 << 6)
>+#define CXL_MBOX_BACKGROUND_OPERATION_ABORT (1 << 7)
>
> #endif
>--
>2.44.0
next prev parent reply other threads:[~2024-08-02 13:05 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-29 10:20 [PATCH] hw/cxl: Add support for abort of background operation ajay.opensrc
2024-07-30 6:07 ` Davidlohr Bueso
2024-08-02 13:04 ` ajay.opensrc [this message]
2024-08-04 16:16 ` [EXT] " Jonathan Cameron
2024-08-07 9:04 ` ajay.opensrc
2024-08-12 20:04 ` Davidlohr Bueso
2024-08-15 17:04 ` Jonathan Cameron
2024-08-20 20:11 ` 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=027f6872f7ae42c4ba97ed1209e50253@micron.com \
--to=ajay.opensrc@micron.com \
--cc=Jonathan.Cameron@Huawei.com \
--cc=Ravis.OpenSrc@micron.com \
--cc=ajayjoshi@micron.com \
--cc=arramesh@micron.com \
--cc=dave@stgolabs.net \
--cc=emirakhur@micron.com \
--cc=john@jagalactic.com \
--cc=linux-cxl@vger.kernel.org \
--cc=sthanneeru@micron.com \
--cc=tmmulgund@micron.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