[PATCH v2 1/1] nvme: disable CC.CRIME (NVME_CC_CRIME)
Nilay Shroff
nilay at linux.ibm.com
Tue Oct 8 08:45:45 PDT 2024
On 10/8/24 01:03, gjoyce at linux.ibm.com wrote:
> From: Greg Joyce <gjoyce at linux.ibm.com>
>
> Disable NVME_CC_CRIME so that CSTS.RDY indicates that the media
> is ready and able to handle commands without returning
> NVME_SC_ADMIN_COMMAND_MEDIA_NOT_READY.
>
> Signed-off-by: Greg Joyce <gjoyce at linux.ibm.com>
> ---
> drivers/nvme/host/core.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index ba6508455e18..10eca7660ca7 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -2458,8 +2458,13 @@ int nvme_enable_ctrl(struct nvme_ctrl *ctrl)
> else
> ctrl->ctrl_config = NVME_CC_CSS_NVM;
>
> - if (ctrl->cap & NVME_CAP_CRMS_CRWMS && ctrl->cap & NVME_CAP_CRMS_CRIMS)
> - ctrl->ctrl_config |= NVME_CC_CRIME;
> + /*
> + * Setting CRIME results in CSTS.RDY before the media is ready. This
> + * make it possible for media related commands to return the error
> + * NVME_SC_ADMIN_COMMAND_MEDIA_NOT_READY. Until the driver is
> + * restructurade to handle retries, disable CC.CRIME.
> + */
> + ctrl->ctrl_config &= ~NVME_CC_CRIME;
>
> ctrl->ctrl_config |= (NVME_CTRL_PAGE_SHIFT - 12) << NVME_CC_MPS_SHIFT;
> ctrl->ctrl_config |= NVME_CC_AMS_RR | NVME_CC_SHN_NONE;
> @@ -2489,10 +2494,7 @@ int nvme_enable_ctrl(struct nvme_ctrl *ctrl)
> * devices are known to get this wrong. Use the larger of the
> * two values.
> */
> - if (ctrl->ctrl_config & NVME_CC_CRIME)
> - ready_timeout = NVME_CRTO_CRIMT(crto);
> - else
> - ready_timeout = NVME_CRTO_CRWMT(crto);
> + ready_timeout = NVME_CRTO_CRWMT(crto);
>
> if (ready_timeout < timeout)
> dev_warn_once(ctrl->device, "bad crto:%x cap:%llx\n",
Looks good to me.
Reviewed-by: nilay at linux.ibm.com
Tested the above patch on Kioxia disk supporting TCG Opal SED. My test
confirmed that the patch works as expected and we don't see
NVME_SC_ADMIN_COMMAND_MEDIA_NOT_READY error during opal discovery or
any admin command executed during disk initialization.
Tested-by: nilay at linux.ibm.com
More information about the Linux-nvme
mailing list