clflush
schedule_work(&clflush->work);
dma_fence_put(&clflush->dma);
struct clflush *clflush;
clflush = NULL;
clflush = kmalloc(sizeof(*clflush), M_DRM, GFP_KERNEL);
if (clflush) {
dma_fence_init(&clflush->dma,
i915_sw_fence_init(&clflush->wait, i915_clflush_notify);
clflush->obj = i915_gem_object_get(obj);
INIT_WORK(&clflush->work, i915_clflush_work);
dma_fence_get(&clflush->dma);
i915_sw_fence_await_reservation(&clflush->wait,
reservation_object_add_excl_fence(obj->resv, &clflush->dma);
i915_sw_fence_commit(&clflush->wait);
struct clflush *clflush = container_of(fence, typeof(*clflush), dma);
i915_sw_fence_fini(&clflush->wait);
BUILD_BUG_ON(offsetof(typeof(*clflush), dma));
dma_fence_free(&clflush->dma);
struct clflush *clflush = container_of(work, typeof(*clflush), work);
struct drm_i915_gem_object *obj = clflush->obj;
dma_fence_signal(&clflush->dma);
dma_fence_put(&clflush->dma);
struct clflush *clflush = container_of(fence, typeof(*clflush), wait);
clflush(daddr);