Re: About CTX_CONTEXT_CONTROL initialization in populate_lr_context() intel_lrc.c

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

 



Hi Daniel & Gordon & Thomas:
    Just found that, my bad. Thanks for giving so much introduction for me, a beginner. :)  Let me cook a patch for it. 
   BTW: CTXT_SR_CTRL register looks like a register needs mask. Does the bit 0 restore inhibit also needs _MASKED_BIT_ENABLE here? It looks like bit 0 is not set with _MASKED_BIT_ENABLE().

-----Original Message-----
From: Daniel Vetter [mailto:daniel.vetter@xxxxxxxx] On Behalf Of Daniel Vetter
Sent: Wednesday, February 11, 2015 6:19 AM
To: Gordon, David S
Cc: Wang, Zhi A; Daniel, Thomas; Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
Subject: Re:  About CTX_CONTEXT_CONTROL initialization in populate_lr_context() intel_lrc.c

On Tue, Feb 10, 2015 at 04:25:20PM +0000, Dave Gordon wrote:
> On 09/02/15 15:05, Wang, Zhi A wrote:
> > Hi Gurus:
> > Forgive my junior HW knowledge, I just found that in execlist 
> > context initialization function populate_lr_context(), this line:
> >   
> >           reg_state[CTX_CONTEXT_CONTROL+1] =
> >                           _MASKED_BIT_ENABLE((1<<3) | 
> > MI_RESTORE_INHIBIT);
> >   
> > It seems the "Inhibit Synchronous Context Switch" bit is not set 
> > here, so when HW is trying to wait some events, e.g. semaphore, 
> > according to Bspec, per my basic understanding, it will switch out 
> > current context with some reason bit set. Here comes my question, I 
> > think if this situation happen, should i915 remember this context 
> > and try to re-schedule it in a proper time, e.g. before submitting a 
> > new context until the context_completed bit in CSB is set? I don't 
> > find a register that will remember the context switched out by 
> > waiting event, so I think it should be i915 to handle this situation 
> > or just set "Inhibit Synchronous Context Switch" bit here?...
> 
> But that's exactly what it does already ... it sets bit 3, which is 
> the "Inhibit Synchronous Context Switch" bit you refer to.
> 
> What's wrong here is that it should use a #define for this bit, and 
> for the "Restore Inhibit" bit -- for which it's actually using a value 
> defined in a completely different context (no pun intended), namely 
> the bits in a MI_SET_CONTEXT *instruction*. It just happens to work 
> because they have the same numerical value. So, what we need is:
> 
> <intel_lrc.h>
> 
> #define RING_CONTEXT_CONTROL(ring)   	   ((ring)->mmio_base+0x244)
> #define	  CTX_CTRL_INHIBIT_SYN_CTX_SWITCH	(1 << 3)
> #define	  CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT	(1 << 0)
> 
> and then change the line you pointed out to use the correct symbolic names.

Can I have this in patch form please? I.e. convert to diff, paste the above into commit message and add sob line.

Thanks, Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
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