[SCSI] libsas: trim sas_task of slow path infrastructure
The timer and the completion are only used for slow path tasks (smp, and lldd tmfs), yet we incur the allocation space and cpu setup time for every fast path task. Cc: Xiangliang Yu <yuxiangl@marvell.com> Acked-by: Jack Wang <jack_wang@usish.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
committed by
James Bottomley
parent
a494fd5bd9
commit
f0bf750c2d
@@ -650,9 +650,9 @@ int pm8001_dev_found(struct domain_device *dev)
|
||||
|
||||
static void pm8001_task_done(struct sas_task *task)
|
||||
{
|
||||
if (!del_timer(&task->timer))
|
||||
if (!del_timer(&task->slow_task->timer))
|
||||
return;
|
||||
complete(&task->completion);
|
||||
complete(&task->slow_task->completion);
|
||||
}
|
||||
|
||||
static void pm8001_tmf_timedout(unsigned long data)
|
||||
@@ -660,7 +660,7 @@ static void pm8001_tmf_timedout(unsigned long data)
|
||||
struct sas_task *task = (struct sas_task *)data;
|
||||
|
||||
task->task_state_flags |= SAS_TASK_STATE_ABORTED;
|
||||
complete(&task->completion);
|
||||
complete(&task->slow_task->completion);
|
||||
}
|
||||
|
||||
#define PM8001_TASK_TIMEOUT 20
|
||||
@@ -683,7 +683,7 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev,
|
||||
struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev);
|
||||
|
||||
for (retry = 0; retry < 3; retry++) {
|
||||
task = sas_alloc_task(GFP_KERNEL);
|
||||
task = sas_alloc_slow_task(GFP_KERNEL);
|
||||
if (!task)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -691,21 +691,21 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev,
|
||||
task->task_proto = dev->tproto;
|
||||
memcpy(&task->ssp_task, parameter, para_len);
|
||||
task->task_done = pm8001_task_done;
|
||||
task->timer.data = (unsigned long)task;
|
||||
task->timer.function = pm8001_tmf_timedout;
|
||||
task->timer.expires = jiffies + PM8001_TASK_TIMEOUT*HZ;
|
||||
add_timer(&task->timer);
|
||||
task->slow_task->timer.data = (unsigned long)task;
|
||||
task->slow_task->timer.function = pm8001_tmf_timedout;
|
||||
task->slow_task->timer.expires = jiffies + PM8001_TASK_TIMEOUT*HZ;
|
||||
add_timer(&task->slow_task->timer);
|
||||
|
||||
res = pm8001_task_exec(task, 1, GFP_KERNEL, 1, tmf);
|
||||
|
||||
if (res) {
|
||||
del_timer(&task->timer);
|
||||
del_timer(&task->slow_task->timer);
|
||||
PM8001_FAIL_DBG(pm8001_ha,
|
||||
pm8001_printk("Executing internal task "
|
||||
"failed\n"));
|
||||
goto ex_err;
|
||||
}
|
||||
wait_for_completion(&task->completion);
|
||||
wait_for_completion(&task->slow_task->completion);
|
||||
res = -TMF_RESP_FUNC_FAILED;
|
||||
/* Even TMF timed out, return direct. */
|
||||
if ((task->task_state_flags & SAS_TASK_STATE_ABORTED)) {
|
||||
@@ -765,17 +765,17 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
|
||||
struct sas_task *task = NULL;
|
||||
|
||||
for (retry = 0; retry < 3; retry++) {
|
||||
task = sas_alloc_task(GFP_KERNEL);
|
||||
task = sas_alloc_slow_task(GFP_KERNEL);
|
||||
if (!task)
|
||||
return -ENOMEM;
|
||||
|
||||
task->dev = dev;
|
||||
task->task_proto = dev->tproto;
|
||||
task->task_done = pm8001_task_done;
|
||||
task->timer.data = (unsigned long)task;
|
||||
task->timer.function = pm8001_tmf_timedout;
|
||||
task->timer.expires = jiffies + PM8001_TASK_TIMEOUT * HZ;
|
||||
add_timer(&task->timer);
|
||||
task->slow_task->timer.data = (unsigned long)task;
|
||||
task->slow_task->timer.function = pm8001_tmf_timedout;
|
||||
task->slow_task->timer.expires = jiffies + PM8001_TASK_TIMEOUT * HZ;
|
||||
add_timer(&task->slow_task->timer);
|
||||
|
||||
res = pm8001_tag_alloc(pm8001_ha, &ccb_tag);
|
||||
if (res)
|
||||
@@ -789,13 +789,13 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
|
||||
pm8001_dev, flag, task_tag, ccb_tag);
|
||||
|
||||
if (res) {
|
||||
del_timer(&task->timer);
|
||||
del_timer(&task->slow_task->timer);
|
||||
PM8001_FAIL_DBG(pm8001_ha,
|
||||
pm8001_printk("Executing internal task "
|
||||
"failed\n"));
|
||||
goto ex_err;
|
||||
}
|
||||
wait_for_completion(&task->completion);
|
||||
wait_for_completion(&task->slow_task->completion);
|
||||
res = TMF_RESP_FUNC_FAILED;
|
||||
/* Even TMF timed out, return direct. */
|
||||
if ((task->task_state_flags & SAS_TASK_STATE_ABORTED)) {
|
||||
|
Reference in New Issue
Block a user