[igt-dev] [PATCH i-g-t] PSR: Bump wait for active timeout to 2.5s

Chris Wilson chris at chris-wilson.co.uk
Wed Dec 12 15:11:35 UTC 2018


Quoting Maarten Lankhorst (2018-12-12 14:37:59)
> Op 11-12-2018 om 22:27 schreef Dhinakaran Pandiyan:
> > On Tue, 2018-12-11 at 17:16 +0100, Maarten Lankhorst wrote:
> >> Typically PSR enables in around 136 ms, but when enabling 2
> >> screens, 500 ms is not enough on icelake sometimes, so bump
> >> it a bit higher.
> >>
> >> On kms_frontbuffer_tracking:
> >> Starting subtest: psr-2p-scndscrn-shrfb-plflip-blt
> >> psr_active(debugfs_fd, true) took 136ms
> >> psr_active(debugfs_fd, true) took 136ms
> >> psr_active(debugfs_fd, true) took 350ms
> >> psr_active(debugfs_fd, true) took 136ms
> >> psr_active(debugfs_fd, true) took 1598ms
> > We have to find out why it took that long, ~96 frames exceeds the idle
> > frame limit we set in the driver. I'm concerned we might be covering up
> > a bug by increasing the limit so high.
> 
> After some debugging, it seems retiring the gem workqueue causes the delay..
> 
> [   90.244237] Activating PSR from 2
> [   90.244378] WARNING: CPU: 3 PID: 181 at drivers/gpu/drm/i915/intel_psr.c:1143 intel_psr_flush+0xe3/0x100 [i915]
> ...
> [   90.244672] Call Trace:
> [   90.244776]  intel_frontbuffer_flush+0x6a/0x80 [i915]
> [   90.244893]  i915_request_retire+0x189/0x930 [i915]
> [   90.245019]  i915_retire_requests+0xa5/0x130 [i915]
> [   90.245134]  i915_gem_retire_work_handler+0x59/0x70 [i915]
> [   90.245152]  process_one_work+0x262/0x630
> [   90.245181]  worker_thread+0x37/0x380
> [   90.245199]  ? process_one_work+0x630/0x630
> [   90.245209]  kthread+0x119/0x130
> [   90.245220]  ? kthread_park+0x80/0x80
> [   90.245238]  ret_from_fork+0x3a/0x50
> [   90.245278] irq event stamp: 30662
> [   90.245290] hardirqs last  enabled at (30661): [<ffffffff810fb0a9>] console_unlock+0x3f9/0x5f0
> [   90.245300] hardirqs last disabled at (30662): [<ffffffff810019b0>] trace_hardirqs_off_thunk+0x1a/0x1c
> [   90.245310] softirqs last  enabled at (30644): [<ffffffff81c0033a>] __do_softirq+0x33a/0x4b9
> [   90.245322] softirqs last disabled at (30631): [<ffffffff8108e6a9>] irq_exit+0xa9/0xc0
> ..
> [   90.246941] [drm:intel_psr_work [i915]] Activating PSR1
> [   90.335272] [drm:intel_psr_irq_handler [i915]] [transcoder EDP] PSR entry attempt in 2 vblanks
> 
> Which seems to come from i915_gem_unpark() ?

You rendered into the frontbuffer and then left it alone, leaving it to
the bg flusher. If you use
	igt_drop_caches_set(DROP_ACTIVE | DROP_RETIRE | DROP_IDLE)
(or just gem_quiescent_gpu()) that will flush the retirement queue.

The gem_unpark is misleading, you don't need the DROP_IDLE, as you just
need the outstanding retirements.
-Chris


More information about the igt-dev mailing list