Re: [PATCH 43/49] drm/i915/bdw: Handle context switch events

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



It seems to be completely managed by SW, for SW (or, at least, it does not seem to have any visible effect in the HW). But you are right, it is probably worth updating.

-- Oscar

> -----Original Message-----
> From: Lespiau, Damien
> Sent: Thursday, April 03, 2014 3:25 PM
> To: Mateo Lozano, Oscar
> Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; Daniel, Thomas
> Subject: Re:  [PATCH 43/49] drm/i915/bdw: Handle context switch
> events
> 
> On Thu, Mar 27, 2014 at 06:00:12PM +0000, oscar.mateo@xxxxxxxxx wrote:
> > +void gen8_handle_context_events(struct intel_engine *ring) {
> > +	struct drm_i915_private *dev_priv = ring->dev->dev_private;
> > +	u32 status_pointer;
> > +	u8 read_pointer;
> > +	u8 write_pointer;
> > +	u32 status;
> > +	u32 status_id;
> > +	u32 submit_contexts = 0;
> > +
> > +	status_pointer = I915_READ(RING_CONTEXT_STATUS_PTR(ring));
> > +
> > +	read_pointer = ring->next_context_status_buffer;
> > +	write_pointer = status_pointer & 0x07;
> > +	if (read_pointer > write_pointer)
> > +		write_pointer += 6;
> > +
> > +	spin_lock(&ring->execlist_lock);
> > +
> > +	while (read_pointer < write_pointer) {
> > +		read_pointer++;
> > +		status = I915_READ(RING_CONTEXT_STATUS_BUF(ring) +
> > +				(read_pointer % 6) * 8);
> > +		status_id = I915_READ(RING_CONTEXT_STATUS_BUF(ring) +
> > +				(read_pointer % 6) * 8 + 4);
> > +
> > +		if (status & GEN8_CTX_STATUS_ELEMENT_SWITCH) {
> > +			if (check_remove_request(ring, status_id))
> > +				submit_contexts++;
> > +		} else if (status & GEN8_CTX_STATUS_COMPLETE) {
> > +			if (check_remove_request(ring, status_id))
> > +				submit_contexts++;
> > +		}
> > +	}
> > +
> > +	if (submit_contexts != 0)
> > +		gen8_switch_context_unqueue(ring);
> > +
> > +	spin_unlock(&ring->execlist_lock);
> > +
> > +	WARN(submit_contexts > 2, "More than two context complete
> events?\n");
> > +	ring->next_context_status_buffer = write_pointer % 6; }
> 
> I'm a bit suprised that we never update the read pointer in the
> CONTEXT_STATUS_PTR when we consume entries from
> CONTEXT_STATUS_BUF.
> 
> Are we sure this field isn't used by hw at all to figure out if the circular buffer
> has some free space?
> 
> --
> Damien
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux