Lines Matching refs:dctx
340 int z_erofs_stream_switch_bufs(struct z_erofs_stream_dctx *dctx, void **dst, in z_erofs_stream_switch_bufs() argument
343 struct z_erofs_decompress_req *rq = dctx->rq; in z_erofs_stream_switch_bufs()
348 if (!dctx->avail_out) { in z_erofs_stream_switch_bufs()
349 if (++dctx->no >= rq->outpages || !rq->outputsize) { in z_erofs_stream_switch_bufs()
354 if (dctx->kout) in z_erofs_stream_switch_bufs()
355 kunmap_local(dctx->kout); in z_erofs_stream_switch_bufs()
356 dctx->avail_out = min(rq->outputsize, PAGE_SIZE - rq->pageofs_out); in z_erofs_stream_switch_bufs()
357 rq->outputsize -= dctx->avail_out; in z_erofs_stream_switch_bufs()
358 pgo = &rq->out[dctx->no]; in z_erofs_stream_switch_bufs()
362 dctx->kout = NULL; in z_erofs_stream_switch_bufs()
368 dctx->kout = kmap_local_page(*pgo); in z_erofs_stream_switch_bufs()
369 *dst = dctx->kout + rq->pageofs_out; in z_erofs_stream_switch_bufs()
371 *dst = dctx->kout = NULL; in z_erofs_stream_switch_bufs()
376 if (dctx->inbuf_pos == dctx->inbuf_sz && rq->inputsize) { in z_erofs_stream_switch_bufs()
377 if (++dctx->ni >= rq->inpages) { in z_erofs_stream_switch_bufs()
381 if (dctx->kout) /* unlike kmap(), take care of the orders */ in z_erofs_stream_switch_bufs()
382 kunmap_local(dctx->kout); in z_erofs_stream_switch_bufs()
383 kunmap_local(dctx->kin); in z_erofs_stream_switch_bufs()
385 dctx->inbuf_sz = min_t(u32, rq->inputsize, PAGE_SIZE); in z_erofs_stream_switch_bufs()
386 rq->inputsize -= dctx->inbuf_sz; in z_erofs_stream_switch_bufs()
387 dctx->kin = kmap_local_page(rq->in[dctx->ni]); in z_erofs_stream_switch_bufs()
388 *src = dctx->kin; in z_erofs_stream_switch_bufs()
389 dctx->bounced = false; in z_erofs_stream_switch_bufs()
390 if (dctx->kout) { in z_erofs_stream_switch_bufs()
391 j = (u8 *)*dst - dctx->kout; in z_erofs_stream_switch_bufs()
392 dctx->kout = kmap_local_page(rq->out[dctx->no]); in z_erofs_stream_switch_bufs()
393 *dst = dctx->kout + j; in z_erofs_stream_switch_bufs()
395 dctx->inbuf_pos = 0; in z_erofs_stream_switch_bufs()
404 if (!dctx->bounced && rq->out[dctx->no] == rq->in[dctx->ni]) { in z_erofs_stream_switch_bufs()
405 memcpy(dctx->bounce, *src, dctx->inbuf_sz); in z_erofs_stream_switch_bufs()
406 *src = dctx->bounce; in z_erofs_stream_switch_bufs()
407 dctx->bounced = true; in z_erofs_stream_switch_bufs()
410 for (j = dctx->ni + 1; j < rq->inpages; ++j) { in z_erofs_stream_switch_bufs()
411 if (rq->out[dctx->no] != rq->in[j]) in z_erofs_stream_switch_bufs()