diff options
author | Christian König <deathsimple@vodafone.de> | 2012-05-09 04:07:08 -0400 |
---|---|---|
committer | Christian König <deathsimple@vodafone.de> | 2012-06-21 03:40:34 -0400 |
commit | 36ff39c4045ee71cd306f8af5f8c2a1c6e998eba (patch) | |
tree | 022f047240a32e68c4deb7aedc9f64e97118c6f7 /drivers/gpu/drm/radeon/radeon_cs.c | |
parent | 736fc37fd7c7634e939e9ec0c67765941913bb82 (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.c | 9 |
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) | |||
536 | out: | 534 | out: |
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 | ||