Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9808edd authored by Chris Wilson's avatar Chris Wilson Committed by Daniel Vetter
Browse files

drm/i915: Return a mask of the active rings in the high word of busy_ioctl



The intention is to help select which engine to use for copies with
interoperating clients - such as a GL client making a request to the X
server to perform a SwapBuffers, which may require copying from the
active GL back buffer to the X front buffer.

We choose to report a mask of the active rings to future proof the
interface against any changes which may allow for the object to reside
upon multiple rings.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
[danvet: bikeshed away the write ring mask and add the explanation
Chris sent in a follow-up mail why we decided to use masks.]
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent c0c7babc
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3400,6 +3400,10 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
	ret = i915_gem_object_flush_active(obj);

	args->busy = obj->active;
	if (obj->ring) {
		BUILD_BUG_ON(I915_NUM_RINGS > 16);
		args->busy |= intel_ring_flag(obj->ring) << 16;
	}

	drm_gem_object_unreference(&obj->base);
unlock:
+5 −1
Original line number Diff line number Diff line
@@ -704,7 +704,11 @@ struct drm_i915_gem_busy {
	/** Handle of the buffer to check for busy */
	__u32 handle;

	/** Return busy status (1 if busy, 0 if idle) */
	/** Return busy status (1 if busy, 0 if idle).
	 * The high word is used to indicate on which rings the object
	 * currently resides:
	 *  16:31 - busy (r or r/w) rings (16 render, 17 bsd, 18 blt, etc)
	 */
	__u32 busy;
};