From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>,
intel-gfx@lists.freedesktop.org,
Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: Re: [PATCH] drm/i915: Seal busy-ioctl uABI and prevent leaking of internal ids
Date: Fri, 15 Jan 2016 13:22:39 +0000 [thread overview]
Message-ID: <5698F29F.5030008@linux.intel.com> (raw)
In-Reply-To: <20160115122730.GG8308@nuc-i3427.alporthouse.com>
On 15/01/16 12:27, Chris Wilson wrote:
> On Fri, Jan 15, 2016 at 11:58:32AM +0000, Tvrtko Ursulin wrote:
>>
>> On 15/01/16 11:06, Chris Wilson wrote:
>>> Tvrtko was looking through the execbuffer-ioctl and noticed that the
>>> uABI was tightly coupled to our internal engine identifiers. Close
>>> inspection also revealed that we leak those internal engine identifiers
>>> through the busy-ioctl, and those internal identifiers already do not
>>> match the user identifiers. Fortuitiously, there is only one user of the
>>> set of busy rings from the busy-ioctl, and they only wish to choose
>>> between the RENDER and the BLT engines.
>>>
>>> Let's fix the userspace ABI while we still can.
>>>
>>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>>> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>>> ---
>>> drivers/gpu/drm/i915/i915_gem.c | 18 ++++++++++++++----
>>> drivers/gpu/drm/i915/intel_lrc.c | 5 +++++
>>> drivers/gpu/drm/i915/intel_ringbuffer.c | 5 +++++
>>> drivers/gpu/drm/i915/intel_ringbuffer.h | 1 +
>>> 4 files changed, 25 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
>>> index bb44bad15403..85797813a3de 100644
>>> --- a/drivers/gpu/drm/i915/i915_gem.c
>>> +++ b/drivers/gpu/drm/i915/i915_gem.c
>>> @@ -4328,10 +4328,20 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
>>> if (ret)
>>> goto unref;
>>>
>>> - BUILD_BUG_ON(I915_NUM_RINGS > 16);
>>> - args->busy = obj->active << 16;
>>> - if (obj->last_write_req)
>>> - args->busy |= obj->last_write_req->ring->id;
>>> + args->busy = 0;
>>> + if (obj->active) {
>>> + int i;
>>> +
>>> + for (i = 0; i < I915_NUM_RINGS; i++) {
>>> + struct drm_i915_gem_request *req;
>>> +
>>> + req = obj->last_read_req[i];
>>> + if (req)
>>> + args->busy |= 1 << (16 + req->ring->exec_id);
>>
>> If I got it right bit 16 was RCS, now will always be clear. And
>> blitter was bit 17 and now is 19.
>
> Sssh. You weren't meant to point that out.
>
> I am willing to take the hit in order to decouple the uABI from
> internals.
>
> I am also willing to codify this busy-ioctl ABI into igt!
Looks like your DDX is the only user not using it in the boolean mode?
And libdrm is a bit confused in its return statements:
ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_BUSY, &busy);
if (ret == 0) {
bo_gem->idle = !busy.busy;
return busy.busy;
} else {
return false;
}
return (ret == 0 && busy.busy);
Looks like it was a boolean as well until commit
02f93c21e6e1c3dad9d99349989daa84a8c0b5fb quite possibly by accident
started exposing the bits.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-01-15 13:22 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-15 11:06 [PATCH] drm/i915: Seal busy-ioctl uABI and prevent leaking of internal ids Chris Wilson
2016-01-15 11:24 ` ✗ Fi.CI.BAT: warning for " Patchwork
2016-01-21 11:05 ` Tvrtko Ursulin
2016-01-15 11:58 ` [PATCH] " Tvrtko Ursulin
2016-01-15 12:27 ` Chris Wilson
2016-01-15 13:22 ` Tvrtko Ursulin [this message]
2016-01-15 13:57 ` Chris Wilson
2016-01-15 16:02 ` Tvrtko Ursulin
2016-01-15 16:19 ` Chris Wilson
2016-01-15 16:24 ` Tvrtko Ursulin
2016-01-15 13:53 ` [PATCH igt] tests: Add gem_busy Chris Wilson
2016-01-15 14:45 ` Tvrtko Ursulin
2016-01-15 15:24 ` Chris Wilson
2016-01-15 16:51 ` [PATCH v2] drm/i915: Seal busy-ioctl uABI and prevent leaking of internal ids Chris Wilson
2016-01-15 17:07 ` Chris Wilson
2016-01-21 10:38 ` Daniel Vetter
2016-01-15 17:49 ` ✗ Fi.CI.BAT: failure for drm/i915: Seal busy-ioctl uABI and prevent leaking of internal ids (rev2) Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5698F29F.5030008@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=daniel.vetter@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.