diff options
author | Jerome Glisse <jglisse@redhat.com> | 2009-11-20 08:29:23 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-12-01 23:00:18 -0500 |
commit | 4c7886791264f03428d5424befb1b96f08fc90f4 (patch) | |
tree | 2c644931001b06969fb3038e7beb68db436c4872 /drivers/gpu/drm/radeon/radeon_cs.c | |
parent | 1614f8b17b8cc3ad143541d41569623d30dbc9ec (diff) |
drm/radeon/kms: Rework radeon object handling
The locking & protection of radeon object was somewhat messy.
This patch completely rework it to now use ttm reserve as a
protection for the radeon object structure member. It also
shrink down the various radeon object structure by removing
field which were redondant with the ttm information. Last it
converts few simple functions to inline which should with
performances.
airlied: rebase on top of r600 and other changes.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_cs.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_cs.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c index 5ab2cf96a264..65590a0f1d93 100644 --- a/drivers/gpu/drm/radeon/radeon_cs.c +++ b/drivers/gpu/drm/radeon/radeon_cs.c | |||
@@ -76,17 +76,17 @@ int radeon_cs_parser_relocs(struct radeon_cs_parser *p) | |||
76 | } | 76 | } |
77 | p->relocs_ptr[i] = &p->relocs[i]; | 77 | p->relocs_ptr[i] = &p->relocs[i]; |
78 | p->relocs[i].robj = p->relocs[i].gobj->driver_private; | 78 | p->relocs[i].robj = p->relocs[i].gobj->driver_private; |
79 | p->relocs[i].lobj.robj = p->relocs[i].robj; | 79 | p->relocs[i].lobj.bo = p->relocs[i].robj; |
80 | p->relocs[i].lobj.rdomain = r->read_domains; | 80 | p->relocs[i].lobj.rdomain = r->read_domains; |
81 | p->relocs[i].lobj.wdomain = r->write_domain; | 81 | p->relocs[i].lobj.wdomain = r->write_domain; |
82 | p->relocs[i].handle = r->handle; | 82 | p->relocs[i].handle = r->handle; |
83 | p->relocs[i].flags = r->flags; | 83 | p->relocs[i].flags = r->flags; |
84 | INIT_LIST_HEAD(&p->relocs[i].lobj.list); | 84 | INIT_LIST_HEAD(&p->relocs[i].lobj.list); |
85 | radeon_object_list_add_object(&p->relocs[i].lobj, | 85 | radeon_bo_list_add_object(&p->relocs[i].lobj, |
86 | &p->validated); | 86 | &p->validated); |
87 | } | 87 | } |
88 | } | 88 | } |
89 | return radeon_object_list_validate(&p->validated, p->ib->fence); | 89 | return radeon_bo_list_validate(&p->validated, p->ib->fence); |
90 | } | 90 | } |
91 | 91 | ||
92 | int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) | 92 | int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) |
@@ -190,9 +190,10 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error) | |||
190 | unsigned i; | 190 | unsigned i; |
191 | 191 | ||
192 | if (error) { | 192 | if (error) { |
193 | radeon_object_list_unvalidate(&parser->validated); | 193 | radeon_bo_list_unvalidate(&parser->validated, |
194 | parser->ib->fence); | ||
194 | } else { | 195 | } else { |
195 | radeon_object_list_clean(&parser->validated); | 196 | radeon_bo_list_unreserve(&parser->validated); |
196 | } | 197 | } |
197 | for (i = 0; i < parser->nrelocs; i++) { | 198 | for (i = 0; i < parser->nrelocs; i++) { |
198 | if (parser->relocs[i].gobj) { | 199 | if (parser->relocs[i].gobj) { |