Lines Matching refs:task
546 sbp2_task_t *task = NULL; in sbp2_lun_reset() local
557 for (task = sp->s_task_head; task != NULL; task = task->ts_next) { in sbp2_lun_reset()
558 if (task->ts_state < SBP2_TASK_COMP) { in sbp2_lun_reset()
559 task->ts_error = SBP2_TASK_ERR_LUN_RESET; in sbp2_lun_reset()
560 task->ts_state = SBP2_TASK_COMP; in sbp2_lun_reset()
852 sbp2_task_t *task; in sbp2_ses_orbp2task() local
855 for (task = sp->s_task_head; task != NULL; task = task->ts_next) { in sbp2_ses_orbp2task()
856 if (task->ts_buf->bb_baddr == orbp) { in sbp2_ses_orbp2task()
861 return (task); in sbp2_ses_orbp2task()
879 sbp2_task_t *task; /* task actually being submitted */ in sbp2_ses_submit_task() local
923 task = ap->a_active_task; in sbp2_ses_submit_task()
924 task->ts_ses = sp; in sbp2_ses_submit_task()
925 task->ts_state = SBP2_TASK_PEND; in sbp2_ses_submit_task()
928 if (sbp2_agent_keepalive(ap, &task->ts_bus_error) != SBP2_SUCCESS) { in sbp2_ses_submit_task()
929 task->ts_error = SBP2_TASK_ERR_DEAD; in sbp2_ses_submit_task()
938 ASSERT(task->ts_timeout_id == 0); in sbp2_ses_submit_task()
939 task->ts_time_start = gethrtime(); in sbp2_ses_submit_task()
940 if (task->ts_timeout > 0) { in sbp2_ses_submit_task()
941 task->ts_timeout_id = timeout(sbp2_task_timeout, task, in sbp2_ses_submit_task()
942 task->ts_timeout * drv_usectohz(1000000)); in sbp2_ses_submit_task()
948 ret = sbp2_agent_write_orbp(ap, task->ts_buf->bb_baddr, in sbp2_ses_submit_task()
949 &task->ts_bus_error); in sbp2_ses_submit_task()
957 if (task->ts_timeout_id != 0) { in sbp2_ses_submit_task()
958 timeout_id = task->ts_timeout_id; in sbp2_ses_submit_task()
959 task->ts_timeout_id = 0; in sbp2_ses_submit_task()
962 task->ts_error = SBP2_TASK_ERR_BUS; in sbp2_ses_submit_task()
977 ASSERT(task == ap->a_active_task); in sbp2_ses_submit_task()
987 ret = sbp2_ses_remove_task(sp, task); in sbp2_ses_submit_task()
989 task->ts_state = SBP2_TASK_COMP; in sbp2_ses_submit_task()
992 sp->s_status_cb(sp->s_status_cb_arg, task); in sbp2_ses_submit_task()
1010 sbp2_ses_append_task(sbp2_ses_t *sp, sbp2_task_t *task) in sbp2_ses_append_task() argument
1018 task->ts_prev = task->ts_next = NULL; in sbp2_ses_append_task()
1019 sp->s_task_head = sp->s_task_tail = task; in sbp2_ses_append_task()
1022 task->ts_next = NULL; in sbp2_ses_append_task()
1023 task->ts_prev = sp->s_task_tail; in sbp2_ses_append_task()
1024 sp->s_task_tail->ts_next = task; in sbp2_ses_append_task()
1025 sp->s_task_tail = task; in sbp2_ses_append_task()
1027 ASSERT(task != task->ts_prev); in sbp2_ses_append_task()
1028 ASSERT(task != task->ts_next); in sbp2_ses_append_task()
1041 sbp2_ses_remove_task_locked(sbp2_ses_t *sp, sbp2_task_t *task) in sbp2_ses_remove_task_locked() argument
1044 if (task == sp->s_task_head) { /* first */ in sbp2_ses_remove_task_locked()
1045 ASSERT(task->ts_prev == NULL); in sbp2_ses_remove_task_locked()
1046 if (task->ts_next == NULL) { /* and last */ in sbp2_ses_remove_task_locked()
1050 sp->s_task_head = task->ts_next; in sbp2_ses_remove_task_locked()
1053 } else if (task == sp->s_task_tail) { /* last but not first */ in sbp2_ses_remove_task_locked()
1054 ASSERT(task->ts_next == NULL); in sbp2_ses_remove_task_locked()
1055 sp->s_task_tail = task->ts_prev; in sbp2_ses_remove_task_locked()
1058 task->ts_prev->ts_next = task->ts_next; in sbp2_ses_remove_task_locked()
1059 task->ts_next->ts_prev = task->ts_prev; in sbp2_ses_remove_task_locked()
1061 task->ts_prev = task->ts_next = NULL; in sbp2_ses_remove_task_locked()
1068 sbp2_ses_remove_task(sbp2_ses_t *sp, sbp2_task_t *task) in sbp2_ses_remove_task() argument
1073 ret = sbp2_ses_remove_task_locked(sp, task); in sbp2_ses_remove_task()
1085 sbp2_task_t *task = NULL; in sbp2_ses_find_task_state() local
1088 for (task = sp->s_task_head; task != NULL; task = task->ts_next) { in sbp2_ses_find_task_state()
1089 if (task->ts_state == state) { in sbp2_ses_find_task_state()
1095 return (task); in sbp2_ses_find_task_state()
1104 sbp2_task_t *task = NULL; in sbp2_ses_remove_first_task() local
1107 task = sp->s_task_head; in sbp2_ses_remove_first_task()
1108 if (task != NULL) { in sbp2_ses_remove_first_task()
1109 (void) sbp2_ses_remove_task_locked(sp, task); in sbp2_ses_remove_first_task()
1113 return (task); in sbp2_ses_remove_first_task()
1123 sbp2_task_t *task = NULL; in sbp2_ses_remove_first_task_state() local
1127 task = sp->s_task_head; in sbp2_ses_remove_first_task_state()
1128 (void) sbp2_ses_remove_task_locked(sp, task); in sbp2_ses_remove_first_task_state()
1132 return (task); in sbp2_ses_remove_first_task_state()
1142 sbp2_task_t *task = NULL; in sbp2_ses_cancel_first_task() local
1146 task = sp->s_task_head; in sbp2_ses_cancel_first_task()
1147 if (task != NULL) { in sbp2_ses_cancel_first_task()
1148 (void) sbp2_ses_remove_task_locked(sp, task); in sbp2_ses_cancel_first_task()
1152 if ((task != NULL) && ((timeout_id = task->ts_timeout_id) != 0)) { in sbp2_ses_cancel_first_task()
1153 task->ts_timeout_id = 0; in sbp2_ses_cancel_first_task()
1157 return (task); in sbp2_ses_cancel_first_task()
1167 sbp2_task_t *task = NULL; in sbp2_ses_reset_pending_tasks() local
1172 for (task = sp->s_task_head; task != NULL; task = task->ts_next) { in sbp2_ses_reset_pending_tasks()
1173 task->ts_state = SBP2_TASK_INIT; in sbp2_ses_reset_pending_tasks()
1176 if ((timeout_id = task->ts_timeout_id) != 0) { in sbp2_ses_reset_pending_tasks()
1177 task->ts_timeout_id = 0; in sbp2_ses_reset_pending_tasks()
1182 orb = (sbp2_cmd_orb_t *)sbp2_task_orb_kaddr(task); in sbp2_ses_reset_pending_tasks()
1184 sbp2_task_orb_sync(sp->s_lun, task, DDI_DMA_SYNC_FORDEV); in sbp2_ses_reset_pending_tasks()
1200 sbp2_ses_abort_task(sbp2_ses_t *sp, sbp2_task_t *task, int *berr) in sbp2_ses_abort_task() argument
1205 sbp2_cmd_orb_t *orb = (sbp2_cmd_orb_t *)task->ts_buf->bb_kaddr; in sbp2_ses_abort_task()
1211 (void) SBP2_SYNC_BUF(tp, task->ts_buf, 0, 0, DDI_DMA_SYNC_FORDEV); in sbp2_ses_abort_task()
1214 SBP2_ORB_MGT_FUNC_ABORT_TASK, task->ts_buf->bb_baddr, berr); in sbp2_ses_abort_task()
1244 sbp2_orb_freelist_get(sbp2_lun_t *lp, sbp2_task_t *task, int len) in sbp2_orb_freelist_get() argument
1310 sbp2_task_orb_alloc(sbp2_lun_t *lp, sbp2_task_t *task, int len) in sbp2_task_orb_alloc() argument
1319 if ((task->ts_buf = sbp2_orb_freelist_get(lp, task, buf_len)) != NULL) { in sbp2_task_orb_alloc()
1324 task->ts_buf = kmem_zalloc(sizeof (sbp2_bus_buf_t), KM_SLEEP); in sbp2_task_orb_alloc()
1325 task->ts_buf->bb_len = buf_len; in sbp2_task_orb_alloc()
1326 task->ts_buf->bb_flags = SBP2_BUS_BUF_DMA | SBP2_BUS_BUF_RD; in sbp2_task_orb_alloc()
1327 if ((ret = SBP2_ALLOC_BUF(tp, task->ts_buf)) != SBP2_SUCCESS) { in sbp2_task_orb_alloc()
1328 kmem_free(task->ts_buf, sizeof (sbp2_bus_buf_t)); in sbp2_task_orb_alloc()
1329 task->ts_buf = NULL; in sbp2_task_orb_alloc()
1336 sbp2_task_orb_free(sbp2_lun_t *lp, sbp2_task_t *task) in sbp2_task_orb_free() argument
1340 if (task->ts_buf != NULL) { in sbp2_task_orb_free()
1341 if (sbp2_orb_freelist_put(lp, task->ts_buf) != SBP2_SUCCESS) { in sbp2_task_orb_free()
1342 SBP2_FREE_BUF(tp, task->ts_buf); in sbp2_task_orb_free()
1343 kmem_free(task->ts_buf, sizeof (sbp2_bus_buf_t)); in sbp2_task_orb_free()
1345 task->ts_buf = NULL; in sbp2_task_orb_free()
1350 sbp2_task_orb_kaddr(sbp2_task_t *task) in sbp2_task_orb_kaddr() argument
1352 return (task->ts_buf->bb_kaddr); in sbp2_task_orb_kaddr()
1356 sbp2_task_orb_sync(sbp2_lun_t *lp, sbp2_task_t *task, int flags) in sbp2_task_orb_sync() argument
1358 (void) SBP2_SYNC_BUF(lp->l_tgt, task->ts_buf, 0, 0, flags); in sbp2_task_orb_sync()
1618 sbp2_task_t *task = arg; in sbp2_task_timeout() local
1619 sbp2_ses_t *sp = task->ts_ses; in sbp2_task_timeout()
1625 if (task->ts_timeout_id == 0) { in sbp2_task_timeout()
1629 task->ts_timeout_id = 0; in sbp2_task_timeout()
1630 task->ts_time_comp = gethrtime(); in sbp2_task_timeout()
1633 if (task->ts_state != SBP2_TASK_PEND) { in sbp2_task_timeout()
1638 if (task == ap->a_active_task) { in sbp2_task_timeout()
1641 task->ts_error = SBP2_TASK_ERR_TIMEOUT; in sbp2_task_timeout()
1642 task->ts_state = SBP2_TASK_COMP; in sbp2_task_timeout()
1649 sp->s_status_cb(sp->s_status_cb_arg, task); in sbp2_task_timeout()
1666 sbp2_task_t *task; in sbp2_status_fifo_wb_cb() local
1709 if ((task = sbp2_ses_orbp2task(sp, orbp)) == NULL) { in sbp2_status_fifo_wb_cb()
1723 bzero(&task->ts_status, sizeof (sbp2_status_t)); in sbp2_status_fifo_wb_cb()
1724 bcopy((*bpp)->b_rptr, &task->ts_status, len); in sbp2_status_fifo_wb_cb()
1730 if ((timeout_id = task->ts_timeout_id) != 0) { in sbp2_status_fifo_wb_cb()
1731 task->ts_timeout_id = 0; in sbp2_status_fifo_wb_cb()
1742 if (task->ts_state != SBP2_TASK_PEND) { in sbp2_status_fifo_wb_cb()
1747 if (task == ap->a_active_task) { in sbp2_status_fifo_wb_cb()
1750 task->ts_error = SBP2_TASK_ERR_NONE; in sbp2_status_fifo_wb_cb()
1751 task->ts_state = SBP2_TASK_COMP; in sbp2_status_fifo_wb_cb()
1755 sp->s_status_cb(sp->s_status_cb_arg, task); /* notify the driver */ in sbp2_status_fifo_wb_cb()