[Intel-gfx] [PATCH] drm/i915/execlists: Disable preemption under GVT

Chris Wilson chris at chris-wilson.co.uk
Wed Jul 10 10:13:22 UTC 2019


Quoting Zhang, Xiaolin (2019-07-10 11:04:06)
> On 07/09/2019 05:12 PM, Chris Wilson wrote:
> > Preempt-to-busy uses a GPU semaphore to enforce an idle-barrier across
> > preemption, but mediated gvt does not fully support semaphores.
> >
> > v2: Fiddle around with the flags and settle on using has-semaphores for
> > the core bits so that we retain the ability to preempt our own
> > semaphores.
> Chris,
> With this patch, vgpu guest can boot up successfully with BAT test passed.
> But I want to point out there is other GPU hang issue pop up after vgpu
> guest boot issue addressed. I am not pretty sure is it related or not. 
> Basically it is easy to trigger with glxears with vblank_mode 0 and the
> GPU hang time is random and the call trace is below: (guest kernel log
> is attached in case it is useful.).
> [ 1192.680497] Asynchronous wait on fence i915:compiz[1866]:b30 timed
> out (hint:intel_atomic_commit_ready+0x0/0x50 [i915])
> [ 1193.512989] hangcheck rcs0
> [ 1193.513650] hangcheck     Awake? 4
> [ 1193.514299] hangcheck     Hangcheck: 9986 ms ago
> [ 1193.515071] hangcheck     Reset count: 0 (global 0)
> [ 1193.515854] hangcheck     Requests:
> [ 1193.516410] hangcheck     RING_START: 0x00000000
> [ 1193.517138] hangcheck     RING_HEAD:  0x00003198
> [ 1193.517876] hangcheck     RING_TAIL:  0x00003198
> [ 1193.518611] hangcheck     RING_CTL:   0x00000000
> [ 1193.519380] hangcheck     RING_MODE:  0x00000200 [idle]
> [ 1193.520149] hangcheck     RING_IMR: fffffefe
> [ 1193.520799] hangcheck     ACTHD:  0x00000000_000a6650
> [ 1193.521545] hangcheck     BBADDR: 0x00000000_00000000
> [ 1193.522321] hangcheck     DMA_FADDR: 0x00000000_00000000
> [ 1193.523392] hangcheck     IPEIR: 0x00000000
> [ 1193.524171] hangcheck     IPEHR: 0x00000000
> [ 1193.525050] hangcheck     Execlist status: 0x00040012 00000003, entries 6
> [ 1193.526049] hangcheck     Execlist CSB read 5, write 5, tasklet
> queued? no (enabled)
> [ 1193.527154] hangcheck         Active[0: ring:{start:dff03000,
> hwsp:dff661c0, seqno:00012175}, rq:  1b:12178-  prio=4097 @ 11649ms:
> glxgears[2160]
> [ 1193.528852] hangcheck         Pending[0] ring:{start:dff03000,
> hwsp:dff661c0, seqno:00012175}, rq:  1b:12178-  prio=4097 @ 11649ms:
> glxgears[2160]
> [ 1193.532515] hangcheck         Pending[1] ring:{start:dff39000,

Based on the above, that would be gvt not responding to the ELSP. Enable
tracing and force a dump, you should see the ELSP write with no
corresponding ack, and the above shows the engine idle.

Perhaps most intriguing is RING_START/CTL being off, but that can happen
when idle so ~o~
-Chris


More information about the Intel-gfx mailing list