summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Simmons <jsimmons@infradead.org>2012-03-10 11:22:59 -0500
committerJames Simmons <jsimmons@infradead.org>2012-03-10 11:22:59 -0500
commit1d7d06ab16661e9a9ac77584371be8affdd7fe1d (patch)
tree6509871d0f4f4310fb4bcaf879b4d639af82e5d6
parente0bd29e47e7956f1cf38d40c3fce466ae486f274 (diff)
Fix object memory freeing for all cases
-rw-r--r--src/via_memmgr.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/via_memmgr.c b/src/via_memmgr.c
index 7f8bb14..784be02 100644
--- a/src/via_memmgr.c
+++ b/src/via_memmgr.c
@@ -195,16 +195,14 @@ drm_bo_free(ScrnInfoPtr pScrn, struct buffer_object *obj)
if (obj) {
DEBUG(ErrorF("Freed %lu (pool %d)\n", obj->offset, obj->domain));
switch (obj->domain) {
- case TTM_PL_FLAG_SYSTEM: {
+ case TTM_PL_FLAG_VRAM:
+ case TTM_PL_FLAG_TT:
+ if (pVia->directRenderingType == DRI_NONE) {
FBLinearPtr linear = (FBLinearPtr) obj->handle;
xf86FreeOffscreenLinear(linear);
- }
- break;
- case TTM_PL_FLAG_VRAM:
- case TTM_PL_FLAG_TT:
#ifdef XF86DRI
- if (pVia->directRenderingType == DRI_1) {
+ } else if (pVia->directRenderingType == DRI_1) {
drm_via_mem_t drm;
drm.index = obj->handle;
@@ -217,8 +215,11 @@ drm_bo_free(ScrnInfoPtr pScrn, struct buffer_object *obj)
close.handle = obj->handle;
if (ioctl(pVia->drmmode.fd, DRM_IOCTL_GEM_CLOSE, &close) < 0)
ErrorF("DRM failed to free for handle %lld.\n", obj->handle);
- }
#endif
+ }
+ break;
+
+ defaule:
break;
}
free(obj);