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>
Mon, 15 Feb 2010 21:59:23 +0000 (07:59 +1000)
commite821767bebdae6a46f6d897a4385f6218bee7f27
tree0a97f6a74f946c12d4821d9d82c8255e951d026f
parent2e98f10a7a87ebae4dcc3949028a32008b46ceef
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