Lines Matching refs:wlp

1110 dca_initworklist(dca_t *dca, dca_worklist_t *wlp)
1113 int reqprealloc = wlp->dwl_hiwater + (MAXWORK * MAXREQSPERMCR);
1118 mutex_init(&wlp->dwl_lock, NULL, MUTEX_DRIVER, dca->dca_icookie);
1119 mutex_init(&wlp->dwl_freereqslock, NULL, MUTEX_DRIVER,
1121 mutex_init(&wlp->dwl_freelock, NULL, MUTEX_DRIVER, dca->dca_icookie);
1122 cv_init(&wlp->dwl_cv, NULL, CV_DRIVER, NULL);
1124 mutex_enter(&wlp->dwl_lock);
1126 dca_initq(&wlp->dwl_freereqs);
1127 dca_initq(&wlp->dwl_waitq);
1128 dca_initq(&wlp->dwl_freework);
1129 dca_initq(&wlp->dwl_runq);
1136 mutex_exit(&wlp->dwl_lock);
1139 workp->dw_wlp = wlp;
1142 mutex_exit(&wlp->dwl_lock);
1152 reqp->dr_wlp = wlp;
1161 dca_worklist_t *wlp;
1170 wlp = WORKLIST(dca, MCR1);
1171 (void) sprintf(wlp->dwl_name, "dca%d:mcr1",
1173 wlp->dwl_lowater = ddi_getprop(DDI_DEV_T_ANY,
1176 wlp->dwl_hiwater = ddi_getprop(DDI_DEV_T_ANY,
1179 wlp->dwl_reqspermcr = min(ddi_getprop(DDI_DEV_T_ANY,
1182 wlp->dwl_dca = dca;
1183 wlp->dwl_mcr = MCR1;
1184 if (dca_initworklist(dca, wlp) != DDI_SUCCESS) {
1191 wlp = WORKLIST(dca, MCR2);
1192 (void) sprintf(wlp->dwl_name, "dca%d:mcr2",
1194 wlp->dwl_lowater = ddi_getprop(DDI_DEV_T_ANY,
1197 wlp->dwl_hiwater = ddi_getprop(DDI_DEV_T_ANY,
1200 wlp->dwl_reqspermcr = min(ddi_getprop(DDI_DEV_T_ANY,
1203 wlp->dwl_dca = dca;
1204 wlp->dwl_mcr = MCR2;
1205 if (dca_initworklist(dca, wlp) != DDI_SUCCESS) {
1225 dca_worklist_t *wlp = WORKLIST(dca, mcr);
1233 mutex_enter(&wlp->dwl_lock);
1237 mutex_exit(&wlp->dwl_lock);
1242 mutex_destroy(&wlp->dwl_lock);
1243 mutex_destroy(&wlp->dwl_freereqslock);
1244 mutex_destroy(&wlp->dwl_freelock);
1245 cv_destroy(&wlp->dwl_cv);
1246 wlp->dwl_prov = NULL;
1822 dca_worklist_t *wlp = WORKLIST(dca, mcr);
1825 mutex_enter(&wlp->dwl_freelock);
1826 workp = (dca_work_t *)dca_dequeue(&wlp->dwl_freework);
1827 mutex_exit(&wlp->dwl_freelock);
1851 dca_worklist_t *wlp = WORKLIST(dca, mcr);
1854 mutex_enter(&wlp->dwl_freereqslock);
1855 reqp = (dca_request_t *)dca_dequeue(&wlp->dwl_freereqs);
1856 mutex_exit(&wlp->dwl_freereqslock);
1866 reqp->dr_wlp = wlp;
2087 dca_worklist_t *wlp = WORKLIST(dca, mcr);
2089 mutex_enter(&wlp->dwl_lock);
2101 mutex_exit(&wlp->dwl_lock);
2105 dca_enqueue(&wlp->dwl_waitq, (dca_listnode_t *)reqp);
2106 wlp->dwl_count++;
2107 wlp->dwl_lastsubmit = ddi_get_lbolt();
2108 reqp->dr_wlp = wlp;
2110 if ((wlp->dwl_count == wlp->dwl_hiwater) && (wlp->dwl_busy == 0)) {
2113 wlp->dwl_flowctl++;
2114 wlp->dwl_busy = 1;
2116 crypto_prov_notify(wlp->dwl_prov, CRYPTO_PROVIDER_BUSY);
2122 if (wlp->dwl_count >= wlp->dwl_reqspermcr) {
2124 } else if (!wlp->dwl_schedtid) {
2126 wlp->dwl_schedtid = timeout(dca_schedtimeout,
2127 (void *)wlp, drv_usectohz(MSEC));
2133 mutex_exit(&wlp->dwl_lock);
2141 dca_worklist_t *wlp = WORKLIST(dca, mcr);
2146 ASSERT(mutex_owned(&wlp->dwl_lock));
2151 if (wlp->dwl_drain || (dca->dca_flags & DCA_FAILED)) {
2178 if ((wlp->dwl_count < wlp->dwl_reqspermcr) &&
2179 (ddi_get_lbolt() < (wlp->dwl_lastsubmit +
2182 if (wlp->dwl_schedtid == 0) {
2183 wlp->dwl_schedtid = timeout(dca_schedtimeout,
2184 (void *)wlp, drv_usectohz(MSEC));
2206 while (nreqs < wlp->dwl_reqspermcr) {
2209 reqp = (dca_request_t *)dca_dequeue(&wlp->dwl_waitq);
2217 wlp->dwl_count--;
2218 if ((wlp->dwl_count == wlp->dwl_lowater) &&
2219 (wlp->dwl_busy)) {
2220 wlp->dwl_busy = 0;
2221 crypto_prov_notify(wlp->dwl_prov,
2286 wlp->dwl_submit++;
2312 dca_enqueue(&wlp->dwl_runq, (dca_listnode_t *)workp);
2325 dca_worklist_t *wlp = WORKLIST(dca, mcr);
2331 DBG(dca, DRECLAIM, "worklist = 0x%p (MCR%d)", wlp, mcr);
2332 ASSERT(mutex_owned(&wlp->dwl_lock));
2341 workp = (dca_work_t *)dca_peekqueue(&wlp->dwl_runq);
2368 if (wlp->dwl_drain && QEMPTY(&wlp->dwl_runq)) {
2369 cv_signal(&wlp->dwl_cv);
2373 for (i = 0; i < wlp->dwl_reqspermcr; i++) {
2386 mutex_exit(&wlp->dwl_lock);
2388 for (i = 0; i < wlp->dwl_reqspermcr; i++) {
2405 mutex_enter(&wlp->dwl_lock);
2516 dca_worklist_t *wlp;
2519 wlp = WORKLIST(dca, mcr);
2521 if (wlp == NULL || wlp->dwl_waitq.dl_prev == NULL) {
2527 have_mutex = mutex_tryenter(&wlp->dwl_lock);
2528 workp = (dca_work_t *)dca_dequeue(&wlp->dwl_runq);
2531 mutex_exit(&wlp->dwl_lock);
2534 mutex_exit(&wlp->dwl_lock);
2539 for (i = 0; i < wlp->dwl_reqspermcr; i++) {
2547 mutex_enter(&wlp->dwl_lock);
2551 if (wlp->dwl_drain && QEMPTY(&wlp->dwl_runq)) {
2552 cv_signal(&wlp->dwl_cv);
2561 mutex_exit(&wlp->dwl_lock);
2574 dca_worklist_t *wlp = (dca_worklist_t *)arg;
2575 mutex_enter(&wlp->dwl_lock);
2576 wlp->dwl_schedtid = 0;
2577 dca_schedule(wlp->dwl_dca, wlp->dwl_mcr);
2578 mutex_exit(&wlp->dwl_lock);
2593 dca_worklist_t *wlp = WORKLIST(dca, mcr);
2597 mutex_enter(&wlp->dwl_lock);
2600 workp = (dca_work_t *)dca_peekqueue(&wlp->dwl_runq);
2603 mutex_exit(&wlp->dwl_lock);
2609 mutex_exit(&wlp->dwl_lock);
2619 mutex_exit(&wlp->dwl_lock);
2652 dca_worklist_t *wlp = WORKLIST(dca, mcr);
2655 if (wlp == NULL || wlp->dwl_waitq.dl_prev == NULL) {
2658 have_mutex = mutex_tryenter(&wlp->dwl_lock);
2660 reqp = (dca_request_t *)dca_unqueue(&wlp->dwl_waitq);
2665 wlp->dwl_count--;
2666 if ((wlp->dwl_count == wlp->dwl_lowater) &&
2667 (wlp->dwl_busy)) {
2668 wlp->dwl_busy = 0;
2669 crypto_prov_notify(wlp->dwl_prov,
2672 mutex_exit(&wlp->dwl_lock);
2676 mutex_enter(&wlp->dwl_lock);
2679 mutex_exit(&wlp->dwl_lock);
2691 dca_worklist_t *wlp = WORKLIST(dca, mcr);
2693 mutex_enter(&wlp->dwl_lock);
2694 wlp->dwl_drain = 1;
2697 if (!QEMPTY(&wlp->dwl_runq)) {
2698 (void) cv_reltimedwait(&wlp->dwl_cv, &wlp->dwl_lock,
2701 if (!QEMPTY(&wlp->dwl_runq)) {
2703 mutex_exit(&wlp->dwl_lock);
2710 tid = wlp->dwl_schedtid;
2711 mutex_exit(&wlp->dwl_lock);
2722 mutex_exit(&wlp->dwl_lock);
2734 dca_worklist_t *wlp = WORKLIST(dca, mcr);
2735 mutex_enter(&wlp->dwl_lock);
2736 wlp->dwl_drain = 0;
2738 mutex_exit(&wlp->dwl_lock);