Lines Matching refs:stream
134 libxl__stream_read_state *stream, int rc);
136 libxl__stream_read_state *stream, int rc);
138 libxl__stream_read_state *stream, int rc);
142 libxl__stream_read_state *stream, int rc);
149 libxl__stream_read_state *stream);
151 libxl__stream_read_state *stream);
159 libxl__stream_read_state *stream);
163 libxl__stream_read_state *stream,
171 libxl__stream_read_state *stream, int rc);
176 static int setup_read(libxl__stream_read_state *stream, in setup_read() argument
180 libxl__datacopier_state *dc = &stream->dc; in setup_read()
201 void libxl__stream_read_init(libxl__stream_read_state *stream) in libxl__stream_read_init() argument
203 assert(stream->ao); in libxl__stream_read_init()
205 stream->shs.ao = stream->ao; in libxl__stream_read_init()
206 libxl__save_helper_init(&stream->shs); in libxl__stream_read_init()
208 stream->chs.ao = stream->ao; in libxl__stream_read_init()
209 libxl__conversion_helper_init(&stream->chs); in libxl__stream_read_init()
211 stream->rc = 0; in libxl__stream_read_init()
212 stream->running = false; in libxl__stream_read_init()
213 stream->in_checkpoint = false; in libxl__stream_read_init()
214 stream->sync_teardown = false; in libxl__stream_read_init()
215 FILLZERO(stream->dc); in libxl__stream_read_init()
216 FILLZERO(stream->hdr); in libxl__stream_read_init()
217 LIBXL_STAILQ_INIT(&stream->record_queue); in libxl__stream_read_init()
218 stream->phase = SRS_PHASE_NORMAL; in libxl__stream_read_init()
219 stream->recursion_guard = false; in libxl__stream_read_init()
220 stream->incoming_record = NULL; in libxl__stream_read_init()
221 FILLZERO(stream->emu_dc); in libxl__stream_read_init()
222 stream->emu_carefd = NULL; in libxl__stream_read_init()
226 libxl__stream_read_state *stream) in libxl__stream_read_start() argument
228 libxl__datacopier_state *dc = &stream->dc; in libxl__stream_read_start()
229 STATE_AO_GC(stream->ao); in libxl__stream_read_start()
232 libxl__stream_read_init(stream); in libxl__stream_read_start()
234 stream->running = true; in libxl__stream_read_start()
235 stream->phase = SRS_PHASE_NORMAL; in libxl__stream_read_start()
237 if (stream->legacy) { in libxl__stream_read_start()
247 libxl__conversion_helper_state *chs = &stream->chs; in libxl__stream_read_start()
249 chs->legacy_fd = stream->fd; in libxl__stream_read_start()
251 (stream->dcs->guest_config->b_info.type == LIBXL_DOMAIN_TYPE_HVM); in libxl__stream_read_start()
254 rc = libxl__convert_legacy_stream(egc, &stream->chs); in libxl__stream_read_start()
263 assert(!stream->back_channel); in libxl__stream_read_start()
267 assert(stream->chs.v2_carefd); in libxl__stream_read_start()
268 stream->fd = libxl__carefd_fd(stream->chs.v2_carefd); in libxl__stream_read_start()
269 stream->dcs->libxc_fd = stream->fd; in libxl__stream_read_start()
273 dc->ao = stream->ao; in libxl__stream_read_start()
275 dc->readfd = stream->fd; in libxl__stream_read_start()
278 if (stream->back_channel) in libxl__stream_read_start()
282 rc = setup_read(stream, "stream header", in libxl__stream_read_start()
283 &stream->hdr, sizeof(stream->hdr), in libxl__stream_read_start()
293 stream_complete(egc, stream, rc); in libxl__stream_read_start()
297 libxl__stream_read_state *stream) in libxl__stream_read_start_checkpoint() argument
299 assert(stream->running); in libxl__stream_read_start_checkpoint()
300 assert(!stream->in_checkpoint); in libxl__stream_read_start_checkpoint()
302 stream->in_checkpoint = true; in libxl__stream_read_start_checkpoint()
303 stream->phase = SRS_PHASE_BUFFERING; in libxl__stream_read_start_checkpoint()
309 stream_continue(egc, stream); in libxl__stream_read_start_checkpoint()
313 libxl__stream_read_state *stream, int rc) in libxl__stream_read_abort() argument
317 if (stream->running) in libxl__stream_read_abort()
318 stream_complete(egc, stream, rc); in libxl__stream_read_abort()
327 libxl__stream_read_state *stream = CONTAINER_OF(dc, *stream, dc); in stream_header_done() local
328 libxl__sr_hdr *hdr = &stream->hdr; in stream_header_done()
360 stream_continue(egc, stream); in stream_header_done()
365 stream_complete(egc, stream, rc); in stream_header_done()
369 libxl__stream_read_state *stream) in stream_continue() argument
371 STATE_AO_GC(stream->ao); in stream_continue()
390 assert(stream->recursion_guard == false); in stream_continue()
391 stream->recursion_guard = true; in stream_continue()
393 switch (stream->phase) { in stream_continue()
405 if (LIBXL_STAILQ_EMPTY(&stream->record_queue)) in stream_continue()
406 setup_read_record(egc, stream); in stream_continue()
408 if (process_record(egc, stream)) in stream_continue()
409 setup_read_record(egc, stream); in stream_continue()
415 assert(LIBXL_STAILQ_EMPTY(&stream->record_queue)); in stream_continue()
432 &stream->record_queue, libxl__sr_record_buf, entry); in stream_continue()
434 assert(stream->in_checkpoint); in stream_continue()
437 setup_read_record(egc, stream); in stream_continue()
445 stream->phase = SRS_PHASE_UNBUFFERING; in stream_continue()
457 assert(stream->in_checkpoint); in stream_continue()
459 while (process_record(egc, stream)) in stream_continue()
471 assert(stream->recursion_guard == true); in stream_continue()
472 stream->recursion_guard = false; in stream_continue()
476 libxl__stream_read_state *stream) in setup_read_record() argument
479 STATE_AO_GC(stream->ao); in setup_read_record()
482 assert(stream->incoming_record == NULL); in setup_read_record()
483 stream->incoming_record = rec = libxl__zalloc(NOGC, sizeof(*rec)); in setup_read_record()
485 rc = setup_read(stream, "record header", in setup_read_record()
494 stream_complete(egc, stream, rc); in setup_read_record()
501 libxl__stream_read_state *stream = CONTAINER_OF(dc, *stream, dc); in record_header_done() local
502 libxl__sr_record_buf *rec = stream->incoming_record; in record_header_done()
517 rc = setup_read(stream, "record body", in record_header_done()
526 stream_complete(egc, stream, rc); in record_header_done()
533 libxl__stream_read_state *stream = CONTAINER_OF(dc, *stream, dc); in record_body_done() local
534 libxl__sr_record_buf *rec = stream->incoming_record; in record_body_done()
540 LIBXL_STAILQ_INSERT_TAIL(&stream->record_queue, rec, entry); in record_body_done()
541 stream->incoming_record = NULL; in record_body_done()
543 stream_continue(egc, stream); in record_body_done()
548 stream_complete(egc, stream, rc); in record_body_done()
560 libxl__stream_read_state *stream) in process_record() argument
562 STATE_AO_GC(stream->ao); in process_record()
563 libxl__domain_create_state *dcs = stream->dcs; in process_record()
570 assert(!LIBXL_STAILQ_EMPTY(&stream->record_queue)); in process_record()
571 rec = LIBXL_STAILQ_FIRST(&stream->record_queue); in process_record()
572 LIBXL_STAILQ_REMOVE_HEAD(&stream->record_queue, entry); in process_record()
579 stream_complete(egc, stream, 0); in process_record()
583 libxl__xc_domain_restore(egc, dcs, &stream->shs, 0, 0); in process_record()
622 write_emulator_blob(egc, stream, rec); in process_record()
626 if (!stream->in_checkpoint) { in process_record()
631 checkpoint_done(egc, stream, 0); in process_record()
635 if (!stream->in_checkpoint_state) { in process_record()
642 checkpoint_state_done(egc, stream, srcs->id); in process_record()
658 stream_complete(egc, stream, rc); in process_record()
663 libxl__stream_read_state *stream, in write_emulator_blob() argument
666 libxl__domain_create_state *dcs = stream->dcs; in write_emulator_blob()
667 libxl__datacopier_state *dc = &stream->emu_dc; in write_emulator_blob()
669 STATE_AO_GC(stream->ao); in write_emulator_blob()
682 assert(stream->emu_carefd == NULL); in write_emulator_blob()
685 stream->emu_carefd = libxl__carefd_opened(CTX, writefd); in write_emulator_blob()
694 dc->ao = stream->ao; in write_emulator_blob()
713 stream_complete(egc, stream, rc); in write_emulator_blob()
720 libxl__stream_read_state *stream = CONTAINER_OF(dc, *stream, emu_dc); in write_emulator_done() local
723 libxl__carefd_close(stream->emu_carefd); in write_emulator_done()
724 stream->emu_carefd = NULL; in write_emulator_done()
729 stream_continue(egc, stream); in write_emulator_done()
734 stream_complete(egc, stream, rc); in write_emulator_done()
740 libxl__stream_read_state *stream, int rc) in stream_complete() argument
742 assert(stream->running); in stream_complete()
744 if (stream->in_checkpoint) { in stream_complete()
752 checkpoint_done(egc, stream, rc); in stream_complete()
756 if (stream->in_checkpoint_state) { in stream_complete()
767 checkpoint_state_done(egc, stream, rc); in stream_complete()
771 stream_done(egc, stream, rc); in stream_complete()
775 libxl__stream_read_state *stream, int rc) in checkpoint_done() argument
779 assert(stream->in_checkpoint); in checkpoint_done()
783 else if (stream->phase == SRS_PHASE_BUFFERING) in checkpoint_done()
788 stream->checkpoint_callback(egc, stream, ret); in checkpoint_done()
790 stream->in_checkpoint = false; in checkpoint_done()
791 stream->phase = SRS_PHASE_NORMAL; in checkpoint_done()
795 libxl__stream_read_state *stream, int rc) in stream_done() argument
799 assert(stream->running); in stream_done()
800 assert(!stream->in_checkpoint); in stream_done()
801 assert(!stream->in_checkpoint_state); in stream_done()
802 stream->running = false; in stream_done()
804 if (stream->incoming_record) in stream_done()
805 free_record(stream->incoming_record); in stream_done()
807 if (stream->emu_carefd) in stream_done()
808 libxl__carefd_close(stream->emu_carefd); in stream_done()
811 if (stream->chs.v2_carefd) in stream_done()
812 libxl__carefd_close(stream->chs.v2_carefd); in stream_done()
816 assert(LIBXL_STAILQ_EMPTY(&stream->record_queue) || stream->rc); in stream_done()
818 LIBXL_STAILQ_FOREACH_SAFE(rec, &stream->record_queue, entry, trec) in stream_done()
821 if (!stream->back_channel) { in stream_done()
832 check_all_finished(egc, stream, rc); in stream_done()
840 libxl__stream_read_state *stream = &dcs->srs; in libxl__xc_domain_restore_done() local
856 check_all_finished(egc, stream, rc); in libxl__xc_domain_restore_done()
864 if (libxl__stream_read_inuse(stream)) { in libxl__xc_domain_restore_done()
867 if (stream->completion_callback) { in libxl__xc_domain_restore_done()
872 stream->completion_callback(egc, stream, 0); in libxl__xc_domain_restore_done()
875 stream_complete(egc, stream, 0); in libxl__xc_domain_restore_done()
884 stream_complete(egc, stream, 0); in libxl__xc_domain_restore_done()
891 stream_continue(egc, stream); in libxl__xc_domain_restore_done()
900 libxl__stream_read_state *stream = CONTAINER_OF(chs, *stream, chs); in conversion_done() local
902 check_all_finished(egc, stream, rc); in conversion_done()
906 libxl__stream_read_state *stream, int rc) in check_all_finished() argument
908 STATE_AO_GC(stream->ao); in check_all_finished()
924 if (stream->sync_teardown) in check_all_finished()
927 if (!stream->rc && rc) { in check_all_finished()
929 stream->rc = rc; in check_all_finished()
930 stream->sync_teardown = true; in check_all_finished()
932 libxl__stream_read_abort(egc, stream, rc); in check_all_finished()
933 libxl__save_helper_abort(egc, &stream->shs); in check_all_finished()
934 libxl__conversion_helper_abort(egc, &stream->chs, rc); in check_all_finished()
936 stream->sync_teardown = false; in check_all_finished()
940 if (libxl__stream_read_inuse(stream) || in check_all_finished()
941 libxl__save_helper_inuse(&stream->shs) || in check_all_finished()
942 libxl__conversion_helper_inuse(&stream->chs)) in check_all_finished()
945 if (stream->completion_callback) in check_all_finished()
947 stream->completion_callback(egc, stream, stream->rc); in check_all_finished()
953 libxl__stream_read_state *stream) in libxl__stream_read_checkpoint_state() argument
955 assert(stream->running); in libxl__stream_read_checkpoint_state()
956 assert(!stream->in_checkpoint); in libxl__stream_read_checkpoint_state()
957 assert(!stream->in_checkpoint_state); in libxl__stream_read_checkpoint_state()
958 stream->in_checkpoint_state = true; in libxl__stream_read_checkpoint_state()
960 setup_read_record(egc, stream); in libxl__stream_read_checkpoint_state()
964 libxl__stream_read_state *stream, int rc) in checkpoint_state_done() argument
966 assert(stream->in_checkpoint_state); in checkpoint_state_done()
967 stream->in_checkpoint_state = false; in checkpoint_state_done()
968 stream->checkpoint_callback(egc, stream, rc); in checkpoint_state_done()