> > + 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.