aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_cs.c
diff options
context:
space:
mode:
authorChristian König <deathsimple@vodafone.de>2012-05-09 04:07:08 -0400
committerChristian König <deathsimple@vodafone.de>2012-06-21 03:40:34 -0400
commit36ff39c4045ee71cd306f8af5f8c2a1c6e998eba (patch)
tree022f047240a32e68c4deb7aedc9f64e97118c6f7 /drivers/gpu/drm/radeon/radeon_cs.c
parent736fc37fd7c7634e939e9ec0c67765941913bb82 (diff)
drm/radeon: replace cs_mutex with vm_mutex v3
Try to remove or replace the cs_mutex with a vm_mutex where it is still needed. v2: fix locking order v3: rebased on drm-next Signed-off-by: Christian König <deathsimple@vodafone.de>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_cs.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_cs.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
index dd3e234294e4..f1b75275f594 100644
--- a/drivers/gpu/drm/radeon/radeon_cs.c
+++ b/drivers/gpu/drm/radeon/radeon_cs.c
@@ -440,6 +440,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev,
440 return r; 440 return r;
441 } 441 }
442 442
443 mutex_lock(&rdev->vm_manager.lock);
443 mutex_lock(&vm->mutex); 444 mutex_lock(&vm->mutex);
444 r = radeon_vm_bind(rdev, vm); 445 r = radeon_vm_bind(rdev, vm);
445 if (r) { 446 if (r) {
@@ -477,7 +478,8 @@ out:
477 } 478 }
478 vm->fence = radeon_fence_ref(parser->ib.fence); 479 vm->fence = radeon_fence_ref(parser->ib.fence);
479 } 480 }
480 mutex_unlock(&fpriv->vm.mutex); 481 mutex_unlock(&vm->mutex);
482 mutex_unlock(&rdev->vm_manager.lock);
481 return r; 483 return r;
482} 484}
483 485
@@ -497,9 +499,7 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
497 struct radeon_cs_parser parser; 499 struct radeon_cs_parser parser;
498 int r; 500 int r;
499 501
500 radeon_mutex_lock(&rdev->cs_mutex);
501 if (!rdev->accel_working) { 502 if (!rdev->accel_working) {
502 radeon_mutex_unlock(&rdev->cs_mutex);
503 return -EBUSY; 503 return -EBUSY;
504 } 504 }
505 /* initialize parser */ 505 /* initialize parser */
@@ -513,7 +513,6 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
513 DRM_ERROR("Failed to initialize parser !\n"); 513 DRM_ERROR("Failed to initialize parser !\n");
514 radeon_cs_parser_fini(&parser, r); 514 radeon_cs_parser_fini(&parser, r);
515 r = radeon_cs_handle_lockup(rdev, r); 515 r = radeon_cs_handle_lockup(rdev, r);
516 radeon_mutex_unlock(&rdev->cs_mutex);
517 return r; 516 return r;
518 } 517 }
519 r = radeon_cs_parser_relocs(&parser); 518 r = radeon_cs_parser_relocs(&parser);
@@ -522,7 +521,6 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
522 DRM_ERROR("Failed to parse relocation %d!\n", r); 521 DRM_ERROR("Failed to parse relocation %d!\n", r);
523 radeon_cs_parser_fini(&parser, r); 522 radeon_cs_parser_fini(&parser, r);
524 r = radeon_cs_handle_lockup(rdev, r); 523 r = radeon_cs_handle_lockup(rdev, r);
525 radeon_mutex_unlock(&rdev->cs_mutex);
526 return r; 524 return r;
527 } 525 }
528 r = radeon_cs_ib_chunk(rdev, &parser); 526 r = radeon_cs_ib_chunk(rdev, &parser);
@@ -536,7 +534,6 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
536out: 534out:
537 radeon_cs_parser_fini(&parser, r); 535 radeon_cs_parser_fini(&parser, r);
538 r = radeon_cs_handle_lockup(rdev, r); 536 r = radeon_cs_handle_lockup(rdev, r);
539 radeon_mutex_unlock(&rdev->cs_mutex);
540 return r; 537 return r;
541} 538}
542 539