[SCSI] qla2xxx: Limit excessive DPC cycles.
The 'continue' cases neglected to place the thread in an interruptible state, causing the DPC routine to wake immediately. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
Родитель
4fa94f83ff
Коммит
c142caf0ab
|
@ -3445,27 +3445,21 @@ qla2x00_do_dpc(void *data)
|
|||
schedule();
|
||||
__set_current_state(TASK_RUNNING);
|
||||
|
||||
ql_dbg(ql_dbg_dpc, base_vha, 0x4001,
|
||||
"DPC handler waking up.\n");
|
||||
ql_dbg(ql_dbg_dpc, base_vha, 0x4002,
|
||||
"dpc_flags=0x%lx.\n", base_vha->dpc_flags);
|
||||
|
||||
/* Initialization not yet finished. Don't do anything yet. */
|
||||
if (!base_vha->flags.init_done)
|
||||
continue;
|
||||
if (!base_vha->flags.init_done || ha->flags.mbox_busy)
|
||||
goto end_loop;
|
||||
|
||||
if (ha->flags.eeh_busy) {
|
||||
ql_dbg(ql_dbg_dpc, base_vha, 0x4003,
|
||||
"eeh_busy=%d.\n", ha->flags.eeh_busy);
|
||||
continue;
|
||||
goto end_loop;
|
||||
}
|
||||
|
||||
ha->dpc_active = 1;
|
||||
|
||||
if (ha->flags.mbox_busy) {
|
||||
ha->dpc_active = 0;
|
||||
continue;
|
||||
}
|
||||
ql_dbg(ql_dbg_dpc, base_vha, 0x4001,
|
||||
"DPC handler waking up.\n");
|
||||
ql_dbg(ql_dbg_dpc, base_vha, 0x4002,
|
||||
"dpc_flags=0x%lx.\n", base_vha->dpc_flags);
|
||||
|
||||
qla2x00_do_work(base_vha);
|
||||
|
||||
|
@ -3607,6 +3601,7 @@ qla2x00_do_dpc(void *data)
|
|||
qla2x00_do_dpc_all_vps(base_vha);
|
||||
|
||||
ha->dpc_active = 0;
|
||||
end_loop:
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
} /* End of while(1) */
|
||||
__set_current_state(TASK_RUNNING);
|
||||
|
|
Загрузка…
Ссылка в новой задаче