On 06/12/2018 14:17, Johannes Thumshirn wrote:
On 06/12/2018 14:34, John Garry wrote:
[...]
+static void hisi_sas_dma_unmap(struct hisi_hba *hisi_hba,
+                              struct sas_task *task, int n_elem,
+                              int n_elem_req, int n_elem_resp)
+{
+       struct device *dev = hisi_hba->dev;
+
+       if (!sas_protocol_ata(task->task_proto)) {
+               if (task->num_scatter) {
+                       if (n_elem)
+                               dma_unmap_sg(dev, task->scatter,
+                                            task->num_scatter,
+                                            task->data_dir);
+               } else if (task->task_proto & SAS_PROTOCOL_SMP) {
+                       if (n_elem_req)
+                               dma_unmap_sg(dev, &task->smp_task.smp_req,
+                                            1, DMA_TO_DEVICE);
+                       if (n_elem_resp)
+                               dma_unmap_sg(dev, &task->smp_task.smp_resp,
+                                            1, DMA_FROM_DEVICE);
+               }
+       }

        if (sas_protocol_ata(task->task_proto))
                return;

Would save you a level of indentation and make the above more readable.



Hi Johannes,

Whilst I agree with the idea, the current approach makes the function more symmetic with its mapping buddy, hisi_sas_dma_map():

static void hisi_sas_dma_unmap(struct hisi_hba *hisi_hba,
                   struct sas_task *task, int n_elem,
                   int n_elem_req, int n_elem_resp)
{
    struct device *dev = hisi_hba->dev;

    if (!sas_protocol_ata(task->task_proto)) {
        if (task->num_scatter) {
            if (n_elem)
                dma_unmap_sg(dev, task->scatter,

        ...
}

static int hisi_sas_dma_map(struct hisi_hba *hisi_hba,
                struct sas_task *task, int *n_elem,
                int *n_elem_req, int *n_elem_resp)
{
    struct device *dev = hisi_hba->dev;
    int rc;

    if (sas_protocol_ata(task->task_proto)) {
        *n_elem = task->num_scatter;
    } else {
        unsigned int req_len, resp_len;

        if (task->num_scatter) {
            *n_elem = dma_map_sg(dev, task->scatter,
                         task->num_scatter, task->data_dir);
                ...

}

which is important. Let me know if you disagree and I can change it.

Thanks,
John


Reply via email to