Skip to content

Commit c81a1a7

Browse files
Michel Dänzeralexdeucher
authored andcommitted
drm/amdgpu: Make amdgpu_bo_reserve use uninterruptible waits for cleanup
Some of these paths probably cannot be interrupted by a signal anyway. Those that can would fail to clean up things if they actually got interrupted. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 8b9242e commit c81a1a7

16 files changed

+36
-36
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_display.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static void amdgpu_unpin_work_func(struct work_struct *__work)
123123
int r;
124124

125125
/* unpin of the old buffer */
126-
r = amdgpu_bo_reserve(work->old_abo, false);
126+
r = amdgpu_bo_reserve(work->old_abo, true);
127127
if (likely(r == 0)) {
128128
r = amdgpu_bo_unpin(work->old_abo);
129129
if (unlikely(r != 0)) {

drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ static void amdgpufb_destroy_pinned_object(struct drm_gem_object *gobj)
112112
struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
113113
int ret;
114114

115-
ret = amdgpu_bo_reserve(abo, false);
115+
ret = amdgpu_bo_reserve(abo, true);
116116
if (likely(ret == 0)) {
117117
amdgpu_bo_kunmap(abo);
118118
amdgpu_bo_unpin(abo);

drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ void amdgpu_gart_table_vram_unpin(struct amdgpu_device *adev)
183183
if (adev->gart.robj == NULL) {
184184
return;
185185
}
186-
r = amdgpu_bo_reserve(adev->gart.robj, false);
186+
r = amdgpu_bo_reserve(adev->gart.robj, true);
187187
if (likely(r == 0)) {
188188
amdgpu_bo_kunmap(adev->gart.robj);
189189
amdgpu_bo_unpin(adev->gart.robj);

drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -821,7 +821,7 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev,
821821

822822
if (amdgpu_sriov_vf(adev)) {
823823
/* TODO: how to handle reserve failure */
824-
BUG_ON(amdgpu_bo_reserve(adev->virt.csa_obj, false));
824+
BUG_ON(amdgpu_bo_reserve(adev->virt.csa_obj, true));
825825
amdgpu_vm_bo_rmv(adev, fpriv->vm.csa_bo_va);
826826
fpriv->vm.csa_bo_va = NULL;
827827
amdgpu_bo_unreserve(adev->virt.csa_obj);

drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void amdgpu_gem_prime_unpin(struct drm_gem_object *obj)
113113
struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
114114
int ret = 0;
115115

116-
ret = amdgpu_bo_reserve(bo, false);
116+
ret = amdgpu_bo_reserve(bo, true);
117117
if (unlikely(ret != 0))
118118
return;
119119

drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ int amdgpu_sa_bo_manager_suspend(struct amdgpu_device *adev,
130130
return -EINVAL;
131131
}
132132

133-
r = amdgpu_bo_reserve(sa_manager->bo, false);
133+
r = amdgpu_bo_reserve(sa_manager->bo, true);
134134
if (!r) {
135135
amdgpu_bo_kunmap(sa_manager->bo);
136136
amdgpu_bo_unpin(sa_manager->bo);

drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1198,7 +1198,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
11981198
return;
11991199
amdgpu_ttm_debugfs_fini(adev);
12001200
if (adev->stollen_vga_memory) {
1201-
r = amdgpu_bo_reserve(adev->stollen_vga_memory, false);
1201+
r = amdgpu_bo_reserve(adev->stollen_vga_memory, true);
12021202
if (r == 0) {
12031203
amdgpu_bo_unpin(adev->stollen_vga_memory);
12041204
amdgpu_bo_unreserve(adev->stollen_vga_memory);

drivers/gpu/drm/amd/amdgpu/dce_v10_0.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2230,7 +2230,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
22302230
if (!atomic && fb && fb != crtc->primary->fb) {
22312231
amdgpu_fb = to_amdgpu_framebuffer(fb);
22322232
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
2233-
r = amdgpu_bo_reserve(abo, false);
2233+
r = amdgpu_bo_reserve(abo, true);
22342234
if (unlikely(r != 0))
22352235
return r;
22362236
amdgpu_bo_unpin(abo);
@@ -2589,7 +2589,7 @@ static int dce_v10_0_crtc_cursor_set2(struct drm_crtc *crtc,
25892589
unpin:
25902590
if (amdgpu_crtc->cursor_bo) {
25912591
struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
2592-
ret = amdgpu_bo_reserve(aobj, false);
2592+
ret = amdgpu_bo_reserve(aobj, true);
25932593
if (likely(ret == 0)) {
25942594
amdgpu_bo_unpin(aobj);
25952595
amdgpu_bo_unreserve(aobj);
@@ -2720,7 +2720,7 @@ static void dce_v10_0_crtc_disable(struct drm_crtc *crtc)
27202720

27212721
amdgpu_fb = to_amdgpu_framebuffer(crtc->primary->fb);
27222722
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
2723-
r = amdgpu_bo_reserve(abo, false);
2723+
r = amdgpu_bo_reserve(abo, true);
27242724
if (unlikely(r))
27252725
DRM_ERROR("failed to reserve abo before unpin\n");
27262726
else {

drivers/gpu/drm/amd/amdgpu/dce_v11_0.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,7 +2214,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
22142214
if (!atomic && fb && fb != crtc->primary->fb) {
22152215
amdgpu_fb = to_amdgpu_framebuffer(fb);
22162216
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
2217-
r = amdgpu_bo_reserve(abo, false);
2217+
r = amdgpu_bo_reserve(abo, true);
22182218
if (unlikely(r != 0))
22192219
return r;
22202220
amdgpu_bo_unpin(abo);
@@ -2609,7 +2609,7 @@ static int dce_v11_0_crtc_cursor_set2(struct drm_crtc *crtc,
26092609
unpin:
26102610
if (amdgpu_crtc->cursor_bo) {
26112611
struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
2612-
ret = amdgpu_bo_reserve(aobj, false);
2612+
ret = amdgpu_bo_reserve(aobj, true);
26132613
if (likely(ret == 0)) {
26142614
amdgpu_bo_unpin(aobj);
26152615
amdgpu_bo_unreserve(aobj);
@@ -2740,7 +2740,7 @@ static void dce_v11_0_crtc_disable(struct drm_crtc *crtc)
27402740

27412741
amdgpu_fb = to_amdgpu_framebuffer(crtc->primary->fb);
27422742
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
2743-
r = amdgpu_bo_reserve(abo, false);
2743+
r = amdgpu_bo_reserve(abo, true);
27442744
if (unlikely(r))
27452745
DRM_ERROR("failed to reserve abo before unpin\n");
27462746
else {

drivers/gpu/drm/amd/amdgpu/dce_v6_0.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1645,7 +1645,7 @@ static int dce_v6_0_crtc_do_set_base(struct drm_crtc *crtc,
16451645
if (!atomic && fb && fb != crtc->primary->fb) {
16461646
amdgpu_fb = to_amdgpu_framebuffer(fb);
16471647
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
1648-
r = amdgpu_bo_reserve(abo, false);
1648+
r = amdgpu_bo_reserve(abo, true);
16491649
if (unlikely(r != 0))
16501650
return r;
16511651
amdgpu_bo_unpin(abo);
@@ -1962,7 +1962,7 @@ static int dce_v6_0_crtc_cursor_set2(struct drm_crtc *crtc,
19621962
unpin:
19631963
if (amdgpu_crtc->cursor_bo) {
19641964
struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
1965-
ret = amdgpu_bo_reserve(aobj, false);
1965+
ret = amdgpu_bo_reserve(aobj, true);
19661966
if (likely(ret == 0)) {
19671967
amdgpu_bo_unpin(aobj);
19681968
amdgpu_bo_unreserve(aobj);
@@ -2088,7 +2088,7 @@ static void dce_v6_0_crtc_disable(struct drm_crtc *crtc)
20882088

20892089
amdgpu_fb = to_amdgpu_framebuffer(crtc->primary->fb);
20902090
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
2091-
r = amdgpu_bo_reserve(abo, false);
2091+
r = amdgpu_bo_reserve(abo, true);
20922092
if (unlikely(r))
20932093
DRM_ERROR("failed to reserve abo before unpin\n");
20942094
else {

drivers/gpu/drm/amd/amdgpu/dce_v8_0.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2089,7 +2089,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
20892089
if (!atomic && fb && fb != crtc->primary->fb) {
20902090
amdgpu_fb = to_amdgpu_framebuffer(fb);
20912091
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
2092-
r = amdgpu_bo_reserve(abo, false);
2092+
r = amdgpu_bo_reserve(abo, true);
20932093
if (unlikely(r != 0))
20942094
return r;
20952095
amdgpu_bo_unpin(abo);
@@ -2440,7 +2440,7 @@ static int dce_v8_0_crtc_cursor_set2(struct drm_crtc *crtc,
24402440
unpin:
24412441
if (amdgpu_crtc->cursor_bo) {
24422442
struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo);
2443-
ret = amdgpu_bo_reserve(aobj, false);
2443+
ret = amdgpu_bo_reserve(aobj, true);
24442444
if (likely(ret == 0)) {
24452445
amdgpu_bo_unpin(aobj);
24462446
amdgpu_bo_unreserve(aobj);
@@ -2571,7 +2571,7 @@ static void dce_v8_0_crtc_disable(struct drm_crtc *crtc)
25712571

25722572
amdgpu_fb = to_amdgpu_framebuffer(crtc->primary->fb);
25732573
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
2574-
r = amdgpu_bo_reserve(abo, false);
2574+
r = amdgpu_bo_reserve(abo, true);
25752575
if (unlikely(r))
25762576
DRM_ERROR("failed to reserve abo before unpin\n");
25772577
else {

drivers/gpu/drm/amd/amdgpu/dce_virtual.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ static void dce_virtual_crtc_disable(struct drm_crtc *crtc)
248248

249249
amdgpu_fb = to_amdgpu_framebuffer(crtc->primary->fb);
250250
abo = gem_to_amdgpu_bo(amdgpu_fb->obj);
251-
r = amdgpu_bo_reserve(abo, false);
251+
r = amdgpu_bo_reserve(abo, true);
252252
if (unlikely(r))
253253
DRM_ERROR("failed to reserve abo before unpin\n");
254254
else {

drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2437,7 +2437,7 @@ static void gfx_v6_0_rlc_fini(struct amdgpu_device *adev)
24372437
int r;
24382438

24392439
if (adev->gfx.rlc.save_restore_obj) {
2440-
r = amdgpu_bo_reserve(adev->gfx.rlc.save_restore_obj, false);
2440+
r = amdgpu_bo_reserve(adev->gfx.rlc.save_restore_obj, true);
24412441
if (unlikely(r != 0))
24422442
dev_warn(adev->dev, "(%d) reserve RLC sr bo failed\n", r);
24432443
amdgpu_bo_unpin(adev->gfx.rlc.save_restore_obj);
@@ -2448,7 +2448,7 @@ static void gfx_v6_0_rlc_fini(struct amdgpu_device *adev)
24482448
}
24492449

24502450
if (adev->gfx.rlc.clear_state_obj) {
2451-
r = amdgpu_bo_reserve(adev->gfx.rlc.clear_state_obj, false);
2451+
r = amdgpu_bo_reserve(adev->gfx.rlc.clear_state_obj, true);
24522452
if (unlikely(r != 0))
24532453
dev_warn(adev->dev, "(%d) reserve RLC c bo failed\n", r);
24542454
amdgpu_bo_unpin(adev->gfx.rlc.clear_state_obj);
@@ -2459,7 +2459,7 @@ static void gfx_v6_0_rlc_fini(struct amdgpu_device *adev)
24592459
}
24602460

24612461
if (adev->gfx.rlc.cp_table_obj) {
2462-
r = amdgpu_bo_reserve(adev->gfx.rlc.cp_table_obj, false);
2462+
r = amdgpu_bo_reserve(adev->gfx.rlc.cp_table_obj, true);
24632463
if (unlikely(r != 0))
24642464
dev_warn(adev->dev, "(%d) reserve RLC cp table bo failed\n", r);
24652465
amdgpu_bo_unpin(adev->gfx.rlc.cp_table_obj);

drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2792,7 +2792,7 @@ static void gfx_v7_0_cp_compute_fini(struct amdgpu_device *adev)
27922792
struct amdgpu_ring *ring = &adev->gfx.compute_ring[i];
27932793

27942794
if (ring->mqd_obj) {
2795-
r = amdgpu_bo_reserve(ring->mqd_obj, false);
2795+
r = amdgpu_bo_reserve(ring->mqd_obj, true);
27962796
if (unlikely(r != 0))
27972797
dev_warn(adev->dev, "(%d) reserve MQD bo failed\n", r);
27982798

@@ -2810,7 +2810,7 @@ static void gfx_v7_0_mec_fini(struct amdgpu_device *adev)
28102810
int r;
28112811

28122812
if (adev->gfx.mec.hpd_eop_obj) {
2813-
r = amdgpu_bo_reserve(adev->gfx.mec.hpd_eop_obj, false);
2813+
r = amdgpu_bo_reserve(adev->gfx.mec.hpd_eop_obj, true);
28142814
if (unlikely(r != 0))
28152815
dev_warn(adev->dev, "(%d) reserve HPD EOP bo failed\n", r);
28162816
amdgpu_bo_unpin(adev->gfx.mec.hpd_eop_obj);
@@ -3359,7 +3359,7 @@ static void gfx_v7_0_rlc_fini(struct amdgpu_device *adev)
33593359

33603360
/* save restore block */
33613361
if (adev->gfx.rlc.save_restore_obj) {
3362-
r = amdgpu_bo_reserve(adev->gfx.rlc.save_restore_obj, false);
3362+
r = amdgpu_bo_reserve(adev->gfx.rlc.save_restore_obj, true);
33633363
if (unlikely(r != 0))
33643364
dev_warn(adev->dev, "(%d) reserve RLC sr bo failed\n", r);
33653365
amdgpu_bo_unpin(adev->gfx.rlc.save_restore_obj);
@@ -3371,7 +3371,7 @@ static void gfx_v7_0_rlc_fini(struct amdgpu_device *adev)
33713371

33723372
/* clear state block */
33733373
if (adev->gfx.rlc.clear_state_obj) {
3374-
r = amdgpu_bo_reserve(adev->gfx.rlc.clear_state_obj, false);
3374+
r = amdgpu_bo_reserve(adev->gfx.rlc.clear_state_obj, true);
33753375
if (unlikely(r != 0))
33763376
dev_warn(adev->dev, "(%d) reserve RLC c bo failed\n", r);
33773377
amdgpu_bo_unpin(adev->gfx.rlc.clear_state_obj);
@@ -3383,7 +3383,7 @@ static void gfx_v7_0_rlc_fini(struct amdgpu_device *adev)
33833383

33843384
/* clear state block */
33853385
if (adev->gfx.rlc.cp_table_obj) {
3386-
r = amdgpu_bo_reserve(adev->gfx.rlc.cp_table_obj, false);
3386+
r = amdgpu_bo_reserve(adev->gfx.rlc.cp_table_obj, true);
33873387
if (unlikely(r != 0))
33883388
dev_warn(adev->dev, "(%d) reserve RLC cp table bo failed\n", r);
33893389
amdgpu_bo_unpin(adev->gfx.rlc.cp_table_obj);

drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,7 @@ static void gfx_v8_0_rlc_fini(struct amdgpu_device *adev)
12391239

12401240
/* clear state block */
12411241
if (adev->gfx.rlc.clear_state_obj) {
1242-
r = amdgpu_bo_reserve(adev->gfx.rlc.clear_state_obj, false);
1242+
r = amdgpu_bo_reserve(adev->gfx.rlc.clear_state_obj, true);
12431243
if (unlikely(r != 0))
12441244
dev_warn(adev->dev, "(%d) reserve RLC cbs bo failed\n", r);
12451245
amdgpu_bo_unpin(adev->gfx.rlc.clear_state_obj);
@@ -1250,7 +1250,7 @@ static void gfx_v8_0_rlc_fini(struct amdgpu_device *adev)
12501250

12511251
/* jump table block */
12521252
if (adev->gfx.rlc.cp_table_obj) {
1253-
r = amdgpu_bo_reserve(adev->gfx.rlc.cp_table_obj, false);
1253+
r = amdgpu_bo_reserve(adev->gfx.rlc.cp_table_obj, true);
12541254
if (unlikely(r != 0))
12551255
dev_warn(adev->dev, "(%d) reserve RLC cp table bo failed\n", r);
12561256
amdgpu_bo_unpin(adev->gfx.rlc.cp_table_obj);
@@ -1363,7 +1363,7 @@ static void gfx_v8_0_mec_fini(struct amdgpu_device *adev)
13631363
int r;
13641364

13651365
if (adev->gfx.mec.hpd_eop_obj) {
1366-
r = amdgpu_bo_reserve(adev->gfx.mec.hpd_eop_obj, false);
1366+
r = amdgpu_bo_reserve(adev->gfx.mec.hpd_eop_obj, true);
13671367
if (unlikely(r != 0))
13681368
dev_warn(adev->dev, "(%d) reserve HPD EOP bo failed\n", r);
13691369
amdgpu_bo_unpin(adev->gfx.mec.hpd_eop_obj);
@@ -1490,7 +1490,7 @@ static int gfx_v8_0_kiq_init(struct amdgpu_device *adev)
14901490

14911491
memset(hpd, 0, MEC_HPD_SIZE);
14921492

1493-
r = amdgpu_bo_reserve(kiq->eop_obj, false);
1493+
r = amdgpu_bo_reserve(kiq->eop_obj, true);
14941494
if (unlikely(r != 0))
14951495
dev_warn(adev->dev, "(%d) reserve kiq eop bo failed\n", r);
14961496
amdgpu_bo_kunmap(kiq->eop_obj);

drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ static void gfx_v9_0_mec_fini(struct amdgpu_device *adev)
453453
int r;
454454

455455
if (adev->gfx.mec.hpd_eop_obj) {
456-
r = amdgpu_bo_reserve(adev->gfx.mec.hpd_eop_obj, false);
456+
r = amdgpu_bo_reserve(adev->gfx.mec.hpd_eop_obj, true);
457457
if (unlikely(r != 0))
458458
dev_warn(adev->dev, "(%d) reserve HPD EOP bo failed\n", r);
459459
amdgpu_bo_unpin(adev->gfx.mec.hpd_eop_obj);
@@ -463,7 +463,7 @@ static void gfx_v9_0_mec_fini(struct amdgpu_device *adev)
463463
adev->gfx.mec.hpd_eop_obj = NULL;
464464
}
465465
if (adev->gfx.mec.mec_fw_obj) {
466-
r = amdgpu_bo_reserve(adev->gfx.mec.mec_fw_obj, false);
466+
r = amdgpu_bo_reserve(adev->gfx.mec.mec_fw_obj, true);
467467
if (unlikely(r != 0))
468468
dev_warn(adev->dev, "(%d) reserve mec firmware bo failed\n", r);
469469
amdgpu_bo_unpin(adev->gfx.mec.mec_fw_obj);
@@ -599,7 +599,7 @@ static int gfx_v9_0_kiq_init(struct amdgpu_device *adev)
599599

600600
memset(hpd, 0, MEC_HPD_SIZE);
601601

602-
r = amdgpu_bo_reserve(kiq->eop_obj, false);
602+
r = amdgpu_bo_reserve(kiq->eop_obj, true);
603603
if (unlikely(r != 0))
604604
dev_warn(adev->dev, "(%d) reserve kiq eop bo failed\n", r);
605605
amdgpu_bo_kunmap(kiq->eop_obj);
@@ -1786,7 +1786,7 @@ static void gfx_v9_0_cp_compute_fini(struct amdgpu_device *adev)
17861786
struct amdgpu_ring *ring = &adev->gfx.compute_ring[i];
17871787

17881788
if (ring->mqd_obj) {
1789-
r = amdgpu_bo_reserve(ring->mqd_obj, false);
1789+
r = amdgpu_bo_reserve(ring->mqd_obj, true);
17901790
if (unlikely(r != 0))
17911791
dev_warn(adev->dev, "(%d) reserve MQD bo failed\n", r);
17921792

0 commit comments

Comments
 (0)