xorg-dev + intel driver + KMS

Andrey Kosachenko andrey.kosachenko at gmail.com
Fri Sep 9 22:10:59 UTC 2011


Hi, Konstantin,

On 09.09.2011 02:38, Kostik Belousov wrote:
> If you are not interested in the story, just try 9.1 patch.
 >
> If you are, please stay with me. Apparently, your pagedaemon is sleeping
> in 915unm state, that made me very much worrying. I did not understand
> how this could happen, because I thought that this is caused by
> pagedaemon dropping the last reference on the gem object device pager.
> And pagedaemon must not see pages belonging to device pagers, the pages
> must not appear on any queue.
>
> I added assertions to make sure to get the panic if a fictitious page
> is found on queues, which did not fired. But, I was able to reproduce
> the situation with pagedaemon hang, by running gem_stress and performing
> active swapping in parallel. I forgot that I finally implemented the low
> memory handler for gem, which is called from pagedaemon and which also
> does purging on the gem buffers.
>
> After that, it was relatively easy to track the issue. See the comment
> at the beginning of i915_gem_pager_fault() about interaction with
> i915_gem_release_mmap() which describes the cause of the hang:
>
> 	/*
> 	 * Remove the placeholder page inserted by vm_fault() from the
> 	 * object before dropping the object lock. If
> 	 * i915_gem_release_mmap() is active in parallel on this gem
> 	 * object, then it owns the drm device sx and might find the
> 	 * placeholder already. Then, since the page is busy,
> 	 * i915_gem_release_mmap() sleeps waiting for the busy state
> 	 * of the page cleared. We will be not able to acquire drm
> 	 * device lock until i915_gem_release_mmap() is able to make a
> 	 * progress.
> 	 */
>
> For me, the patched driver survived while doing 'sort /dev/zero' and
> gem_stress in parallel.

great!
I confirm that with all.9.1.patch system remains stable even under high 
memory pressure.

I tried your test (thanks, it is actually exactly what I had been 
looking for quite a long time: i.e. exact STR of the issue). Running 
"gem_stress" and "sort /dev/zero" in parallel turned my system into 
unusable state within less then 10 seconds. Repeated test 3 times in a 
row. The outcome was the same in all cases: X server hanged (reset was 
the only way out to get machine operational).

After applying all.9.1.patch I ran the same test again and system 
remained stable and even pretty responsive. Both (gem_stress and sort 
/dev/zero) were running for a while and after a couple of minutes sort 
process was killed by system (with "out of swap space" error).

Will keep an eye on it so should I notice more issues will let you know.
Thanks! I really appreciate it!

--
WBR,
Andrey Kosachenko


More information about the freebsd-x11 mailing list