Hi Andrey, Am Mittwoch, den 12.02.2020, 11:33 -0500 schrieb Andrey Grodzovsky: > On 2/11/20 7:53 PM, Luben Tuikov wrote: > > On 2020-02-11 4:27 p.m., Andrey Grodzovsky wrote: > > > On 2/11/20 10:55 AM, Andrey Grodzovsky wrote: > > > > On 2/10/20 4:50 PM, Luben Tuikov wrote: > > > > > Hi Lucas, > > > > > > > > > > Thank you for bringing awareness of this issue, publicly. > > > > > > > > > > As soon as this patch showed up back in November of 2019, > > > > > I objected to it, privately. > > > > > > > > I didn't find this objection in my mail actually > > Yes, I didn't send it to you. > > > > > > > I suggested to instead use a _list_ to store the "state" of > > > > > all jobs of the same state. Then, at any time, timeout interrupt > > > > > or whatever, we can atomically (irq spinlock) move the timeout/bad > > > > > job to the timedout/cleanup/bad job list, and wake someone up > > > > > to deal with that list asynchronously, and return from the > > > > > interrupt/etc. > > > > > immediately. > > > > > > > > Sounds a good idea to me, i think enough for us to have 2 lists, > > > > timeout list for jobs scheduled to HW and not yet completed > > > > (completion fence signaled) and cleanup list for those that did > > > > complete. This should give alternative solution to the race condition > > > > this patch was addressing without causing the break the Lucas > > > > reported. If no one objects I think i can try implement it. > > > > > > > > Andrey > > > > > > Thinking more i realize Luben is right about having also bad job list as > > > this is needed for normal job competition (by fence callback from > > > amdgpu_fence_process) and you need to decide if you move it to cleanup > > > list from timeout list or not. If it's already in bad job list - meaning > > > that it's being processed by GPU recovery code you don't touch it, > > > otherwise you move it to cleanup list where it will be freed eventually > > > by invocation of drm_sched_get_cleanup_job. > > Yep... > > > > Perhaps fewer lists, than "timeout", "bad" and "cleanup" could be had. > > I'd also name the "bad" list as "recovery" list, as that is what would > > be done to commands on that list. > > > > "Timeout" is a status "timed-out", so perhaps just set the timeout > > flag and move it to a "done" list. (Note that the command can still > > complete asynchronously while on that list and while it has status > > "timed-out'.) > > > > The idea is that, > > 1) it avoid contention and races when more than one context > > can update the job at the same time, and > > 2) easy to process all jobs of a certain state and/or > > move them around, etc. > > > > Let's discuss it and come up with a plan. :-) > > > > Regards, > > Luben > > Sure, let me maybe come up with a draft patch so we have more concrete > stuff to discuss and review. It seems we all dropped the ball on this one. I believe this is still an open issue. Has there been any progress from your side on fixing this? Regards, Lucas _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel