> > +   lrbp->command_type = hba->ufs_version == UFSHCI_VERSION_10 ||
> > +                        hba->ufs_version == UFSHCI_VERSION_11 ?
> > +                        UTP_CMD_TYPE_DEV_MANAGE :
> > +                        UTP_CMD_TYPE_UFS_STORAGE;
> 
> I think a good old if/self or even a switch statement would be more
> descriptive here:
> 
>       switch (hba->ufs_version) {
>       case UFSHCI_VERSION_10:
>       case UFSHCI_VERSION_11:
>               lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE;
>               break;
>       default:
>               lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;
>               break;
>       }
> 
Done.

> > +   /* just copy the upiu request as it is */
> > +   memcpy(lrbp->ucd_req_ptr, req_upiu,
> GENERAL_UPIU_REQUEST_SIZE);
> > +
> > +   if (desc_buff && rw == WRITE) {
> > +           descp = (u8 *)lrbp->ucd_req_ptr +
> GENERAL_UPIU_REQUEST_SIZE;
> > +           memcpy(descp, desc_buff, *buff_len);
> > +           *buff_len = 0;
> > +   }
> 
> The GENERAL_UPIU_REQUEST_SIZE usage here looks odd.  Shouldn't we use
> data structure sizes an pointer arithmetics?  E.g.
> 
>       memcpy(lrbp->ucd_req_ptr, req_upiu, sizeof(*lrbp->ucd_req_ptr));
>       if (desc_buff && rw == WRITE) {
>               memcpy(lrbp->ucd_req_ptr + 1, desc_buff, *buff_len);
>               *buff_len = 0;
>       }
> 
> preferably with a comment explaining the weird overallocation of
> ucd_req_ptr over the declared data type in the existing driver.
Done.
This is also done elsewhere so will fix those as well in a different patch.

> 
> > +
> > +   hba->dev_cmd.complete = &wait;
> > +
> > +   /* Make sure descriptors are ready before ringing the doorbell */
> > +   wmb();
> > +   spin_lock_irqsave(hba->host->host_lock, flags);
> > +   ufshcd_send_command(hba, tag);
> 
> I think the above wmb() is taken care of by the writel() inside
> ufshcd_send_command.
Those barriers were added later (and the one in send_command() last),
explaining that there is a need to verify that the "..descriptors are
actually written to memory before ringing the doorbell..."

See for more details: 
ad1a1b9 scsi: ufs: commit descriptors before setting the doorbell
e3dfdc5 scsi: ufs: commit descriptors before setting the doorbell
897efe6 scsi: ufs: add missing memory barriers

> 
> > +   /* just copy the upiu response as it is */
> > +   memcpy(rsp_upiu, lrbp->ucd_rsp_ptr,
> GENERAL_UPIU_REQUEST_SIZE);
> 
> sizeof again.
Done.

Reply via email to