Re: [PATCH v4 2/5] scsi: hisi_sas: Relocate some code to reduce complexity

From: John Garry
Date: Thu Dec 06 2018 - 10:38:03 EST


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