Lines Matching defs:xact

84 	struct vmbus_xact *xact;
86 xact = malloc(sizeof(*xact), M_DEVBUF, M_WAITOK | M_ZERO);
87 xact->x_ctx = ctx;
90 xact->x_req = contigmalloc(ctx->xc_req_size, M_DEVBUF,
92 if (xact->x_req == NULL) {
93 free(xact, M_DEVBUF);
97 xact->x_priv = malloc(ctx->xc_priv_size, M_DEVBUF, M_WAITOK);
98 xact->x_resp0 = malloc(ctx->xc_resp_size, M_DEVBUF, M_WAITOK);
100 return (xact);
104 vmbus_xact_free(struct vmbus_xact *xact)
107 free(xact->x_req, M_DEVBUF);
108 free(xact->x_resp0, M_DEVBUF);
109 if (xact->x_priv != NULL)
110 free(xact->x_priv, M_DEVBUF);
111 free(xact, M_DEVBUF);
117 struct vmbus_xact *xact;
125 xact = NULL;
127 xact = ctx->xc_free;
128 KASSERT(xact != NULL, ("no free xact"));
129 KASSERT(xact->x_resp == NULL, ("xact has pending response"));
135 return (xact);
158 mtx_init(&ctx->xc_lock, "vmbus xact", NULL, MTX_DEF);
179 panic("can't get xact");
187 ("xact ctx was not orphaned"));
188 KASSERT(ctx->xc_orphan != NULL, ("no orphaned xact"));
206 struct vmbus_xact *xact;
211 xact = vmbus_xact_get1(ctx, VMBUS_XACT_CTXF_DESTROY);
212 if (xact == NULL)
215 memset(xact->x_req, 0, req_len);
216 return (xact);
220 vmbus_xact_put(struct vmbus_xact *xact)
222 struct vmbus_xact_ctx *ctx = xact->x_ctx;
224 KASSERT(ctx->xc_active == NULL, ("pending active xact"));
225 xact->x_resp = NULL;
228 KASSERT(ctx->xc_free == NULL, ("has free xact"));
229 ctx->xc_free = xact;
235 vmbus_xact_req_data(const struct vmbus_xact *xact)
238 return (xact->x_req);
242 vmbus_xact_req_paddr(const struct vmbus_xact *xact)
245 return (pmap_kextract((vm_offset_t)xact->x_req));
249 vmbus_xact_priv(const struct vmbus_xact *xact, size_t priv_len)
252 if (priv_len > xact->x_ctx->xc_priv_size)
254 return (xact->x_priv);
258 vmbus_xact_activate(struct vmbus_xact *xact)
260 struct vmbus_xact_ctx *ctx = xact->x_ctx;
262 KASSERT(xact->x_resp == NULL, ("xact has pending response"));
265 KASSERT(ctx->xc_active == NULL, ("pending active xact"));
266 ctx->xc_active = xact;
271 vmbus_xact_deactivate(struct vmbus_xact *xact)
273 struct vmbus_xact_ctx *ctx = xact->x_ctx;
276 KASSERT(ctx->xc_active == xact, ("xact mismatch"));
282 vmbus_xact_return(struct vmbus_xact *xact, size_t *resp_len)
284 struct vmbus_xact_ctx *ctx = xact->x_ctx;
288 KASSERT(ctx->xc_active == xact, ("xact trashed"));
290 if ((ctx->xc_flags & VMBUS_XACT_CTXF_DESTROY) && xact->x_resp == NULL) {
297 printf("vmbus: xact ctx was orphaned w/ pending xact\n");
300 KASSERT(xact->x_resp != NULL, ("no response"));
304 resp = xact->x_resp;
305 *resp_len = xact->x_resp_len;
311 vmbus_xact_wait1(struct vmbus_xact *xact, size_t *resp_len,
314 struct vmbus_xact_ctx *ctx = xact->x_ctx;
319 KASSERT(ctx->xc_active == xact, ("xact mismatch"));
320 while (xact->x_resp == NULL &&
331 resp = vmbus_xact_return(xact, resp_len);
339 vmbus_xact_wait(struct vmbus_xact *xact, size_t *resp_len)
342 return (vmbus_xact_wait1(xact, resp_len, true /* can sleep */));
346 vmbus_xact_busywait(struct vmbus_xact *xact, size_t *resp_len)
349 return (vmbus_xact_wait1(xact, resp_len, false /* can't sleep */));
353 vmbus_xact_poll(struct vmbus_xact *xact, size_t *resp_len)
355 struct vmbus_xact_ctx *ctx = xact->x_ctx;
360 KASSERT(ctx->xc_active == xact, ("xact mismatch"));
361 if (xact->x_resp == NULL &&
367 resp = vmbus_xact_return(xact, resp_len);
375 vmbus_xact_save_resp(struct vmbus_xact *xact, const void *data, size_t dlen)
377 struct vmbus_xact_ctx *ctx = xact->x_ctx;
383 printf("vmbus: xact response truncated %zu -> %zu\n",
388 KASSERT(ctx->xc_active == xact, ("xact mismatch"));
389 memcpy(xact->x_resp0, data, cplen);
390 xact->x_resp_len = cplen;
391 xact->x_resp = xact->x_resp0;
395 vmbus_xact_wakeup(struct vmbus_xact *xact, const void *data, size_t dlen)
397 struct vmbus_xact_ctx *ctx = xact->x_ctx;
406 vmbus_xact_save_resp(xact, data, dlen);
410 ("no active xact pending"));
411 printf("vmbus: drop xact response\n");
434 ("no active xact pending"));
435 printf("vmbus: drop xact response\n");