From: Milan Broz <gmazyland@gmail.com>
To: Ondrej Kozina <okozina@redhat.com>, linux-block@vger.kernel.org
Cc: gjoyce@ibm.com, jonathan.derrick@linux.dev
Subject: Re: [PATCH 1/6] sed-opal: add IOC_OPAL_REACTIVATE_LSP.
Date: Thu, 5 Feb 2026 11:53:05 +0100 [thread overview]
Message-ID: <c3f45132-de87-4c22-a189-c753a85074dc@gmail.com> (raw)
In-Reply-To: <20260130162527.570255-2-okozina@redhat.com>
On 1/30/26 5:25 PM, Ondrej Kozina wrote:
> This adds the 'Reactivate' method as described in the
> "TCG Storage Opal SSC Feature Set: Single User Mode"
> document (ch. 3.1.1.1).
>
> The method enables switching an already active SED OPAL2 device,
> with appropriate firmware support for Single User Mode (SUM),
> to or from SUM.
>
> Signed-off-by: Ondrej Kozina <okozina@redhat.com>
> ---
> block/opal_proto.h | 4 ++
> block/sed-opal.c | 91 +++++++++++++++++++++++++++++++++++
> include/linux/sed-opal.h | 1 +
> include/uapi/linux/sed-opal.h | 14 ++++++
> 4 files changed, 110 insertions(+)
>
> diff --git a/block/opal_proto.h b/block/opal_proto.h
> index d247a457bf6e..d138785b8198 100644
> --- a/block/opal_proto.h
> +++ b/block/opal_proto.h
> @@ -125,6 +125,7 @@ enum opal_uid {
> OPAL_LOCKING_INFO_TABLE,
> OPAL_ENTERPRISE_LOCKING_INFO_TABLE,
> OPAL_DATASTORE,
> + OPAL_LOCKING_TABLE,
This addition should be mentioned in commit messages.
Perhaps separate new UID definitions to another patch.
> @@ -2287,6 +2291,64 @@ static int activate_lsp(struct opal_dev *dev, void *data)
> return finalize_and_send(dev, parse_and_check_status);
> }
>
> +static int reactivate_lsp(struct opal_dev *dev, void *data)
> +{
> + struct opal_lr_react *opal_react = data;
> + u8 user_lr[OPAL_UID_LENGTH];
> + int err, i;
> +
> + err = cmd_start(dev, opaluid[OPAL_THISSP_UID],
> + opalmethod[OPAL_REACTIVATE]);
> +
> + if (err) {
> + pr_debug("Error building Reactivate LockingSP command.\n");
> + return err;
> + }
> +
Hera I would add comment describing which variants it implement
- set SUM for whole locking table (no list)
- set SUM for separate LRs
and how it differs.
> + if (opal_react->entire_table) {
> + add_token_u8(&err, dev, OPAL_STARTNAME);
> + add_token_u64(&err, dev, OPAL_SUM_SET_LIST);
> + add_token_bytestring(&err, dev, opaluid[OPAL_LOCKING_TABLE], OPAL_UID_LENGTH);
> + add_token_u8(&err, dev, OPAL_ENDNAME);
> + } else if (opal_react->num_lrs) {
> + err = build_locking_range(user_lr, sizeof(user_lr),
> + opal_react->lr[0]);
> + if (err)
> + return err;
> +
> + add_token_u8(&err, dev, OPAL_STARTNAME);
> + add_token_u64(&err, dev, OPAL_SUM_SET_LIST);
> +
> + add_token_u8(&err, dev, OPAL_STARTLIST);
> + add_token_bytestring(&err, dev, user_lr, OPAL_UID_LENGTH);
> + for (i = 1; i < opal_react->num_lrs; i++) {
> + user_lr[7] = opal_react->lr[i];
> + add_token_bytestring(&err, dev, user_lr, OPAL_UID_LENGTH);
> + }
> + add_token_u8(&err, dev, OPAL_ENDLIST);
> +
Remove empty line here?
> + add_token_u8(&err, dev, OPAL_ENDNAME);
> + }
> +
> + /* Skipping the rangle policy parameter is same as setting its value to zero */
> + if (opal_react->range_policy && (opal_react->num_lrs || opal_react->entire_table)) {
> + add_token_u8(&err, dev, OPAL_STARTNAME);
> + add_token_u64(&err, dev, OPAL_SUM_RANGE_POLICY);
> + add_token_u8(&err, dev, 1);
> + add_token_u8(&err, dev, OPAL_ENDNAME);
> + }
> +
This is optional, if not set, admin key remains unchanged. Add comment?
> + if (opal_react->new_admin_key.key_len) {
> + add_token_u8(&err, dev, OPAL_STARTNAME);
> + add_token_u64(&err, dev, OPAL_SUM_ADMIN1_PIN);
> + add_token_bytestring(&err, dev, opal_react->new_admin_key.key,
> + opal_react->new_admin_key.key_len);
> + add_token_u8(&err, dev, OPAL_ENDNAME);
> + }
...
Otherwise looks good.
Milan
p.s.
I implemented similar code in userspace for opal-toolset and tested on several drives.
Original sedutils do not implement SUM / reactivate at all.
That said, there are many drives that have broken SUM implementation... but I am pretty
sure the construction above is according to TCG standard.
next prev parent reply other threads:[~2026-02-05 10:53 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-30 16:25 [PATCH 0/6] Extend Single User Mode (SUM) support in sed-opal Ondrej Kozina
2026-01-30 16:25 ` [PATCH 1/6] sed-opal: add IOC_OPAL_REACTIVATE_LSP Ondrej Kozina
2026-02-02 23:17 ` Hannes Reinecke
2026-02-05 10:53 ` Milan Broz [this message]
2026-01-30 16:25 ` [PATCH 2/6] sed-opal: refactor (split) IOC_OPAL_LR_SETUP internals Ondrej Kozina
2026-01-30 16:25 ` [PATCH 3/6] sed-opal: add IOC_OPAL_LR_SET_START_LEN ioctl Ondrej Kozina
2026-01-30 16:25 ` [PATCH 4/6] sed-opal: add IOC_OPAL_ENABLE_DISABLE_LR Ondrej Kozina
2026-01-30 16:25 ` [PATCH 5/6] sed-opal: increase column attribute type size to 64 bits Ondrej Kozina
2026-01-30 16:25 ` [PATCH 6/6] sed-opal: add IOC_OPAL_GET_SUM_STATUS ioctl Ondrej Kozina
2026-02-05 10:58 ` Milan Broz
2026-02-05 11:03 ` [PATCH 0/6] Extend Single User Mode (SUM) support in sed-opal Milan Broz
2026-02-05 15:09 ` [PATCH v2 0/9] " Ondrej Kozina
2026-02-06 14:17 ` [PATCH v3 " Ondrej Kozina
2026-02-26 13:47 ` Ondrej Kozina
2026-02-26 15:34 ` Jens Axboe
2026-02-26 15:41 ` Jens Axboe
2026-02-06 14:17 ` [PATCH v3 1/9] sed-opal: add UID of Locking Table Ondrej Kozina
2026-02-06 15:30 ` Milan Broz
2026-02-06 14:17 ` [PATCH v3 2/9] sed-opal: add RangeStartRangeLengthPolicy parameter Ondrej Kozina
2026-02-06 15:31 ` Milan Broz
2026-02-06 14:17 ` [PATCH v3 3/9] sed-opal: add Admin1PIN parameter Ondrej Kozina
2026-02-06 15:31 ` Milan Broz
2026-02-06 14:17 ` [PATCH v3 4/9] sed-opal: add IOC_OPAL_REACTIVATE_LSP Ondrej Kozina
2026-02-06 15:32 ` Milan Broz
2026-02-06 14:17 ` [PATCH v3 5/9] sed-opal: refactor (split) IOC_OPAL_LR_SETUP internals Ondrej Kozina
2026-02-06 15:33 ` Milan Broz
2026-02-06 14:18 ` [PATCH v3 6/9] sed-opal: add IOC_OPAL_LR_SET_START_LEN ioctl Ondrej Kozina
2026-02-06 15:34 ` Milan Broz
2026-02-06 14:18 ` [PATCH v3 7/9] sed-opal: add IOC_OPAL_ENABLE_DISABLE_LR Ondrej Kozina
2026-02-06 15:35 ` Milan Broz
2026-02-06 14:18 ` [PATCH v3 8/9] sed-opal: increase column attribute type size to 64 bits Ondrej Kozina
2026-02-06 15:35 ` Milan Broz
2026-02-06 14:18 ` [PATCH v3 9/9] sed-opal: add IOC_OPAL_GET_SUM_STATUS ioctl Ondrej Kozina
2026-02-06 15:36 ` Milan Broz
2026-02-05 15:09 ` [PATCH v2 1/9] sed-opal: add UID of Locking Table Ondrej Kozina
2026-02-06 0:04 ` Hannes Reinecke
2026-02-05 15:09 ` [PATCH v2 2/9] sed-opal: add RangeStartRangeLengthPolicy parameter Ondrej Kozina
2026-02-06 0:05 ` Hannes Reinecke
2026-02-05 15:09 ` [PATCH v2 3/9] sed-opal: add Admin1PIN parameter Ondrej Kozina
2026-02-06 0:06 ` Hannes Reinecke
2026-02-05 15:09 ` [PATCH v2 4/9] sed-opal: add IOC_OPAL_REACTIVATE_LSP Ondrej Kozina
2026-02-06 0:08 ` Hannes Reinecke
2026-02-05 15:09 ` [PATCH v2 5/9] sed-opal: refactor (split) IOC_OPAL_LR_SETUP internals Ondrej Kozina
2026-02-05 15:09 ` [PATCH v2 6/9] sed-opal: add IOC_OPAL_LR_SET_START_LEN ioctl Ondrej Kozina
2026-02-05 15:09 ` [PATCH v2 7/9] sed-opal: add IOC_OPAL_ENABLE_DISABLE_LR Ondrej Kozina
2026-02-05 15:09 ` [PATCH v2 8/9] sed-opal: increase column attribute type size to 64 bits Ondrej Kozina
2026-02-05 15:09 ` [PATCH v2 9/9] sed-opal: add IOC_OPAL_GET_SUM_STATUS ioctl Ondrej Kozina
2026-02-06 9:05 ` Milan Broz
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=c3f45132-de87-4c22-a189-c753a85074dc@gmail.com \
--to=gmazyland@gmail.com \
--cc=gjoyce@ibm.com \
--cc=jonathan.derrick@linux.dev \
--cc=linux-block@vger.kernel.org \
--cc=okozina@redhat.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