diff options
| author | Michel Dänzer <daenzer@vmware.com> | 2010-11-09 05:50:05 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2010-11-09 20:51:11 -0500 |
| commit | 2b66b50b12cabc05f05543e792d4c9c2465d5702 (patch) | |
| tree | d56cc1a158d22e4485db7ceb96d108e0d9bef640 | |
| parent | b2298fd27127f872881048fd37cb9217a648ae06 (diff) | |
drm/radeon/kms: Fix retrying ttm_bo_init() after it failed once.
If ttm_bo_init() returns failure, it already destroyed the BO, so we need to
retry from scratch.
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Tested-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index d7ab91416410..8eb183466015 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c | |||
| @@ -102,6 +102,8 @@ int radeon_bo_create(struct radeon_device *rdev, struct drm_gem_object *gobj, | |||
| 102 | type = ttm_bo_type_device; | 102 | type = ttm_bo_type_device; |
| 103 | } | 103 | } |
| 104 | *bo_ptr = NULL; | 104 | *bo_ptr = NULL; |
| 105 | |||
| 106 | retry: | ||
| 105 | bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL); | 107 | bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL); |
| 106 | if (bo == NULL) | 108 | if (bo == NULL) |
| 107 | return -ENOMEM; | 109 | return -ENOMEM; |
| @@ -109,8 +111,6 @@ int radeon_bo_create(struct radeon_device *rdev, struct drm_gem_object *gobj, | |||
| 109 | bo->gobj = gobj; | 111 | bo->gobj = gobj; |
| 110 | bo->surface_reg = -1; | 112 | bo->surface_reg = -1; |
| 111 | INIT_LIST_HEAD(&bo->list); | 113 | INIT_LIST_HEAD(&bo->list); |
| 112 | |||
| 113 | retry: | ||
| 114 | radeon_ttm_placement_from_domain(bo, domain); | 114 | radeon_ttm_placement_from_domain(bo, domain); |
| 115 | /* Kernel allocation are uninterruptible */ | 115 | /* Kernel allocation are uninterruptible */ |
| 116 | mutex_lock(&rdev->vram_mutex); | 116 | mutex_lock(&rdev->vram_mutex); |
