• Home
  • Raw
  • Download

Lines Matching refs:fence

54 	struct vmw_fence_obj fence;  member
77 struct vmw_fence_obj *fence; member
85 fman_from_fence(struct vmw_fence_obj *fence) in fman_from_fence() argument
87 return container_of(fence->base.lock, struct vmw_fence_manager, lock); in fman_from_fence()
112 static void vmw_fence_obj_destroy(struct fence *f) in vmw_fence_obj_destroy()
114 struct vmw_fence_obj *fence = in vmw_fence_obj_destroy() local
117 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_fence_obj_destroy()
121 list_del_init(&fence->head); in vmw_fence_obj_destroy()
124 fence->destroy(fence); in vmw_fence_obj_destroy()
127 static const char *vmw_fence_get_driver_name(struct fence *f) in vmw_fence_get_driver_name()
132 static const char *vmw_fence_get_timeline_name(struct fence *f) in vmw_fence_get_timeline_name()
137 static bool vmw_fence_enable_signaling(struct fence *f) in vmw_fence_enable_signaling()
139 struct vmw_fence_obj *fence = in vmw_fence_enable_signaling() local
142 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_fence_enable_signaling()
147 if (seqno - fence->base.seqno < VMW_FENCE_WRAP) in vmw_fence_enable_signaling()
161 vmwgfx_wait_cb(struct fence *fence, struct fence_cb *cb) in vmwgfx_wait_cb() argument
171 static long vmw_fence_wait(struct fence *f, bool intr, signed long timeout) in vmw_fence_wait()
173 struct vmw_fence_obj *fence = in vmw_fence_wait() local
176 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_fence_wait()
182 if (likely(vmw_fence_obj_signaled(fence))) in vmw_fence_wait()
324 struct vmw_fence_obj *fence, u32 seqno, in vmw_fence_obj_init() argument
325 void (*destroy) (struct vmw_fence_obj *fence)) in vmw_fence_obj_init()
330 fence_init(&fence->base, &vmw_fence_ops, &fman->lock, in vmw_fence_obj_init()
332 INIT_LIST_HEAD(&fence->seq_passed_actions); in vmw_fence_obj_init()
333 fence->destroy = destroy; in vmw_fence_obj_init()
340 list_add_tail(&fence->head, &fman->fence_list); in vmw_fence_obj_init()
390 struct vmw_fence_obj *fence; in vmw_fence_goal_new_locked() local
401 list_for_each_entry(fence, &fman->fence_list, head) { in vmw_fence_goal_new_locked()
402 if (!list_empty(&fence->seq_passed_actions)) { in vmw_fence_goal_new_locked()
404 vmw_mmio_write(fence->base.seqno, in vmw_fence_goal_new_locked()
429 static bool vmw_fence_goal_check_locked(struct vmw_fence_obj *fence) in vmw_fence_goal_check_locked() argument
431 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_fence_goal_check_locked()
435 if (fence_is_signaled_locked(&fence->base)) in vmw_fence_goal_check_locked()
441 goal_seqno - fence->base.seqno < VMW_FENCE_WRAP)) in vmw_fence_goal_check_locked()
444 vmw_mmio_write(fence->base.seqno, fifo_mem + SVGA_FIFO_FENCE_GOAL); in vmw_fence_goal_check_locked()
452 struct vmw_fence_obj *fence, *next_fence; in __vmw_fences_update() local
460 list_for_each_entry_safe(fence, next_fence, &fman->fence_list, head) { in __vmw_fences_update()
461 if (seqno - fence->base.seqno < VMW_FENCE_WRAP) { in __vmw_fences_update()
462 list_del_init(&fence->head); in __vmw_fences_update()
463 fence_signal_locked(&fence->base); in __vmw_fences_update()
465 list_splice_init(&fence->seq_passed_actions, in __vmw_fences_update()
500 bool vmw_fence_obj_signaled(struct vmw_fence_obj *fence) in vmw_fence_obj_signaled() argument
502 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_fence_obj_signaled()
504 if (test_bit(FENCE_FLAG_SIGNALED_BIT, &fence->base.flags)) in vmw_fence_obj_signaled()
509 return fence_is_signaled(&fence->base); in vmw_fence_obj_signaled()
512 int vmw_fence_obj_wait(struct vmw_fence_obj *fence, bool lazy, in vmw_fence_obj_wait() argument
515 long ret = fence_wait_timeout(&fence->base, interruptible, timeout); in vmw_fence_obj_wait()
525 void vmw_fence_obj_flush(struct vmw_fence_obj *fence) in vmw_fence_obj_flush() argument
527 struct vmw_private *dev_priv = fman_from_fence(fence)->dev_priv; in vmw_fence_obj_flush()
532 static void vmw_fence_destroy(struct vmw_fence_obj *fence) in vmw_fence_destroy() argument
534 fence_free(&fence->base); in vmw_fence_destroy()
541 struct vmw_fence_obj *fence; in vmw_fence_create() local
544 fence = kzalloc(sizeof(*fence), GFP_KERNEL); in vmw_fence_create()
545 if (unlikely(fence == NULL)) in vmw_fence_create()
548 ret = vmw_fence_obj_init(fman, fence, seqno, in vmw_fence_create()
553 *p_fence = fence; in vmw_fence_create()
557 kfree(fence); in vmw_fence_create()
562 static void vmw_user_fence_destroy(struct vmw_fence_obj *fence) in vmw_user_fence_destroy() argument
565 container_of(fence, struct vmw_user_fence, fence); in vmw_user_fence_destroy()
566 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_user_fence_destroy()
581 struct vmw_fence_obj *fence = &ufence->fence; in vmw_user_fence_base_release() local
584 vmw_fence_obj_unreference(&fence); in vmw_user_fence_base_release()
615 ret = vmw_fence_obj_init(fman, &ufence->fence, seqno, in vmw_user_fence_create()
626 tmp = vmw_fence_obj_reference(&ufence->fence); in vmw_user_fence_create()
640 *p_fence = &ufence->fence; in vmw_user_fence_create()
645 tmp = &ufence->fence; in vmw_user_fence_create()
670 struct vmw_fence_obj *fence = in vmw_fence_fifo_down() local
673 fence_get(&fence->base); in vmw_fence_fifo_down()
676 ret = vmw_fence_obj_wait(fence, false, false, in vmw_fence_fifo_down()
680 list_del_init(&fence->head); in vmw_fence_fifo_down()
681 fence_signal(&fence->base); in vmw_fence_fifo_down()
683 list_splice_init(&fence->seq_passed_actions, in vmw_fence_fifo_down()
688 BUG_ON(!list_empty(&fence->head)); in vmw_fence_fifo_down()
689 fence_put(&fence->base); in vmw_fence_fifo_down()
747 struct vmw_fence_obj *fence; in vmw_fence_obj_wait_ioctl() local
769 fence = &(container_of(base, struct vmw_user_fence, base)->fence); in vmw_fence_obj_wait_ioctl()
773 ret = ((vmw_fence_obj_signaled(fence)) ? in vmw_fence_obj_wait_ioctl()
780 ret = vmw_fence_obj_wait(fence, arg->lazy, true, timeout); in vmw_fence_obj_wait_ioctl()
801 struct vmw_fence_obj *fence; in vmw_fence_obj_signaled_ioctl() local
810 fence = &(container_of(base, struct vmw_user_fence, base)->fence); in vmw_fence_obj_signaled_ioctl()
811 fman = fman_from_fence(fence); in vmw_fence_obj_signaled_ioctl()
813 arg->signaled = vmw_fence_obj_signaled(fence); in vmw_fence_obj_signaled_ioctl()
929 struct vmw_fence_manager *fman = fman_from_fence(eaction->fence); in vmw_event_fence_action_cleanup()
936 vmw_fence_obj_unreference(&eaction->fence); in vmw_event_fence_action_cleanup()
950 static void vmw_fence_obj_add_action(struct vmw_fence_obj *fence, in vmw_fence_obj_add_action() argument
953 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_fence_obj_add_action()
961 if (fence_is_signaled_locked(&fence->base)) { in vmw_fence_obj_add_action()
968 list_add_tail(&action->head, &fence->seq_passed_actions); in vmw_fence_obj_add_action()
974 run_update = vmw_fence_goal_check_locked(fence); in vmw_fence_obj_add_action()
1006 struct vmw_fence_obj *fence, in vmw_event_fence_action_queue() argument
1013 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_event_fence_action_queue()
1027 eaction->fence = vmw_fence_obj_reference(fence); in vmw_event_fence_action_queue()
1036 vmw_fence_obj_add_action(fence, &eaction->action); in vmw_event_fence_action_queue()
1047 struct vmw_fence_obj *fence, in vmw_event_fence_action_create() argument
1053 struct vmw_fence_manager *fman = fman_from_fence(fence); in vmw_event_fence_action_create()
1089 ret = vmw_event_fence_action_queue(file_priv, fence, in vmw_event_fence_action_create()
1095 ret = vmw_event_fence_action_queue(file_priv, fence, in vmw_event_fence_action_create()
1121 struct vmw_fence_obj *fence = NULL; in vmw_fence_event_ioctl() local
1142 fence = &(container_of(base, struct vmw_user_fence, in vmw_fence_event_ioctl()
1143 base)->fence); in vmw_fence_event_ioctl()
1144 (void) vmw_fence_obj_reference(fence); in vmw_fence_event_ioctl()
1162 if (!fence) { in vmw_fence_event_ioctl()
1164 &fence, in vmw_fence_event_ioctl()
1173 BUG_ON(fence == NULL); in vmw_fence_event_ioctl()
1175 ret = vmw_event_fence_action_create(file_priv, fence, in vmw_fence_event_ioctl()
1185 vmw_execbuf_copy_fence_user(dev_priv, vmw_fp, 0, user_fence_rep, fence, in vmw_fence_event_ioctl()
1187 vmw_fence_obj_unreference(&fence); in vmw_fence_event_ioctl()
1193 vmw_fence_obj_unreference(&fence); in vmw_fence_event_ioctl()