Lines Matching refs:work
66 void amdgpu_display_hotplug_work_func(struct work_struct *work) in amdgpu_display_hotplug_work_func() argument
68 struct amdgpu_device *adev = container_of(work, struct amdgpu_device, in amdgpu_display_hotplug_work_func()
69 hotplug_work.work); in amdgpu_display_hotplug_work_func()
93 struct amdgpu_flip_work *work = in amdgpu_display_flip_callback() local
97 schedule_work(&work->flip_work.work); in amdgpu_display_flip_callback()
100 static bool amdgpu_display_flip_handle_fence(struct amdgpu_flip_work *work, in amdgpu_display_flip_handle_fence() argument
110 if (!dma_fence_add_callback(fence, &work->cb, in amdgpu_display_flip_handle_fence()
121 container_of(__work, struct delayed_work, work); in amdgpu_display_flip_work_func()
122 struct amdgpu_flip_work *work = in amdgpu_display_flip_work_func() local
124 struct amdgpu_device *adev = work->adev; in amdgpu_display_flip_work_func()
125 struct amdgpu_crtc *amdgpu_crtc = adev->mode_info.crtcs[work->crtc_id]; in amdgpu_display_flip_work_func()
132 for (i = 0; i < work->shared_count; ++i) in amdgpu_display_flip_work_func()
133 if (amdgpu_display_flip_handle_fence(work, &work->shared[i])) in amdgpu_display_flip_work_func()
140 (amdgpu_display_get_crtc_scanoutpos(adev_to_drm(adev), work->crtc_id, 0, in amdgpu_display_flip_work_func()
145 (int)(work->target_vblank - in amdgpu_display_flip_work_func()
147 schedule_delayed_work(&work->flip_work, usecs_to_jiffies(1000)); in amdgpu_display_flip_work_func()
155 adev->mode_info.funcs->page_flip(adev, work->crtc_id, work->base, work->async); in amdgpu_display_flip_work_func()
164 amdgpu_crtc->crtc_id, amdgpu_crtc, work); in amdgpu_display_flip_work_func()
173 struct amdgpu_flip_work *work = in amdgpu_display_unpin_work_func() local
178 r = amdgpu_bo_reserve(work->old_abo, true); in amdgpu_display_unpin_work_func()
180 amdgpu_bo_unpin(work->old_abo); in amdgpu_display_unpin_work_func()
181 amdgpu_bo_unreserve(work->old_abo); in amdgpu_display_unpin_work_func()
185 amdgpu_bo_unref(&work->old_abo); in amdgpu_display_unpin_work_func()
186 kfree(work->shared); in amdgpu_display_unpin_work_func()
187 kfree(work); in amdgpu_display_unpin_work_func()
200 struct amdgpu_flip_work *work; in amdgpu_display_crtc_page_flip_target() local
206 work = kzalloc(sizeof(*work), GFP_KERNEL); in amdgpu_display_crtc_page_flip_target()
207 if (work == NULL) in amdgpu_display_crtc_page_flip_target()
210 INIT_DELAYED_WORK(&work->flip_work, amdgpu_display_flip_work_func); in amdgpu_display_crtc_page_flip_target()
211 INIT_WORK(&work->unpin_work, amdgpu_display_unpin_work_func); in amdgpu_display_crtc_page_flip_target()
213 work->event = event; in amdgpu_display_crtc_page_flip_target()
214 work->adev = adev; in amdgpu_display_crtc_page_flip_target()
215 work->crtc_id = amdgpu_crtc->crtc_id; in amdgpu_display_crtc_page_flip_target()
216 work->async = (page_flip_flags & DRM_MODE_PAGE_FLIP_ASYNC) != 0; in amdgpu_display_crtc_page_flip_target()
222 work->old_abo = gem_to_amdgpu_bo(obj); in amdgpu_display_crtc_page_flip_target()
223 amdgpu_bo_ref(work->old_abo); in amdgpu_display_crtc_page_flip_target()
252 &work->shared_count, in amdgpu_display_crtc_page_flip_target()
253 &work->shared); in amdgpu_display_crtc_page_flip_target()
263 work->base = amdgpu_bo_gpu_offset(new_abo); in amdgpu_display_crtc_page_flip_target()
264 work->target_vblank = target - (uint32_t)drm_crtc_vblank_count(crtc) + in amdgpu_display_crtc_page_flip_target()
277 amdgpu_crtc->pflip_works = work; in amdgpu_display_crtc_page_flip_target()
281 amdgpu_crtc->crtc_id, amdgpu_crtc, work); in amdgpu_display_crtc_page_flip_target()
285 amdgpu_display_flip_work_func(&work->flip_work.work); in amdgpu_display_crtc_page_flip_target()
301 amdgpu_bo_unref(&work->old_abo); in amdgpu_display_crtc_page_flip_target()
302 for (i = 0; i < work->shared_count; ++i) in amdgpu_display_crtc_page_flip_target()
303 dma_fence_put(work->shared[i]); in amdgpu_display_crtc_page_flip_target()
304 kfree(work->shared); in amdgpu_display_crtc_page_flip_target()
305 kfree(work); in amdgpu_display_crtc_page_flip_target()