You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
drm/i915: Derive GEM requests from dma-fence
dma-buf provides a generic fence class for interoperation between drivers. Internally we use the request structure as a fence, and so with only a little bit of interfacing we can rebase those requests on top of dma-buf fences. This will allow us, in the future, to pass those fences back to userspace or between drivers. v2: The fence_context needs to be globally unique, not just unique to this device. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Jesse Barnes <jbarnes@virtuousgeek.org> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1469002875-2335-4-git-send-email-chris@chris-wilson.co.uk
This commit is contained in:
@@ -1348,7 +1348,7 @@ static int gen8_rcs_signal(struct drm_i915_gem_request *signaller_req,
|
||||
PIPE_CONTROL_CS_STALL);
|
||||
intel_ring_emit(signaller, lower_32_bits(gtt_offset));
|
||||
intel_ring_emit(signaller, upper_32_bits(gtt_offset));
|
||||
intel_ring_emit(signaller, signaller_req->seqno);
|
||||
intel_ring_emit(signaller, signaller_req->fence.seqno);
|
||||
intel_ring_emit(signaller, 0);
|
||||
intel_ring_emit(signaller, MI_SEMAPHORE_SIGNAL |
|
||||
MI_SEMAPHORE_TARGET(waiter->hw_id));
|
||||
@@ -1386,7 +1386,7 @@ static int gen8_xcs_signal(struct drm_i915_gem_request *signaller_req,
|
||||
intel_ring_emit(signaller, lower_32_bits(gtt_offset) |
|
||||
MI_FLUSH_DW_USE_GTT);
|
||||
intel_ring_emit(signaller, upper_32_bits(gtt_offset));
|
||||
intel_ring_emit(signaller, signaller_req->seqno);
|
||||
intel_ring_emit(signaller, signaller_req->fence.seqno);
|
||||
intel_ring_emit(signaller, MI_SEMAPHORE_SIGNAL |
|
||||
MI_SEMAPHORE_TARGET(waiter->hw_id));
|
||||
intel_ring_emit(signaller, 0);
|
||||
@@ -1419,7 +1419,7 @@ static int gen6_signal(struct drm_i915_gem_request *signaller_req,
|
||||
if (i915_mmio_reg_valid(mbox_reg)) {
|
||||
intel_ring_emit(signaller, MI_LOAD_REGISTER_IMM(1));
|
||||
intel_ring_emit_reg(signaller, mbox_reg);
|
||||
intel_ring_emit(signaller, signaller_req->seqno);
|
||||
intel_ring_emit(signaller, signaller_req->fence.seqno);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1455,7 +1455,7 @@ gen6_add_request(struct drm_i915_gem_request *req)
|
||||
intel_ring_emit(engine, MI_STORE_DWORD_INDEX);
|
||||
intel_ring_emit(engine,
|
||||
I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
|
||||
intel_ring_emit(engine, req->seqno);
|
||||
intel_ring_emit(engine, req->fence.seqno);
|
||||
intel_ring_emit(engine, MI_USER_INTERRUPT);
|
||||
__intel_ring_advance(engine);
|
||||
|
||||
@@ -1704,7 +1704,7 @@ i9xx_add_request(struct drm_i915_gem_request *req)
|
||||
intel_ring_emit(engine, MI_STORE_DWORD_INDEX);
|
||||
intel_ring_emit(engine,
|
||||
I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
|
||||
intel_ring_emit(engine, req->seqno);
|
||||
intel_ring_emit(engine, req->fence.seqno);
|
||||
intel_ring_emit(engine, MI_USER_INTERRUPT);
|
||||
__intel_ring_advance(engine);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user