From: Jonathan Derrick <jonathan.derrick@linux.dev>
To: gjoyce@linux.vnet.ibm.com, linux-block@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org, brking@linux.vnet.ibm.com,
msuchanek@suse.de, mpe@ellerman.id.au, nayna@linux.ibm.com,
axboe@kernel.dk, akpm@linux-foundation.org,
linux-efi@vger.kernel.org, keyrings@vger.kernel.org
Subject: Re: [PATCH v2 1/3 RESEND] block: sed-opal: Implement IOC_OPAL_DISCOVERY
Date: Fri, 7 Oct 2022 12:06:53 -0600 [thread overview]
Message-ID: <8a14cdb2-4de3-558f-e637-af80673c4cd9@linux.dev> (raw)
In-Reply-To: <20220818143045.680972-2-gjoyce@linux.vnet.ibm.com>
Useful. Thank you
Reviewed-by: Jonathan Derrick <jonathan.derrick@linux.dev>
On 8/18/2022 8:30 AM, gjoyce@linux.vnet.ibm.com wrote:
> From: Greg Joyce <gjoyce@linux.vnet.ibm.com>
>
> Add IOC_OPAL_DISCOVERY ioctl to return raw discovery data to a SED Opal
> application. This allows the application to display drive capabilities
> and state.
>
> Signed-off-by: Greg Joyce <gjoyce@linux.vnet.ibm.com>
> ---
> block/sed-opal.c | 38 ++++++++++++++++++++++++++++++++---
> include/linux/sed-opal.h | 1 +
> include/uapi/linux/sed-opal.h | 6 ++++++
> 3 files changed, 42 insertions(+), 3 deletions(-)
>
> diff --git a/block/sed-opal.c b/block/sed-opal.c
> index 9700197000f2..e4d8fbdc9dad 100644
> --- a/block/sed-opal.c
> +++ b/block/sed-opal.c
> @@ -426,8 +426,12 @@ static int execute_steps(struct opal_dev *dev,
> return error;
> }
>
> -static int opal_discovery0_end(struct opal_dev *dev)
> +static int opal_discovery0_end(struct opal_dev *dev, void *data)
> {
> + struct opal_discovery *discv_out = data; /* may be NULL */
> + u8 __user *buf_out;
> + u64 len_out;
> +
> bool found_com_id = false, supported = true, single_user = false;
> const struct d0_header *hdr = (struct d0_header *)dev->resp;
> const u8 *epos = dev->resp, *cpos = dev->resp;
> @@ -443,6 +447,15 @@ static int opal_discovery0_end(struct opal_dev *dev)
> return -EFAULT;
> }
>
> + if (discv_out) {
> + buf_out = (u8 __user *)(uintptr_t)discv_out->data;
> + len_out = min_t(u64, discv_out->size, hlen);
> + if (buf_out && copy_to_user(buf_out, dev->resp, len_out))
> + return -EFAULT;
> +
> + discv_out->size = hlen; /* actual size of data */
> + }
> +
> epos += hlen; /* end of buffer */
> cpos += sizeof(*hdr); /* current position on buffer */
>
> @@ -517,13 +530,13 @@ static int opal_discovery0(struct opal_dev *dev, void *data)
> if (ret)
> return ret;
>
> - return opal_discovery0_end(dev);
> + return opal_discovery0_end(dev, data);
> }
>
> static int opal_discovery0_step(struct opal_dev *dev)
> {
> const struct opal_step discovery0_step = {
> - opal_discovery0,
> + opal_discovery0, NULL
> };
>
> return execute_step(dev, &discovery0_step, 0);
> @@ -2179,6 +2192,22 @@ static int opal_secure_erase_locking_range(struct opal_dev *dev,
> return ret;
> }
>
> +static int opal_get_discv(struct opal_dev *dev, struct opal_discovery *discv)
> +{
> + const struct opal_step discovery0_step = {
> + opal_discovery0, discv
> + };
> + int ret = 0;
> +
> + mutex_lock(&dev->dev_lock);
> + setup_opal_dev(dev);
> + ret = execute_step(dev, &discovery0_step, 0);
> + mutex_unlock(&dev->dev_lock);
> + if (ret)
> + return ret;
> + return discv->size; /* modified to actual length of data */
> +}
> +
> static int opal_erase_locking_range(struct opal_dev *dev,
> struct opal_session_info *opal_session)
> {
> @@ -2685,6 +2714,9 @@ int sed_ioctl(struct opal_dev *dev, unsigned int cmd, void __user *arg)
> case IOC_OPAL_GENERIC_TABLE_RW:
> ret = opal_generic_read_write_table(dev, p);
> break;
> + case IOC_OPAL_DISCOVERY:
> + ret = opal_get_discv(dev, p);
> + break;
> default:
> break;
> }
> diff --git a/include/linux/sed-opal.h b/include/linux/sed-opal.h
> index 1ac0d712a9c3..9197b7a628f2 100644
> --- a/include/linux/sed-opal.h
> +++ b/include/linux/sed-opal.h
> @@ -43,6 +43,7 @@ static inline bool is_sed_ioctl(unsigned int cmd)
> case IOC_OPAL_MBR_DONE:
> case IOC_OPAL_WRITE_SHADOW_MBR:
> case IOC_OPAL_GENERIC_TABLE_RW:
> + case IOC_OPAL_DISCOVERY:
> return true;
> }
> return false;
> diff --git a/include/uapi/linux/sed-opal.h b/include/uapi/linux/sed-opal.h
> index 6f5af1a84213..89dd108b426f 100644
> --- a/include/uapi/linux/sed-opal.h
> +++ b/include/uapi/linux/sed-opal.h
> @@ -132,6 +132,11 @@ struct opal_read_write_table {
> __u64 priv;
> };
>
> +struct opal_discovery {
> + __u64 data;
> + __u64 size;
> +};
> +
> #define IOC_OPAL_SAVE _IOW('p', 220, struct opal_lock_unlock)
> #define IOC_OPAL_LOCK_UNLOCK _IOW('p', 221, struct opal_lock_unlock)
> #define IOC_OPAL_TAKE_OWNERSHIP _IOW('p', 222, struct opal_key)
> @@ -148,5 +153,6 @@ struct opal_read_write_table {
> #define IOC_OPAL_MBR_DONE _IOW('p', 233, struct opal_mbr_done)
> #define IOC_OPAL_WRITE_SHADOW_MBR _IOW('p', 234, struct opal_shadow_mbr)
> #define IOC_OPAL_GENERIC_TABLE_RW _IOW('p', 235, struct opal_read_write_table)
> +#define IOC_OPAL_DISCOVERY _IOW('p', 236, struct opal_discovery)
>
> #endif /* _UAPI_SED_OPAL_H */
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Derrick <jonathan.derrick@linux.dev>
To: gjoyce@linux.vnet.ibm.com, linux-block@vger.kernel.org
Cc: axboe@kernel.dk, linux-efi@vger.kernel.org, nayna@linux.ibm.com,
keyrings@vger.kernel.org, brking@linux.vnet.ibm.com,
akpm@linux-foundation.org, msuchanek@suse.de,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 1/3 RESEND] block: sed-opal: Implement IOC_OPAL_DISCOVERY
Date: Fri, 7 Oct 2022 12:06:53 -0600 [thread overview]
Message-ID: <8a14cdb2-4de3-558f-e637-af80673c4cd9@linux.dev> (raw)
In-Reply-To: <20220818143045.680972-2-gjoyce@linux.vnet.ibm.com>
Useful. Thank you
Reviewed-by: Jonathan Derrick <jonathan.derrick@linux.dev>
On 8/18/2022 8:30 AM, gjoyce@linux.vnet.ibm.com wrote:
> From: Greg Joyce <gjoyce@linux.vnet.ibm.com>
>
> Add IOC_OPAL_DISCOVERY ioctl to return raw discovery data to a SED Opal
> application. This allows the application to display drive capabilities
> and state.
>
> Signed-off-by: Greg Joyce <gjoyce@linux.vnet.ibm.com>
> ---
> block/sed-opal.c | 38 ++++++++++++++++++++++++++++++++---
> include/linux/sed-opal.h | 1 +
> include/uapi/linux/sed-opal.h | 6 ++++++
> 3 files changed, 42 insertions(+), 3 deletions(-)
>
> diff --git a/block/sed-opal.c b/block/sed-opal.c
> index 9700197000f2..e4d8fbdc9dad 100644
> --- a/block/sed-opal.c
> +++ b/block/sed-opal.c
> @@ -426,8 +426,12 @@ static int execute_steps(struct opal_dev *dev,
> return error;
> }
>
> -static int opal_discovery0_end(struct opal_dev *dev)
> +static int opal_discovery0_end(struct opal_dev *dev, void *data)
> {
> + struct opal_discovery *discv_out = data; /* may be NULL */
> + u8 __user *buf_out;
> + u64 len_out;
> +
> bool found_com_id = false, supported = true, single_user = false;
> const struct d0_header *hdr = (struct d0_header *)dev->resp;
> const u8 *epos = dev->resp, *cpos = dev->resp;
> @@ -443,6 +447,15 @@ static int opal_discovery0_end(struct opal_dev *dev)
> return -EFAULT;
> }
>
> + if (discv_out) {
> + buf_out = (u8 __user *)(uintptr_t)discv_out->data;
> + len_out = min_t(u64, discv_out->size, hlen);
> + if (buf_out && copy_to_user(buf_out, dev->resp, len_out))
> + return -EFAULT;
> +
> + discv_out->size = hlen; /* actual size of data */
> + }
> +
> epos += hlen; /* end of buffer */
> cpos += sizeof(*hdr); /* current position on buffer */
>
> @@ -517,13 +530,13 @@ static int opal_discovery0(struct opal_dev *dev, void *data)
> if (ret)
> return ret;
>
> - return opal_discovery0_end(dev);
> + return opal_discovery0_end(dev, data);
> }
>
> static int opal_discovery0_step(struct opal_dev *dev)
> {
> const struct opal_step discovery0_step = {
> - opal_discovery0,
> + opal_discovery0, NULL
> };
>
> return execute_step(dev, &discovery0_step, 0);
> @@ -2179,6 +2192,22 @@ static int opal_secure_erase_locking_range(struct opal_dev *dev,
> return ret;
> }
>
> +static int opal_get_discv(struct opal_dev *dev, struct opal_discovery *discv)
> +{
> + const struct opal_step discovery0_step = {
> + opal_discovery0, discv
> + };
> + int ret = 0;
> +
> + mutex_lock(&dev->dev_lock);
> + setup_opal_dev(dev);
> + ret = execute_step(dev, &discovery0_step, 0);
> + mutex_unlock(&dev->dev_lock);
> + if (ret)
> + return ret;
> + return discv->size; /* modified to actual length of data */
> +}
> +
> static int opal_erase_locking_range(struct opal_dev *dev,
> struct opal_session_info *opal_session)
> {
> @@ -2685,6 +2714,9 @@ int sed_ioctl(struct opal_dev *dev, unsigned int cmd, void __user *arg)
> case IOC_OPAL_GENERIC_TABLE_RW:
> ret = opal_generic_read_write_table(dev, p);
> break;
> + case IOC_OPAL_DISCOVERY:
> + ret = opal_get_discv(dev, p);
> + break;
> default:
> break;
> }
> diff --git a/include/linux/sed-opal.h b/include/linux/sed-opal.h
> index 1ac0d712a9c3..9197b7a628f2 100644
> --- a/include/linux/sed-opal.h
> +++ b/include/linux/sed-opal.h
> @@ -43,6 +43,7 @@ static inline bool is_sed_ioctl(unsigned int cmd)
> case IOC_OPAL_MBR_DONE:
> case IOC_OPAL_WRITE_SHADOW_MBR:
> case IOC_OPAL_GENERIC_TABLE_RW:
> + case IOC_OPAL_DISCOVERY:
> return true;
> }
> return false;
> diff --git a/include/uapi/linux/sed-opal.h b/include/uapi/linux/sed-opal.h
> index 6f5af1a84213..89dd108b426f 100644
> --- a/include/uapi/linux/sed-opal.h
> +++ b/include/uapi/linux/sed-opal.h
> @@ -132,6 +132,11 @@ struct opal_read_write_table {
> __u64 priv;
> };
>
> +struct opal_discovery {
> + __u64 data;
> + __u64 size;
> +};
> +
> #define IOC_OPAL_SAVE _IOW('p', 220, struct opal_lock_unlock)
> #define IOC_OPAL_LOCK_UNLOCK _IOW('p', 221, struct opal_lock_unlock)
> #define IOC_OPAL_TAKE_OWNERSHIP _IOW('p', 222, struct opal_key)
> @@ -148,5 +153,6 @@ struct opal_read_write_table {
> #define IOC_OPAL_MBR_DONE _IOW('p', 233, struct opal_mbr_done)
> #define IOC_OPAL_WRITE_SHADOW_MBR _IOW('p', 234, struct opal_shadow_mbr)
> #define IOC_OPAL_GENERIC_TABLE_RW _IOW('p', 235, struct opal_read_write_table)
> +#define IOC_OPAL_DISCOVERY _IOW('p', 236, struct opal_discovery)
>
> #endif /* _UAPI_SED_OPAL_H */
next prev parent reply other threads:[~2022-10-07 18:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-18 14:30 [PATCH v2 0/3 RESEND] sed-opal: keyrings, discovery, revert, key store gjoyce
2022-08-18 14:30 ` gjoyce
2022-08-18 14:30 ` [PATCH v2 1/3 RESEND] block: sed-opal: Implement IOC_OPAL_DISCOVERY gjoyce
2022-08-18 14:30 ` gjoyce
2022-10-07 18:06 ` Jonathan Derrick [this message]
2022-10-07 18:06 ` Jonathan Derrick
2022-08-18 14:30 ` [PATCH v2 2/3 RESEND] block: sed-opal: Implement IOC_OPAL_REVERT_LSP gjoyce
2022-08-18 14:30 ` gjoyce
2022-10-07 18:12 ` Jonathan Derrick
2022-10-07 18:12 ` Jonathan Derrick
2022-08-18 14:30 ` [PATCH v2 3/3 RESEND] block: sed-opal: keyring support for SED keys gjoyce
2022-08-18 14:30 ` gjoyce
2022-10-07 18:17 ` Jonathan Derrick
2022-10-07 18:17 ` Jonathan Derrick
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=8a14cdb2-4de3-558f-e637-af80673c4cd9@linux.dev \
--to=jonathan.derrick@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=axboe@kernel.dk \
--cc=brking@linux.vnet.ibm.com \
--cc=gjoyce@linux.vnet.ibm.com \
--cc=keyrings@vger.kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=msuchanek@suse.de \
--cc=nayna@linux.ibm.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.