Lines Matching refs:ctx

83 vmbus_xact_alloc(struct vmbus_xact_ctx *ctx, bus_dma_tag_t parent_dtag)  in vmbus_xact_alloc()  argument
88 xact->x_ctx = ctx; in vmbus_xact_alloc()
92 ctx->xc_req_size, &xact->x_req_dma, BUS_DMA_WAITOK); in vmbus_xact_alloc()
97 if (ctx->xc_priv_size != 0) in vmbus_xact_alloc()
98 xact->x_priv = malloc(ctx->xc_priv_size, M_DEVBUF, M_WAITOK); in vmbus_xact_alloc()
99 xact->x_resp0 = malloc(ctx->xc_resp_size, M_DEVBUF, M_WAITOK); in vmbus_xact_alloc()
116 vmbus_xact_get1(struct vmbus_xact_ctx *ctx, uint32_t dtor_flag) in vmbus_xact_get1() argument
120 mtx_lock(&ctx->xc_lock); in vmbus_xact_get1()
122 while ((ctx->xc_flags & dtor_flag) == 0 && ctx->xc_free == NULL) in vmbus_xact_get1()
123 mtx_sleep(&ctx->xc_free, &ctx->xc_lock, 0, "gxact", 0); in vmbus_xact_get1()
124 if (ctx->xc_flags & dtor_flag) { in vmbus_xact_get1()
128 xact = ctx->xc_free; in vmbus_xact_get1()
131 ctx->xc_free = NULL; in vmbus_xact_get1()
134 mtx_unlock(&ctx->xc_lock); in vmbus_xact_get1()
143 struct vmbus_xact_ctx *ctx; in vmbus_xact_ctx_create() local
148 ctx = malloc(sizeof(*ctx), M_DEVBUF, M_WAITOK | M_ZERO); in vmbus_xact_ctx_create()
149 ctx->xc_req_size = req_size; in vmbus_xact_ctx_create()
150 ctx->xc_resp_size = resp_size; in vmbus_xact_ctx_create()
151 ctx->xc_priv_size = priv_size; in vmbus_xact_ctx_create()
153 ctx->xc_free = vmbus_xact_alloc(ctx, dtag); in vmbus_xact_ctx_create()
154 if (ctx->xc_free == NULL) { in vmbus_xact_ctx_create()
155 free(ctx, M_DEVBUF); in vmbus_xact_ctx_create()
159 mtx_init(&ctx->xc_lock, "vmbus xact", NULL, MTX_DEF); in vmbus_xact_ctx_create()
161 return (ctx); in vmbus_xact_ctx_create()
165 vmbus_xact_ctx_orphan(struct vmbus_xact_ctx *ctx) in vmbus_xact_ctx_orphan() argument
167 mtx_lock(&ctx->xc_lock); in vmbus_xact_ctx_orphan()
168 if (ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY) { in vmbus_xact_ctx_orphan()
169 mtx_unlock(&ctx->xc_lock); in vmbus_xact_ctx_orphan()
172 ctx->xc_flags |= VMBUS_XACT_CTXF_DESTROY; in vmbus_xact_ctx_orphan()
173 mtx_unlock(&ctx->xc_lock); in vmbus_xact_ctx_orphan()
175 wakeup(&ctx->xc_free); in vmbus_xact_ctx_orphan()
176 wakeup(&ctx->xc_active); in vmbus_xact_ctx_orphan()
178 ctx->xc_orphan = vmbus_xact_get1(ctx, 0); in vmbus_xact_ctx_orphan()
179 if (ctx->xc_orphan == NULL) in vmbus_xact_ctx_orphan()
185 vmbus_xact_ctx_free(struct vmbus_xact_ctx *ctx) in vmbus_xact_ctx_free() argument
187 KASSERT(ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY, in vmbus_xact_ctx_free()
189 KASSERT(ctx->xc_orphan != NULL, ("no orphaned xact")); in vmbus_xact_ctx_free()
191 vmbus_xact_free(ctx->xc_orphan); in vmbus_xact_ctx_free()
192 mtx_destroy(&ctx->xc_lock); in vmbus_xact_ctx_free()
193 free(ctx, M_DEVBUF); in vmbus_xact_ctx_free()
197 vmbus_xact_ctx_destroy(struct vmbus_xact_ctx *ctx) in vmbus_xact_ctx_destroy() argument
200 vmbus_xact_ctx_orphan(ctx); in vmbus_xact_ctx_destroy()
201 vmbus_xact_ctx_free(ctx); in vmbus_xact_ctx_destroy()
205 vmbus_xact_get(struct vmbus_xact_ctx *ctx, size_t req_len) in vmbus_xact_get() argument
209 if (req_len > ctx->xc_req_size) in vmbus_xact_get()
212 xact = vmbus_xact_get1(ctx, VMBUS_XACT_CTXF_DESTROY); in vmbus_xact_get()
223 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_put() local
225 KASSERT(ctx->xc_active == NULL, ("pending active xact")); in vmbus_xact_put()
228 mtx_lock(&ctx->xc_lock); in vmbus_xact_put()
229 KASSERT(ctx->xc_free == NULL, ("has free xact")); in vmbus_xact_put()
230 ctx->xc_free = xact; in vmbus_xact_put()
231 mtx_unlock(&ctx->xc_lock); in vmbus_xact_put()
232 wakeup(&ctx->xc_free); in vmbus_xact_put()
261 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_activate() local
265 mtx_lock(&ctx->xc_lock); in vmbus_xact_activate()
266 KASSERT(ctx->xc_active == NULL, ("pending active xact")); in vmbus_xact_activate()
267 ctx->xc_active = xact; in vmbus_xact_activate()
268 mtx_unlock(&ctx->xc_lock); in vmbus_xact_activate()
274 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_deactivate() local
276 mtx_lock(&ctx->xc_lock); in vmbus_xact_deactivate()
277 KASSERT(ctx->xc_active == xact, ("xact mismatch")); in vmbus_xact_deactivate()
278 ctx->xc_active = NULL; in vmbus_xact_deactivate()
279 mtx_unlock(&ctx->xc_lock); in vmbus_xact_deactivate()
285 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_return() local
288 mtx_assert(&ctx->xc_lock, MA_OWNED); in vmbus_xact_return()
289 KASSERT(ctx->xc_active == xact, ("xact trashed")); in vmbus_xact_return()
291 if ((ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY) && xact->x_resp == NULL) { in vmbus_xact_return()
299 vmbus_xact_save_resp(ctx->xc_active, &b, sizeof(b)); in vmbus_xact_return()
303 ctx->xc_active = NULL; in vmbus_xact_return()
315 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_wait1() local
318 mtx_lock(&ctx->xc_lock); in vmbus_xact_wait1()
320 KASSERT(ctx->xc_active == xact, ("xact mismatch")); in vmbus_xact_wait1()
322 (ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY) == 0) { in vmbus_xact_wait1()
324 mtx_sleep(&ctx->xc_active, &ctx->xc_lock, 0, in vmbus_xact_wait1()
327 mtx_unlock(&ctx->xc_lock); in vmbus_xact_wait1()
329 mtx_lock(&ctx->xc_lock); in vmbus_xact_wait1()
334 mtx_unlock(&ctx->xc_lock); in vmbus_xact_wait1()
356 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_poll() local
359 mtx_lock(&ctx->xc_lock); in vmbus_xact_poll()
361 KASSERT(ctx->xc_active == xact, ("xact mismatch")); in vmbus_xact_poll()
363 (ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY) == 0) { in vmbus_xact_poll()
364 mtx_unlock(&ctx->xc_lock); in vmbus_xact_poll()
370 mtx_unlock(&ctx->xc_lock); in vmbus_xact_poll()
378 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_save_resp() local
381 mtx_assert(&ctx->xc_lock, MA_OWNED); in vmbus_xact_save_resp()
383 if (cplen > ctx->xc_resp_size) { in vmbus_xact_save_resp()
385 cplen, ctx->xc_resp_size); in vmbus_xact_save_resp()
386 cplen = ctx->xc_resp_size; in vmbus_xact_save_resp()
389 KASSERT(ctx->xc_active == xact, ("xact mismatch")); in vmbus_xact_save_resp()
398 struct vmbus_xact_ctx *ctx = xact->x_ctx; in vmbus_xact_wakeup() local
401 mtx_lock(&ctx->xc_lock); in vmbus_xact_wakeup()
406 if (ctx->xc_active != NULL) { in vmbus_xact_wakeup()
410 KASSERT(ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY, in vmbus_xact_wakeup()
414 mtx_unlock(&ctx->xc_lock); in vmbus_xact_wakeup()
417 wakeup(&ctx->xc_active); in vmbus_xact_wakeup()
421 vmbus_xact_ctx_wakeup(struct vmbus_xact_ctx *ctx, const void *data, size_t dlen) in vmbus_xact_ctx_wakeup() argument
425 mtx_lock(&ctx->xc_lock); in vmbus_xact_ctx_wakeup()
430 if (ctx->xc_active != NULL) { in vmbus_xact_ctx_wakeup()
431 vmbus_xact_save_resp(ctx->xc_active, data, dlen); in vmbus_xact_ctx_wakeup()
434 KASSERT(ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY, in vmbus_xact_ctx_wakeup()
438 mtx_unlock(&ctx->xc_lock); in vmbus_xact_ctx_wakeup()
441 wakeup(&ctx->xc_active); in vmbus_xact_ctx_wakeup()