Lines Matching defs:areq

99 static void kcf_reqid_delete(kcf_areq_node_t *areq);
100 static crypto_req_id_t kcf_reqid_insert(kcf_areq_node_t *areq);
154 kcf_areq_node_t *arptr, *areq;
187 if ((areq = ictx->kc_req_chain_last) == NULL) {
195 areq->an_ctxchain_next = arptr;
209 kcf_disp_sw_request(kcf_areq_node_t *areq)
213 if ((err = kcf_enqueue(areq)) != 0)
249 kcf_areq_node_t *areq = (kcf_areq_node_t *)ireq;
254 sreq->sn_provider : areq->an_provider;
306 ctx = (ictx = areq->an_context) ? &ictx->kc_glbl_ctx : NULL;
308 mutex_enter(&areq->an_lock);
318 ASSERT(ictx->kc_prov_desc == areq->an_provider);
320 while (areq->an_is_my_turn == B_FALSE) {
321 cv_wait(&areq->an_turn_cv, &areq->an_lock);
324 areq->an_state = REQ_INPROGRESS;
325 areq->an_mp = mp;
326 mutex_exit(&areq->an_lock);
328 error = common_submit_request(areq->an_provider, ctx,
329 &areq->an_params, areq);
345 kcf_aop_done(areq, error);
361 can_resubmit(kcf_areq_node_t *areq, crypto_mechanism_t **mech1,
367 params = &areq->an_params;
495 kcf_resubmit_request(kcf_areq_node_t *areq)
505 if (!can_resubmit(areq, &mech1, &mech2, &fg))
508 old_pd = areq->an_provider;
513 if (kcf_insert_triedlist(&areq->an_tried_plist, old_pd,
519 &error, areq->an_tried_plist, fg, 0);
525 &prov_mt2, &error, areq->an_tried_plist, fg, fg, 0);
535 if ((ictx = areq->an_context) != NULL) {
549 /* We reuse areq. by resetting the provider and context fields. */
552 areq->an_provider = new_pd;
553 mutex_enter(&areq->an_lock);
554 areq->an_state = REQ_WAITING;
555 mutex_exit(&areq->an_lock);
559 error = kcf_disp_sw_request(areq);
565 if (taskq_dispatch(taskq, process_req_hwp, areq, TQ_NOSLEEP) ==
600 kcf_areq_node_t *areq;
716 areq = kcf_areqnode_alloc(pd, kcf_ctx, crq,
718 if (areq == NULL)
730 crq->cr_reqid = kcf_reqid_insert(areq);
733 error = kcf_disp_sw_request(areq);
742 kcf_reqid_delete(areq);
743 KCF_AREQ_REFRELE(areq);
753 areq = kcf_areqnode_alloc(pd, kcf_ctx, crq, params,
755 if (areq == NULL) {
769 KCF_AREQ_REFRELE(areq);
780 crq->cr_reqid = kcf_reqid_insert(areq);
784 process_req_hwp, areq, TQ_NOSLEEP) ==
788 kcf_reqid_delete(areq);
789 KCF_AREQ_REFRELE(areq);
862 kcf_free_req(kcf_areq_node_t *areq)
864 KCF_PROV_REFRELE(areq->an_provider);
865 if (areq->an_context != NULL)
866 KCF_CONTEXT_REFRELE(areq->an_context);
868 if (areq->an_tried_plist != NULL)
869 kcf_free_triedlist(areq->an_tried_plist);
870 kmem_cache_free(kcf_areq_cache, areq);
878 kcf_removereq_in_ctxchain(kcf_context_t *ictx, kcf_areq_node_t *areq)
883 * Get context lock, search for areq in the chain and remove it.
890 if (cur == areq) {
1137 kcf_areq_node_t *areq = (kcf_areq_node_t *)buf;
1139 areq->an_type = CRYPTO_ASYNCH;
1140 areq->an_refcnt = 0;
1141 mutex_init(&areq->an_lock, NULL, MUTEX_DEFAULT, NULL);
1142 cv_init(&areq->an_done, NULL, CV_DEFAULT, NULL);
1143 cv_init(&areq->an_turn_cv, NULL, CV_DEFAULT, NULL);
1152 kcf_areq_node_t *areq = (kcf_areq_node_t *)buf;
1154 ASSERT(areq->an_refcnt == 0);
1155 mutex_destroy(&areq->an_lock);
1156 cv_destroy(&areq->an_done);
1157 cv_destroy(&areq->an_turn_cv);
1292 kcf_aop_done(kcf_areq_node_t *areq, int error)
1310 if (kcf_resubmit_request(areq) == CRYPTO_QUEUED)
1314 mutex_enter(&areq->an_lock);
1315 areq->an_state = REQ_DONE;
1316 mutex_exit(&areq->an_lock);
1318 optype = (&areq->an_params)->rp_optype;
1319 if ((ictx = areq->an_context) != NULL) {
1327 nextreq = areq->an_ctxchain_next;
1357 if (areq->an_isdual) {
1359 next_arg = (kcf_dual_req_t *)areq->an_reqarg.cr_callback_arg;
1360 next_arg->kr_areq = areq;
1361 KCF_AREQ_REFHOLD(areq);
1362 areq->an_isdual = B_FALSE;
1364 NOTIFY_CLIENT(areq, error);
1376 (!(areq->an_reqarg.cr_flag & CRYPTO_NOTIFY_OPDONE)) &&
1380 NOTIFY_CLIENT(areq, error);
1383 if (!(areq->an_reqarg.cr_flag & CRYPTO_SKIP_REQID))
1384 kcf_reqid_delete(areq);
1386 KCF_AREQ_REFRELE(areq);
1507 kcf_reqid_insert(kcf_areq_node_t *areq)
1519 SET_REQID(areq, id);
1521 headp = areq->an_idnext = rt->rt_idhash[indx];
1522 areq->an_idprev = NULL;
1524 headp->an_idprev = areq;
1526 rt->rt_idhash[indx] = areq;
1536 kcf_reqid_delete(kcf_areq_node_t *areq)
1540 crypto_req_id_t id = GET_REQID(areq);
1548 nextp = areq->an_idnext;
1549 prevp = areq->an_idprev;
1557 SET_REQID(areq, 0);
1558 cv_broadcast(&areq->an_done);
1578 * - areq->an_lock
1587 kcf_areq_node_t *areq;
1596 for (areq = rt->rt_idhash[indx]; areq; areq = areq->an_idnext) {
1597 if (GET_REQID(areq) == id) {
1602 pd = areq->an_provider;
1608 mutex_enter(&areq->an_lock);
1611 if (areq->an_state <= REQ_WAITING) {
1613 kcf_remove_node(areq);
1614 if ((ictx = areq->an_context) != NULL)
1615 kcf_removereq_in_ctxchain(ictx, areq);
1617 mutex_exit(&areq->an_lock);
1621 /* Remove areq from hash table and free it. */
1622 kcf_reqid_delete(areq);
1623 KCF_AREQ_REFRELE(areq);
1627 mutex_exit(&areq->an_lock);
1644 KCF_AREQ_REFHOLD(areq);
1645 while (GET_REQID(areq) == id)
1646 cv_wait(&areq->an_done, &rt->rt_lock);
1647 KCF_AREQ_REFRELE(areq);
1671 kcf_areq_node_t *areq;
1681 while ((areq = ictx->kc_req_chain_first) != NULL) {
1688 KCF_AREQ_REFHOLD(areq);
1691 crypto_cancel_req(GET_REQID(areq));
1692 KCF_AREQ_REFRELE(areq);
1767 kcf_areq_node_t *areq = next_req->kr_areq;
1775 areq->an_reqarg = next_req->kr_callreq;
1776 KCF_AREQ_REFRELE(areq);
1778 areq->an_isdual = B_FALSE;
1779 kcf_aop_done(areq, error);
1848 areq->an_reqarg.cr_flag = 0;
1850 areq->an_reqarg.cr_callback_func = kcf_last_req;
1851 areq->an_reqarg.cr_callback_arg = next_req;
1852 areq->an_isdual = B_TRUE;
1874 areq->an_params = *params;
1875 old_pd = areq->an_provider;
1878 areq->an_provider = pd;
1884 if (taskq_dispatch(taskq, process_req_hwp, areq,
1898 KCF_AREQ_REFRELE(areq);
1906 areq->an_reqarg = next_req->kr_callreq;
1908 areq->an_isdual = B_FALSE;
1909 kcf_aop_done(areq, error);
1923 kcf_areq_node_t *areq = last_req->kr_areq;
1946 if (areq == NULL) {
1953 areq->an_reqarg = last_req->kr_callreq;
1954 KCF_AREQ_REFRELE(areq);
1956 areq->an_isdual = B_FALSE;
1957 kcf_aop_done(areq, status);