[PATCH] nvme: convert little endian NVME definitions to native format

Tokunori Ikegami ikegami.t at gmail.com
Mon Sep 16 09:41:07 PDT 2024


For example the definition below is not native byte order I think.
     NVME_CTRL_ONCS_TIMESTAMP        = 1 << 6,

On 2024/09/17 1:12, Caleb Sander wrote:
> Why is this necessary? All these values obtained from the Identify
> Controller data structure are already stored in the CPU's native byte
> order. So testing them against native byte order constants looks
> correct.
>
> ctrl->oacs = le16_to_cpu(id->oacs);
> ctrl->oncs = le16_to_cpu(id->oncs);
> ctrl->mtfa = le16_to_cpu(id->mtfa);
> ctrl->oaes = le32_to_cpu(id->oaes);
> // ...
> ctrl->ctratt = le32_to_cpu(id->ctratt);
>
> On Mon, Sep 16, 2024 at 8:46 AM Tokunori Ikegami <ikegami.t at gmail.com> wrote:
>> This is to compare the definitions correctly with the converted values.
>>
>> Signed-off-by: Tokunori Ikegami <ikegami.t at gmail.com>
>> ---
>>   drivers/nvme/host/core.c | 20 ++++++++++----------
>>   drivers/nvme/host/nvme.h |  4 ++--
>>   drivers/nvme/host/pci.c  |  2 +-
>>   3 files changed, 13 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
>> index ca9959a8fb9e..5e26546e811a 100644
>> --- a/drivers/nvme/host/core.c
>> +++ b/drivers/nvme/host/core.c
>> @@ -1273,7 +1273,7 @@ static unsigned long nvme_keep_alive_work_period(struct nvme_ctrl *ctrl)
>>           * command completion can postpone sending a keep alive command
>>           * by up to twice the delay between runs.
>>           */
>> -       if (ctrl->ctratt & NVME_CTRL_ATTR_TBKAS)
>> +       if (ctrl->ctratt & le32_to_cpu(NVME_CTRL_ATTR_TBKAS))
>>                  delay /= 2;
>>          return delay;
>>   }
>> @@ -1343,7 +1343,7 @@ static void nvme_keep_alive_work(struct work_struct *work)
>>
>>          ctrl->ka_last_check_time = jiffies;
>>
>> -       if ((ctrl->ctratt & NVME_CTRL_ATTR_TBKAS) && comp_seen) {
>> +       if ((ctrl->ctratt & le32_to_cpu(NVME_CTRL_ATTR_TBKAS)) && comp_seen) {
>>                  dev_dbg(ctrl->device,
>>                          "reschedule traffic based keep-alive timer\n");
>>                  ctrl->comp_seen = false;
>> @@ -1699,7 +1699,7 @@ EXPORT_SYMBOL_GPL(nvme_set_queue_count);
>>
>>   static void nvme_enable_aen(struct nvme_ctrl *ctrl)
>>   {
>> -       u32 result, supported_aens = ctrl->oaes & NVME_AEN_SUPPORTED;
>> +       u32 result, supported_aens = ctrl->oaes & le32_to_cpu(NVME_AEN_SUPPORTED);
>>          int status;
>>
>>          if (!supported_aens)
>> @@ -1829,7 +1829,7 @@ static void nvme_config_discard(struct nvme_ns *ns, struct queue_limits *lim)
>>          if (ctrl->dmrsl && ctrl->dmrsl <= nvme_sect_to_lba(ns->head, UINT_MAX))
>>                  lim->max_hw_discard_sectors =
>>                          nvme_lba_to_sect(ns->head, ctrl->dmrsl);
>> -       else if (ctrl->oncs & NVME_CTRL_ONCS_DSM)
>> +       else if (ctrl->oncs & le16_to_cpu(NVME_CTRL_ONCS_DSM))
>>                  lim->max_hw_discard_sectors = UINT_MAX;
>>          else
>>                  lim->max_hw_discard_sectors = 0;
>> @@ -1913,7 +1913,7 @@ static void nvme_configure_metadata(struct nvme_ctrl *ctrl,
>>          if (!head->ms || !(ctrl->ops->flags & NVME_F_METADATA_SUPPORTED))
>>                  return;
>>
>> -       if (nvm && (ctrl->ctratt & NVME_CTRL_ATTR_ELBAS)) {
>> +       if (nvm && (ctrl->ctratt & le32_to_cpu(NVME_CTRL_ATTR_ELBAS))) {
>>                  nvme_configure_pi_elbas(head, id, nvm);
>>          } else {
>>                  head->pi_size = sizeof(struct t10_pi_tuple);
>> @@ -2137,7 +2137,7 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,
>>          }
>>          lbaf = nvme_lbaf_index(id->flbas);
>>
>> -       if (ns->ctrl->ctratt & NVME_CTRL_ATTR_ELBAS) {
>> +       if (ns->ctrl->ctratt & le32_to_cpu(NVME_CTRL_ATTR_ELBAS)) {
>>                  ret = nvme_identify_ns_nvm(ns->ctrl, info->nsid, &nvm);
>>                  if (ret < 0)
>>                          goto out;
>> @@ -2341,7 +2341,7 @@ static int nvme_sec_submit(void *data, u16 spsp, u8 secp, void *buffer, size_t l
>>
>>   static void nvme_configure_opal(struct nvme_ctrl *ctrl, bool was_suspended)
>>   {
>> -       if (ctrl->oacs & NVME_CTRL_OACS_SEC_SUPP) {
>> +       if (ctrl->oacs & le16_to_cpu(NVME_CTRL_OACS_SEC_SUPP)) {
>>                  if (!ctrl->opal_dev)
>>                          ctrl->opal_dev = init_opal_dev(ctrl, &nvme_sec_submit);
>>                  else if (was_suspended)
>> @@ -2520,7 +2520,7 @@ static int nvme_configure_timestamp(struct nvme_ctrl *ctrl)
>>          __le64 ts;
>>          int ret;
>>
>> -       if (!(ctrl->oncs & NVME_CTRL_ONCS_TIMESTAMP))
>> +       if (!(ctrl->oncs & le16_to_cpu(NVME_CTRL_ONCS_TIMESTAMP)))
>>                  return 0;
>>
>>          ts = cpu_to_le64(ktime_to_ms(ktime_get_real()));
>> @@ -2541,7 +2541,7 @@ static int nvme_configure_host_options(struct nvme_ctrl *ctrl)
>>          /* Don't bother enabling the feature if retry delay is not reported */
>>          if (ctrl->crdt[0])
>>                  acre = NVME_ENABLE_ACRE;
>> -       if (ctrl->ctratt & NVME_CTRL_ATTR_ELBAS)
>> +       if (ctrl->ctratt & le32_to_cpu(NVME_CTRL_ATTR_ELBAS))
>>                  lbafee = NVME_ENABLE_LBAFEE;
>>
>>          if (!acre && !lbafee)
>> @@ -3109,7 +3109,7 @@ static int nvme_init_non_mdts_limits(struct nvme_ctrl *ctrl)
>>           * controllers max_hw_sectors value, which is based on the MDTS field
>>           * and possibly other limiting factors.
>>           */
>> -       if ((ctrl->oncs & NVME_CTRL_ONCS_WRITE_ZEROES) &&
>> +       if ((ctrl->oncs & le16_to_cpu(NVME_CTRL_ONCS_WRITE_ZEROES)) &&
>>              !(ctrl->quirks & NVME_QUIRK_DISABLE_WRITE_ZEROES))
>>                  ctrl->max_zeroes_sectors = ctrl->max_hw_sectors;
>>          else
>> diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
>> index 313a4f978a2c..25886b9d2796 100644
>> --- a/drivers/nvme/host/nvme.h
>> +++ b/drivers/nvme/host/nvme.h
>> @@ -860,9 +860,9 @@ static inline bool nvme_is_unique_nsid(struct nvme_ctrl *ctrl,
>>                  struct nvme_ns_head *head)
>>   {
>>          return head->shared ||
>> -               (ctrl->oacs & NVME_CTRL_OACS_NS_MNGT_SUPP) ||
>> +               (ctrl->oacs & le16_to_cpu(NVME_CTRL_OACS_NS_MNGT_SUPP)) ||
>>                  (ctrl->subsys->cmic & NVME_CTRL_CMIC_ANA) ||
>> -               (ctrl->ctratt & NVME_CTRL_CTRATT_NVM_SETS);
>> +               (ctrl->ctratt & le32_to_cpu(NVME_CTRL_CTRATT_NVM_SETS));
>>   }
>>
>>   /*
>> diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
>> index 7990c3f22ecf..f8fa424fa952 100644
>> --- a/drivers/nvme/host/pci.c
>> +++ b/drivers/nvme/host/pci.c
>> @@ -249,7 +249,7 @@ static void nvme_dbbuf_dma_alloc(struct nvme_dev *dev)
>>   {
>>          unsigned int mem_size = nvme_dbbuf_size(dev);
>>
>> -       if (!(dev->ctrl.oacs & NVME_CTRL_OACS_DBBUF_SUPP))
>> +       if (!(dev->ctrl.oacs & le16_to_cpu(NVME_CTRL_OACS_DBBUF_SUPP)))
>>                  return;
>>
>>          if (dev->dbbuf_dbs) {
>> --
>> 2.43.0
>>
>>



More information about the Linux-nvme mailing list