On Mon, Nov 30, 2015 at 02:34:40PM +0000, Chris Wilson wrote: > +bool intel_breadcrumbs_add_waiter(struct drm_i915_gem_request *request) > +{ > + struct intel_breadcrumbs *b = &request->i915->breadcrumbs; > + struct intel_breadcrumbs_engine *be = &b->engine[request->ring->id]; > + bool first = false; > + > + spin_lock(&be->lock); > + if (request->waiters_count++ == 0) { > + struct rb_node **p, *parent; > + > + if (be->first_waiter == NULL) > + wake_up_process(b->task); Oh, the irony. Converting the other side to a lockless READ_ONCE() means that I do know have to kick after setting be->first_waiter and not rely on the spinlock serialising the reads. -Chris -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx