Lines Matching refs:s
190 tapdisk_stream_stop(struct tapdisk_stream *s) in tapdisk_stream_stop() argument
192 return ((s->cur == s->end || s->err) && in tapdisk_stream_stop()
193 list_empty(&s->pending_list) && in tapdisk_stream_stop()
194 list_empty(&s->completed_list)); in tapdisk_stream_stop()
205 tapdisk_stream_request_idx(struct tapdisk_stream *s, in tapdisk_stream_request_idx() argument
208 return (req - s->requests); in tapdisk_stream_request_idx()
212 tapdisk_stream_get_request(struct tapdisk_stream *s) in tapdisk_stream_get_request() argument
216 if (list_empty(&s->free_list)) in tapdisk_stream_get_request()
219 req = list_entry(s->free_list.next, in tapdisk_stream_get_request()
229 tapdisk_stream_queue_completed(struct tapdisk_stream *s, in tapdisk_stream_queue_completed() argument
234 list_for_each_entry(itr, &s->completed_list, next) in tapdisk_stream_queue_completed()
240 list_add_tail(&sreq->next, &s->completed_list); in tapdisk_stream_queue_completed()
319 struct tapdisk_stream *s = (struct tapdisk_stream *)arg; in tapdisk_stream_dequeue() local
320 struct tapdisk_stream_request *sreq = s->requests + rsp->id; in tapdisk_stream_dequeue()
325 tapdisk_stream_queue_completed(s, sreq); in tapdisk_stream_dequeue()
327 s->err = EIO; in tapdisk_stream_dequeue()
328 list_add_tail(&sreq->next, &s->free_list); in tapdisk_stream_dequeue()
344 tapdisk_stream_enqueue_copy(struct tapdisk_stream *s, in tapdisk_stream_enqueue_copy() argument
354 sreq = tapdisk_stream_get_request(s); in tapdisk_stream_enqueue_copy()
358 idx = tapdisk_stream_request_idx(s, sreq); in tapdisk_stream_enqueue_copy()
375 s->cur += sreq->secs; in tapdisk_stream_enqueue_copy()
386 list_add_tail(&sreq->next, &s->pending_list); in tapdisk_stream_enqueue_copy()
396 struct tapdisk_stream *s = &stream1; in tapdisk_stream_enqueue1() local
398 vbd = s->vbd; in tapdisk_stream_enqueue1()
401 while (s->cur < s->end && !s->err) { in tapdisk_stream_enqueue1()
407 blk = s->cur >> SPB_SHIFT; in tapdisk_stream_enqueue1()
408 while (s->cur < s->end && vhd1.bat.bat[blk] == DD_BLK_UNUSED) { in tapdisk_stream_enqueue1()
411 s->cur = blk << SPB_SHIFT; in tapdisk_stream_enqueue1()
414 if (s->cur >= s->end) in tapdisk_stream_enqueue1()
417 sreq = tapdisk_stream_get_request(s); in tapdisk_stream_enqueue1()
421 idx = tapdisk_stream_request_idx(s, sreq); in tapdisk_stream_enqueue1()
423 sreq->sec = s->cur; in tapdisk_stream_enqueue1()
425 sreq->seqno = s->started++; in tapdisk_stream_enqueue1()
437 secs = MIN(s->end - s->cur, psize >> SECTOR_SHIFT); in tapdisk_stream_enqueue1()
438 secs = MIN(((blk + 1) << SPB_SHIFT) - s->cur, secs); in tapdisk_stream_enqueue1()
443 s->cur += secs; in tapdisk_stream_enqueue1()
460 list_add_tail(&sreq->next, &s->pending_list); in tapdisk_stream_enqueue1()
472 struct tapdisk_stream *s = &stream2; in tapdisk_stream_enqueue2() local
474 vbd = s->vbd; in tapdisk_stream_enqueue2()
478 if (itr->sec < s->cur) in tapdisk_stream_enqueue2()
480 if (tapdisk_stream_enqueue_copy(s, itr)) in tapdisk_stream_enqueue2()
485 if (itr->sec < s->cur) in tapdisk_stream_enqueue2()
487 if (tapdisk_stream_enqueue_copy(s, itr)) in tapdisk_stream_enqueue2()
513 struct tapdisk_stream *s = (struct tapdisk_stream *)arg; in tapdisk_stream_enqueue() local
515 tapdisk_stream_poll_clear(&s->poll); in tapdisk_stream_enqueue()
522 if (s == &stream1) in tapdisk_stream_enqueue()
524 else if (s == &stream2) in tapdisk_stream_enqueue()
538 tapdisk_stream_open_image(struct tapdisk_stream *s, const char *path, int type) in tapdisk_stream_open_image() argument
543 s->id = tapdisk_stream_count++; in tapdisk_stream_open_image()
545 err = tapdisk_vbd_initialize(s->id); in tapdisk_stream_open_image()
549 s->vbd = tapdisk_server_get_vbd(s->id); in tapdisk_stream_open_image()
550 if (!s->vbd) { in tapdisk_stream_open_image()
555 tapdisk_vbd_set_callback(s->vbd, tapdisk_stream_dequeue, s); in tapdisk_stream_open_image()
557 err = tapdisk_vbd_open_vdi(s->vbd, path, type, in tapdisk_stream_open_image()
563 s->vbd->reopened = 1; in tapdisk_stream_open_image()
565 err = tapdisk_vbd_get_image_info(s->vbd, &image); in tapdisk_stream_open_image()
571 s->start = 0; in tapdisk_stream_open_image()
572 s->cur = s->start; in tapdisk_stream_open_image()
573 s->end = image.size; in tapdisk_stream_open_image()
584 tapdisk_stream_close_image(struct tapdisk_stream *s) in tapdisk_stream_close_image() argument
588 vbd = tapdisk_server_get_vbd(s->id); in tapdisk_stream_close_image()
595 s->vbd = NULL; in tapdisk_stream_close_image()
600 tapdisk_stream_initialize_requests(struct tapdisk_stream *s) in tapdisk_stream_initialize_requests() argument
606 ring = &s->vbd->ring; in tapdisk_stream_initialize_requests()
619 struct tapdisk_stream_request *req = s->requests + i; in tapdisk_stream_initialize_requests()
621 list_add_tail(&req->next, &s->free_list); in tapdisk_stream_initialize_requests()
628 tapdisk_stream_register_enqueue_event(struct tapdisk_stream *s) in tapdisk_stream_register_enqueue_event() argument
631 struct tapdisk_stream_poll *p = &s->poll; in tapdisk_stream_register_enqueue_event()
639 tapdisk_stream_enqueue, s); in tapdisk_stream_register_enqueue_event()
643 s->enqueue_event_id = err; in tapdisk_stream_register_enqueue_event()
653 tapdisk_stream_unregister_enqueue_event(struct tapdisk_stream *s) in tapdisk_stream_unregister_enqueue_event() argument
655 if (s->enqueue_event_id) { in tapdisk_stream_unregister_enqueue_event()
656 tapdisk_server_unregister_event(s->enqueue_event_id); in tapdisk_stream_unregister_enqueue_event()
657 s->enqueue_event_id = 0; in tapdisk_stream_unregister_enqueue_event()
659 tapdisk_stream_poll_close(&s->poll); in tapdisk_stream_unregister_enqueue_event()
663 tapdisk_stream_initialize(struct tapdisk_stream *s) in tapdisk_stream_initialize() argument
665 memset(s, 0, sizeof(*s)); in tapdisk_stream_initialize()
666 INIT_LIST_HEAD(&s->free_list); in tapdisk_stream_initialize()
667 INIT_LIST_HEAD(&s->pending_list); in tapdisk_stream_initialize()
668 INIT_LIST_HEAD(&s->completed_list); in tapdisk_stream_initialize()
672 tapdisk_stream_open(struct tapdisk_stream *s, const char *arg) in tapdisk_stream_open() argument
681 tapdisk_stream_initialize(s); in tapdisk_stream_open()
683 err = tapdisk_stream_open_image(s, path, type); in tapdisk_stream_open()
687 err = tapdisk_stream_initialize_requests(s); in tapdisk_stream_open()
691 err = tapdisk_stream_register_enqueue_event(s); in tapdisk_stream_open()
695 tapdisk_stream_enqueue(s->enqueue_event_id, in tapdisk_stream_open()
696 SCHEDULER_POLL_READ_FD, s); in tapdisk_stream_open()
702 tapdisk_stream_release(struct tapdisk_stream *s) in tapdisk_stream_release() argument
704 tapdisk_stream_close_image(s); in tapdisk_stream_release()
705 tapdisk_stream_unregister_enqueue_event(s); in tapdisk_stream_release()
709 tapdisk_stream_run(struct tapdisk_stream *s) in tapdisk_stream_run() argument
711 tapdisk_stream_enqueue(s->enqueue_event_id, SCHEDULER_POLL_READ_FD, s); in tapdisk_stream_run()
713 return s->err; in tapdisk_stream_run()