Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo


#361 mgaDDFinish: flush ret=-16 error on G400

Graham Treece

I think I am not alone in getting this error, or one
similar. The main features are:

i) Either you get the above error message (i.e.
-EBUSY), or the same one from another function (e.g.
mdaDDClear), or none at all. In any case it comes from

ii) The graphics card hangs completely at this point,
causing the Xserver also to hang. It is no longer
possible to do anything at the console, but you CAN
remote login and kill the Xserver.

iii) It only seems to happen when doing fairly
intensive graphics combined with fairly intensive

iv) It is clearly timing related - small unrelated
tweaks tend to change the point at which this error can
occur. That unfortunately makes it almost impossible to
generate a small piece of code which will repeat it. We
see the problem when running our own code, but it has
also been observed running heretic2 (see

So far as I can make out, the problem concerns what
happens when certain lists (particularly the vector
list, I believe) are flushed, either from calling
glFinish() specifically, or implicitly. In particular
pressure situations, The G400 gets into a state where
it can not be communicated with, hence subsequent
-EBUSY errors when trying to UPDATE_LOCK and the
Xserver hangs.

I am using a MGA G400, kernel version 2.4.6, XFree
version 4.1.0. In all other respects Direct Rendering
works correctly and nice and fast. Please let me know
if you need any more information - this is a very
frustrating bug!

Graham Treece.