drm/radeon/kms: fix indirect buffer management V2
authorJerome Glisse <jglisse@redhat.com>
Mon, 15 Feb 2010 20:36:13 +0000 (21:36 +0100)
committerDave Airlie <airlied@redhat.com>
Thu, 18 Feb 2010 05:06:41 +0000 (15:06 +1000)
commit91cb91becf372b5308cdd7d2e15b2e3ef66bae7e
tree9fe8fbe62d1eac20d15530daf124d907ce7fe937
parentb58db2c6dd18d35f59862d3352c86a0a58838bf3
drm/radeon/kms: fix indirect buffer management V2

There is 3 different distinct states for an indirect buffer (IB) :
  1- free with no fence
  2- free with a fence
  3- non free (fence doesn't matter)
Previous code mixed case 2 & 3 in a single one leading to possible
catastrophique failure. This patch rework the handling and properly
separate each case. So when you get ib we set the ib as non free and
fence status doesn't matter. Fence become active (ie has a meaning
for the ib code) once the ib is scheduled or free. This patch also
get rid of the alloc bitmap as it was overkill, we know go through
IB pool list like in a ring buffer as the oldest IB is the first
one the will be free.

Fix :
https://bugs.freedesktop.org/show_bug.cgi?id=26438
and likely other bugs.

V2 remove the scheduled list, it's useless now, fix free ib scanning

Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/r600_blit_kms.c
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_ring.c