Skip to content

Commit 02cfe97

Browse files
committed
Merge tag 'drm-fixes-for-v4.14-rc1' of git://people.freedesktop.org/~airlied/linux
Pull drm AMD fixes from Dave Airlie: "Just had a single AMD fixes pull from Alex for rc1" * tag 'drm-fixes-for-v4.14-rc1' of git://people.freedesktop.org/~airlied/linux: drm/amdgpu: revert "fix deadlock of reservation between cs and gpu reset v2" drm/amdgpu: remove duplicate return statement drm/amdgpu: check memory allocation failure drm/amd/amdgpu: fix BANK_SELECT on Vega10 (v2) drm/amdgpu: inline amdgpu_ttm_do_bind again drm/amdgpu: fix amdgpu_ttm_bind drm/amdgpu: remove the GART copy hack drm/ttm:fix wrong decoding of bo_count drm/ttm: fix missing inc bo_count drm/amdgpu: set sched_hw_submission higher for KIQ (v3) drm/amdgpu: move default gart size setting into gmc modules drm/amdgpu: refine default gart size drm/amd/powerplay: ACG frequency added in PPTable drm/amdgpu: discard commands of killed processes drm/amdgpu: fix and cleanup shadow handling drm/amdgpu: add automatic per asic settings for gart_size drm/amdgpu/gfx8: fix spelling typo in mqd allocation drm/amd/powerplay: unhalt mec after loading drm/amdgpu/virtual_dce: Virtual display doesn't support disable vblank immediately drm/amdgpu: Fix huge page updates with CPU
2 parents bbe05e5 + 47e0cd6 commit 02cfe97

28 files changed

Lines changed: 236 additions & 160 deletions

drivers/gpu/drm/amd/amdgpu/amdgpu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
extern int amdgpu_modeset;
7777
extern int amdgpu_vram_limit;
7878
extern int amdgpu_vis_vram_limit;
79-
extern unsigned amdgpu_gart_size;
79+
extern int amdgpu_gart_size;
8080
extern int amdgpu_gtt_size;
8181
extern int amdgpu_moverate;
8282
extern int amdgpu_benchmarking;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ static const struct kfd2kgd_calls kfd2kgd = {
155155
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void)
156156
{
157157
return (struct kfd2kgd_calls *)&kfd2kgd;
158-
return (struct kfd2kgd_calls *)&kfd2kgd;
159158
}
160159

161160
static inline struct amdgpu_device *get_amdgpu_device(struct kgd_dev *kgd)

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,6 +1079,9 @@ static int amdgpu_cs_process_syncobj_out_dep(struct amdgpu_cs_parser *p,
10791079
GFP_KERNEL);
10801080
p->num_post_dep_syncobjs = 0;
10811081

1082+
if (!p->post_dep_syncobjs)
1083+
return -ENOMEM;
1084+
10821085
for (i = 0; i < num_deps; ++i) {
10831086
p->post_dep_syncobjs[i] = drm_syncobj_find(p->filp, deps[i].handle);
10841087
if (!p->post_dep_syncobjs[i])
@@ -1150,7 +1153,6 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
11501153
cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, p->fence);
11511154
job->uf_sequence = cs->out.handle;
11521155
amdgpu_job_free_resources(job);
1153-
amdgpu_cs_parser_fini(p, 0, true);
11541156

11551157
trace_amdgpu_cs_ioctl(job);
11561158
amd_sched_entity_push_job(&job->base);
@@ -1208,10 +1210,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
12081210
goto out;
12091211

12101212
r = amdgpu_cs_submit(&parser, cs);
1211-
if (r)
1212-
goto out;
12131213

1214-
return 0;
12151214
out:
12161215
amdgpu_cs_parser_fini(&parser, r, reserved_buffers);
12171216
return r;

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,11 +1062,11 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev)
10621062
amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs);
10631063
}
10641064

1065-
if (amdgpu_gart_size < 32) {
1065+
if (amdgpu_gart_size != -1 && amdgpu_gart_size < 32) {
10661066
/* gart size must be greater or equal to 32M */
10671067
dev_warn(adev->dev, "gart size (%d) too small\n",
10681068
amdgpu_gart_size);
1069-
amdgpu_gart_size = 32;
1069+
amdgpu_gart_size = -1;
10701070
}
10711071

10721072
if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) {
@@ -2622,12 +2622,6 @@ static int amdgpu_recover_vram_from_shadow(struct amdgpu_device *adev,
26222622
goto err;
26232623
}
26242624

2625-
r = amdgpu_ttm_bind(&bo->shadow->tbo, &bo->shadow->tbo.mem);
2626-
if (r) {
2627-
DRM_ERROR("%p bind failed\n", bo->shadow);
2628-
goto err;
2629-
}
2630-
26312625
r = amdgpu_bo_restore_from_shadow(adev, ring, bo,
26322626
NULL, fence, true);
26332627
if (r) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676

7777
int amdgpu_vram_limit = 0;
7878
int amdgpu_vis_vram_limit = 0;
79-
unsigned amdgpu_gart_size = 256;
79+
int amdgpu_gart_size = -1; /* auto */
8080
int amdgpu_gtt_size = -1; /* auto */
8181
int amdgpu_moverate = -1; /* auto */
8282
int amdgpu_benchmarking = 0;
@@ -128,7 +128,7 @@ module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
128128
MODULE_PARM_DESC(vis_vramlimit, "Restrict visible VRAM for testing, in megabytes");
129129
module_param_named(vis_vramlimit, amdgpu_vis_vram_limit, int, 0444);
130130

131-
MODULE_PARM_DESC(gartsize, "Size of PCIE/IGP gart to setup in megabytes (32, 64, etc.)");
131+
MODULE_PARM_DESC(gartsize, "Size of GART to setup in megabytes (32, 64, etc., -1=auto)");
132132
module_param_named(gartsize, amdgpu_gart_size, uint, 0600);
133133

134134
MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)");

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,6 @@
5656
* Common GART table functions.
5757
*/
5858

59-
/**
60-
* amdgpu_gart_set_defaults - set the default gart_size
61-
*
62-
* @adev: amdgpu_device pointer
63-
*
64-
* Set the default gart_size based on parameters and available VRAM.
65-
*/
66-
void amdgpu_gart_set_defaults(struct amdgpu_device *adev)
67-
{
68-
adev->mc.gart_size = (uint64_t)amdgpu_gart_size << 20;
69-
}
70-
7159
/**
7260
* amdgpu_gart_table_ram_alloc - allocate system ram for gart page table
7361
*

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ struct amdgpu_gart {
5656
const struct amdgpu_gart_funcs *gart_funcs;
5757
};
5858

59-
void amdgpu_gart_set_defaults(struct amdgpu_device *adev);
6059
int amdgpu_gart_table_ram_alloc(struct amdgpu_device *adev);
6160
void amdgpu_gart_table_ram_free(struct amdgpu_device *adev);
6261
int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev);

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,10 @@ bool amdgpu_gtt_mgr_is_allocated(struct ttm_mem_reg *mem)
108108
*
109109
* Allocate the address space for a node.
110110
*/
111-
int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
112-
struct ttm_buffer_object *tbo,
113-
const struct ttm_place *place,
114-
struct ttm_mem_reg *mem)
111+
static int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
112+
struct ttm_buffer_object *tbo,
113+
const struct ttm_place *place,
114+
struct ttm_mem_reg *mem)
115115
{
116116
struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
117117
struct amdgpu_gtt_mgr *mgr = man->priv;
@@ -143,12 +143,8 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
143143
fpfn, lpfn, mode);
144144
spin_unlock(&mgr->lock);
145145

146-
if (!r) {
146+
if (!r)
147147
mem->start = node->start;
148-
if (&tbo->mem == mem)
149-
tbo->offset = (tbo->mem.start << PAGE_SHIFT) +
150-
tbo->bdev->man[tbo->mem.mem_type].gpu_offset;
151-
}
152148

153149
return r;
154150
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,9 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
221221

222222
spin_lock_init(&adev->irq.lock);
223223

224-
/* Disable vblank irqs aggressively for power-saving */
225-
adev->ddev->vblank_disable_immediate = true;
224+
if (!adev->enable_virtual_display)
225+
/* Disable vblank irqs aggressively for power-saving */
226+
adev->ddev->vblank_disable_immediate = true;
226227

227228
r = drm_vblank_init(adev->ddev, adev->mode_info.num_crtc);
228229
if (r) {

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,10 @@ static void amdgpu_ttm_placement_init(struct amdgpu_device *adev,
9191

9292
if (domain & AMDGPU_GEM_DOMAIN_GTT) {
9393
places[c].fpfn = 0;
94-
places[c].lpfn = 0;
94+
if (flags & AMDGPU_GEM_CREATE_SHADOW)
95+
places[c].lpfn = adev->mc.gart_size >> PAGE_SHIFT;
96+
else
97+
places[c].lpfn = 0;
9598
places[c].flags = TTM_PL_FLAG_TT;
9699
if (flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC)
97100
places[c].flags |= TTM_PL_FLAG_WC |
@@ -446,17 +449,16 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
446449
if (bo->shadow)
447450
return 0;
448451

449-
bo->flags |= AMDGPU_GEM_CREATE_SHADOW;
450-
memset(&placements, 0,
451-
(AMDGPU_GEM_DOMAIN_MAX + 1) * sizeof(struct ttm_place));
452-
453-
amdgpu_ttm_placement_init(adev, &placement,
454-
placements, AMDGPU_GEM_DOMAIN_GTT,
455-
AMDGPU_GEM_CREATE_CPU_GTT_USWC);
452+
memset(&placements, 0, sizeof(placements));
453+
amdgpu_ttm_placement_init(adev, &placement, placements,
454+
AMDGPU_GEM_DOMAIN_GTT,
455+
AMDGPU_GEM_CREATE_CPU_GTT_USWC |
456+
AMDGPU_GEM_CREATE_SHADOW);
456457

457458
r = amdgpu_bo_create_restricted(adev, size, byte_align, true,
458459
AMDGPU_GEM_DOMAIN_GTT,
459-
AMDGPU_GEM_CREATE_CPU_GTT_USWC,
460+
AMDGPU_GEM_CREATE_CPU_GTT_USWC |
461+
AMDGPU_GEM_CREATE_SHADOW,
460462
NULL, &placement,
461463
bo->tbo.resv,
462464
0,
@@ -484,30 +486,28 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
484486
{
485487
struct ttm_placement placement = {0};
486488
struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1];
489+
uint64_t parent_flags = flags & ~AMDGPU_GEM_CREATE_SHADOW;
487490
int r;
488491

489-
memset(&placements, 0,
490-
(AMDGPU_GEM_DOMAIN_MAX + 1) * sizeof(struct ttm_place));
492+
memset(&placements, 0, sizeof(placements));
493+
amdgpu_ttm_placement_init(adev, &placement, placements,
494+
domain, parent_flags);
491495

492-
amdgpu_ttm_placement_init(adev, &placement,
493-
placements, domain, flags);
494-
495-
r = amdgpu_bo_create_restricted(adev, size, byte_align, kernel,
496-
domain, flags, sg, &placement,
497-
resv, init_value, bo_ptr);
496+
r = amdgpu_bo_create_restricted(adev, size, byte_align, kernel, domain,
497+
parent_flags, sg, &placement, resv,
498+
init_value, bo_ptr);
498499
if (r)
499500
return r;
500501

501-
if (amdgpu_need_backup(adev) && (flags & AMDGPU_GEM_CREATE_SHADOW)) {
502-
if (!resv) {
503-
r = ww_mutex_lock(&(*bo_ptr)->tbo.resv->lock, NULL);
504-
WARN_ON(r != 0);
505-
}
502+
if ((flags & AMDGPU_GEM_CREATE_SHADOW) && amdgpu_need_backup(adev)) {
503+
if (!resv)
504+
WARN_ON(reservation_object_lock((*bo_ptr)->tbo.resv,
505+
NULL));
506506

507507
r = amdgpu_bo_create_shadow(adev, size, byte_align, (*bo_ptr));
508508

509509
if (!resv)
510-
ww_mutex_unlock(&(*bo_ptr)->tbo.resv->lock);
510+
reservation_object_unlock((*bo_ptr)->tbo.resv);
511511

512512
if (r)
513513
amdgpu_bo_unref(bo_ptr);

0 commit comments

Comments
 (0)