[Intel-gfx] [PATCH 18/21] drm/i915: Embed signaling node into the GEM request

Chris Wilson chris at chris-wilson.co.uk
Wed Jun 8 09:54:08 UTC 2016


On Tue, Jun 07, 2016 at 01:31:25PM +0100, Tvrtko Ursulin wrote:
> >@@ -418,20 +423,23 @@ int intel_engine_enable_signaling(struct drm_i915_gem_request *request)
> >  	struct intel_engine_cs *engine = request->engine;
> >  	struct intel_breadcrumbs *b = &engine->breadcrumbs;
> >  	struct rb_node *parent, **p;
> >-	struct signal *signal;
> >  	bool first, wakeup;
> >
> >  	if (unlikely(IS_ERR(b->signaler)))
> >  		return PTR_ERR(b->signaler);
> >
> >-	signal = kmalloc(sizeof(*signal), GFP_ATOMIC);
> >-	if (unlikely(!signal))
> >-		return -ENOMEM;
> >+	if (unlikely(READ_ONCE(request->signaling.wait.task)))
> >+		return 0;
> 
> Hmm it will depend on following patches whether this is safe. I
> don't like the explosion of READ_ONCE and smp_store_mb's in these
> patches. Something is bound to be broken.

This one is trivial :)
 
> You even check it below under the lock. So I am not sure this
> optimisation is worth it. Maybe leave it for later?

I was just worrying about contention since the breadcrumbs lock is being
used to guard both trees and contention in the waiters is noticeable.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list