Lines Matching refs:dctx
367 int z_erofs_stream_switch_bufs(struct z_erofs_stream_dctx *dctx, void **dst,
370 struct z_erofs_decompress_req *rq = dctx->rq;
375 if (!dctx->avail_out) {
376 if (++dctx->no >= dctx->outpages || !rq->outputsize) {
381 if (dctx->kout)
382 kunmap_local(dctx->kout);
383 dctx->avail_out = min(rq->outputsize, PAGE_SIZE - rq->pageofs_out);
384 rq->outputsize -= dctx->avail_out;
385 pgo = &rq->out[dctx->no];
389 dctx->kout = NULL;
395 dctx->kout = kmap_local_page(*pgo);
396 *dst = dctx->kout + rq->pageofs_out;
398 *dst = dctx->kout = NULL;
403 if (dctx->inbuf_pos == dctx->inbuf_sz && rq->inputsize) {
404 if (++dctx->ni >= dctx->inpages) {
408 if (dctx->kout) /* unlike kmap(), take care of the orders */
409 kunmap_local(dctx->kout);
410 kunmap_local(dctx->kin);
412 dctx->inbuf_sz = min_t(u32, rq->inputsize, PAGE_SIZE);
413 rq->inputsize -= dctx->inbuf_sz;
414 dctx->kin = kmap_local_page(rq->in[dctx->ni]);
415 *src = dctx->kin;
416 dctx->bounced = false;
417 if (dctx->kout) {
418 j = (u8 *)*dst - dctx->kout;
419 dctx->kout = kmap_local_page(rq->out[dctx->no]);
420 *dst = dctx->kout + j;
422 dctx->inbuf_pos = 0;
431 if (!dctx->bounced && rq->out[dctx->no] == rq->in[dctx->ni]) {
432 memcpy(dctx->bounce, *src, dctx->inbuf_sz);
433 *src = dctx->bounce;
434 dctx->bounced = true;
437 for (j = dctx->ni + 1; j < dctx->inpages; ++j) {
438 if (rq->out[dctx->no] != rq->in[j])