···7676extern int amdgpu_modeset;7777extern int amdgpu_vram_limit;7878extern int amdgpu_vis_vram_limit;7979-extern unsigned amdgpu_gart_size;7979+extern int amdgpu_gart_size;8080extern int amdgpu_gtt_size;8181extern int amdgpu_moverate;8282extern int amdgpu_benchmarking;
···10791079 GFP_KERNEL);10801080 p->num_post_dep_syncobjs = 0;1081108110821082+ if (!p->post_dep_syncobjs)10831083+ return -ENOMEM;10841084+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])···11531150 cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, p->fence);11541151 job->uf_sequence = cs->out.handle;11551152 amdgpu_job_free_resources(job);11561156- amdgpu_cs_parser_fini(p, 0, true);1157115311581154 trace_amdgpu_cs_ioctl(job);11591155 amd_sched_entity_push_job(&job->base);···12101208 goto out;1211120912121210 r = amdgpu_cs_submit(&parser, cs);12131213- if (r)12141214- goto out;1215121112161216- return 0;12171212out:12181213 amdgpu_cs_parser_fini(&parser, r, reserved_buffers);12191214 return r;
+2-8
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
···10621062 amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs);10631063 }1064106410651065- if (amdgpu_gart_size < 32) {10651065+ 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);10691069- amdgpu_gart_size = 32;10691069+ amdgpu_gart_size = -1;10701070 }1071107110721072 if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) {···26192619 r = amdgpu_bo_validate(bo->shadow);26202620 if (r) {26212621 DRM_ERROR("bo validate failed!\n");26222622- goto err;26232623- }26242624-26252625- r = amdgpu_ttm_bind(&bo->shadow->tbo, &bo->shadow->tbo.mem);26262626- if (r) {26272627- DRM_ERROR("%p bind failed\n", bo->shadow);26282622 goto err;26292623 }26302624
+2-2
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
···76767777int amdgpu_vram_limit = 0;7878int amdgpu_vis_vram_limit = 0;7979-unsigned amdgpu_gart_size = 256;7979+int amdgpu_gart_size = -1; /* auto */8080int amdgpu_gtt_size = -1; /* auto */8181int amdgpu_moverate = -1; /* auto */8282int amdgpu_benchmarking = 0;···128128MODULE_PARM_DESC(vis_vramlimit, "Restrict visible VRAM for testing, in megabytes");129129module_param_named(vis_vramlimit, amdgpu_vis_vram_limit, int, 0444);130130131131-MODULE_PARM_DESC(gartsize, "Size of PCIE/IGP gart to setup in megabytes (32, 64, etc.)");131131+MODULE_PARM_DESC(gartsize, "Size of GART to setup in megabytes (32, 64, etc., -1=auto)");132132module_param_named(gartsize, amdgpu_gart_size, uint, 0600);133133134134MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)");
-12
drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
···5757 */58585959/**6060- * amdgpu_gart_set_defaults - set the default gart_size6161- *6262- * @adev: amdgpu_device pointer6363- *6464- * Set the default gart_size based on parameters and available VRAM.6565- */6666-void amdgpu_gart_set_defaults(struct amdgpu_device *adev)6767-{6868- adev->mc.gart_size = (uint64_t)amdgpu_gart_size << 20;6969-}7070-7171-/**7260 * amdgpu_gart_table_ram_alloc - allocate system ram for gart page table7361 *7462 * @adev: amdgpu_device pointer
···170170 unsigned irq_type)171171{172172 int r;173173+ int sched_hw_submission = amdgpu_sched_hw_submission;174174+175175+ /* Set the hw submission limit higher for KIQ because176176+ * it's used for a number of gfx/compute tasks by both177177+ * KFD and KGD which may have outstanding fences and178178+ * it doesn't really use the gpu scheduler anyway;179179+ * KIQ tasks get submitted directly to the ring.180180+ */181181+ if (ring->funcs->type == AMDGPU_RING_TYPE_KIQ)182182+ sched_hw_submission = max(sched_hw_submission, 256);173183174184 if (ring->adev == NULL) {175185 if (adev->num_rings >= AMDGPU_MAX_RINGS)···188178 ring->adev = adev;189179 ring->idx = adev->num_rings++;190180 adev->rings[ring->idx] = ring;191191- r = amdgpu_fence_driver_init_ring(ring,192192- amdgpu_sched_hw_submission);181181+ r = amdgpu_fence_driver_init_ring(ring, sched_hw_submission);193182 if (r)194183 return r;195184 }···227218 return r;228219 }229220230230- ring->ring_size = roundup_pow_of_two(max_dw * 4 *231231- amdgpu_sched_hw_submission);221221+ ring->ring_size = roundup_pow_of_two(max_dw * 4 * sched_hw_submission);232222233223 ring->buf_mask = (ring->ring_size / 4) - 1;234224 ring->ptr_mask = ring->funcs->support_64bit_ptrs ?
+44-34
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
···761761 sg_free_table(ttm->sg);762762}763763764764-static int amdgpu_ttm_do_bind(struct ttm_tt *ttm, struct ttm_mem_reg *mem)765765-{766766- struct amdgpu_ttm_tt *gtt = (void *)ttm;767767- uint64_t flags;768768- int r;769769-770770- spin_lock(>t->adev->gtt_list_lock);771771- flags = amdgpu_ttm_tt_pte_flags(gtt->adev, ttm, mem);772772- gtt->offset = (u64)mem->start << PAGE_SHIFT;773773- r = amdgpu_gart_bind(gtt->adev, gtt->offset, ttm->num_pages,774774- ttm->pages, gtt->ttm.dma_address, flags);775775-776776- if (r) {777777- DRM_ERROR("failed to bind %lu pages at 0x%08llX\n",778778- ttm->num_pages, gtt->offset);779779- goto error_gart_bind;780780- }781781-782782- list_add_tail(>t->list, >t->adev->gtt_list);783783-error_gart_bind:784784- spin_unlock(>t->adev->gtt_list_lock);785785- return r;786786-787787-}788788-789764static int amdgpu_ttm_backend_bind(struct ttm_tt *ttm,790765 struct ttm_mem_reg *bo_mem)791766{792767 struct amdgpu_ttm_tt *gtt = (void*)ttm;768768+ uint64_t flags;793769 int r = 0;794770795771 if (gtt->userptr) {···785809 bo_mem->mem_type == AMDGPU_PL_OA)786810 return -EINVAL;787811788788- if (amdgpu_gtt_mgr_is_allocated(bo_mem))789789- r = amdgpu_ttm_do_bind(ttm, bo_mem);812812+ if (!amdgpu_gtt_mgr_is_allocated(bo_mem))813813+ return 0;790814815815+ spin_lock(>t->adev->gtt_list_lock);816816+ flags = amdgpu_ttm_tt_pte_flags(gtt->adev, ttm, bo_mem);817817+ gtt->offset = (u64)bo_mem->start << PAGE_SHIFT;818818+ r = amdgpu_gart_bind(gtt->adev, gtt->offset, ttm->num_pages,819819+ ttm->pages, gtt->ttm.dma_address, flags);820820+821821+ if (r) {822822+ DRM_ERROR("failed to bind %lu pages at 0x%08llX\n",823823+ ttm->num_pages, gtt->offset);824824+ goto error_gart_bind;825825+ }826826+827827+ list_add_tail(>t->list, >t->adev->gtt_list);828828+error_gart_bind:829829+ spin_unlock(>t->adev->gtt_list_lock);791830 return r;792831}793832···815824816825int amdgpu_ttm_bind(struct ttm_buffer_object *bo, struct ttm_mem_reg *bo_mem)817826{827827+ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->bdev);818828 struct ttm_tt *ttm = bo->ttm;829829+ struct ttm_mem_reg tmp;830830+831831+ struct ttm_placement placement;832832+ struct ttm_place placements;819833 int r;820834821835 if (!ttm || amdgpu_ttm_is_bound(ttm))822836 return 0;823837824824- r = amdgpu_gtt_mgr_alloc(&bo->bdev->man[TTM_PL_TT], bo,825825- NULL, bo_mem);826826- if (r) {827827- DRM_ERROR("Failed to allocate GTT address space (%d)\n", r);828828- return r;829829- }838838+ tmp = bo->mem;839839+ tmp.mm_node = NULL;840840+ placement.num_placement = 1;841841+ placement.placement = &placements;842842+ placement.num_busy_placement = 1;843843+ placement.busy_placement = &placements;844844+ placements.fpfn = 0;845845+ placements.lpfn = adev->mc.gart_size >> PAGE_SHIFT;846846+ placements.flags = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT;830847831831- return amdgpu_ttm_do_bind(ttm, bo_mem);848848+ r = ttm_bo_mem_space(bo, &placement, &tmp, true, false);849849+ if (unlikely(r))850850+ return r;851851+852852+ r = ttm_bo_move_ttm(bo, true, false, &tmp);853853+ if (unlikely(r))854854+ ttm_bo_mem_put(bo, &tmp);855855+ else856856+ bo->offset = (bo->mem.start << PAGE_SHIFT) +857857+ bo->bdev->man[bo->mem.mem_type].gpu_offset;858858+859859+ return r;832860}833861834862int amdgpu_ttm_recover_gart(struct amdgpu_device *adev)
···332332 adev->mc.real_vram_size = RREG32(mmCONFIG_MEMSIZE) * 1024ULL * 1024ULL;333333 adev->mc.visible_vram_size = adev->mc.aper_size;334334335335- amdgpu_gart_set_defaults(adev);335335+ /* set the gart size */336336+ if (amdgpu_gart_size == -1) {337337+ switch (adev->asic_type) {338338+ case CHIP_HAINAN: /* no MM engines */339339+ default:340340+ adev->mc.gart_size = 256ULL << 20;341341+ break;342342+ case CHIP_VERDE: /* UVD, VCE do not support GPUVM */343343+ case CHIP_TAHITI: /* UVD, VCE do not support GPUVM */344344+ case CHIP_PITCAIRN: /* UVD, VCE do not support GPUVM */345345+ case CHIP_OLAND: /* UVD, VCE do not support GPUVM */346346+ adev->mc.gart_size = 1024ULL << 20;347347+ break;348348+ }349349+ } else {350350+ adev->mc.gart_size = (u64)amdgpu_gart_size << 20;351351+ }352352+336353 gmc_v6_0_vram_gtt_location(adev, &adev->mc);337354338355 return 0;
+21-1
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
···386386 if (adev->mc.visible_vram_size > adev->mc.real_vram_size)387387 adev->mc.visible_vram_size = adev->mc.real_vram_size;388388389389- amdgpu_gart_set_defaults(adev);389389+ /* set the gart size */390390+ if (amdgpu_gart_size == -1) {391391+ switch (adev->asic_type) {392392+ case CHIP_TOPAZ: /* no MM engines */393393+ default:394394+ adev->mc.gart_size = 256ULL << 20;395395+ break;396396+#ifdef CONFIG_DRM_AMDGPU_CIK397397+ case CHIP_BONAIRE: /* UVD, VCE do not support GPUVM */398398+ case CHIP_HAWAII: /* UVD, VCE do not support GPUVM */399399+ case CHIP_KAVERI: /* UVD, VCE do not support GPUVM */400400+ case CHIP_KABINI: /* UVD, VCE do not support GPUVM */401401+ case CHIP_MULLINS: /* UVD, VCE do not support GPUVM */402402+ adev->mc.gart_size = 1024ULL << 20;403403+ break;404404+#endif405405+ }406406+ } else {407407+ adev->mc.gart_size = (u64)amdgpu_gart_size << 20;408408+ }409409+390410 gmc_v7_0_vram_gtt_location(adev, &adev->mc);391411392412 return 0;
+20-1
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
···562562 if (adev->mc.visible_vram_size > adev->mc.real_vram_size)563563 adev->mc.visible_vram_size = adev->mc.real_vram_size;564564565565- amdgpu_gart_set_defaults(adev);565565+ /* set the gart size */566566+ if (amdgpu_gart_size == -1) {567567+ switch (adev->asic_type) {568568+ case CHIP_POLARIS11: /* all engines support GPUVM */569569+ case CHIP_POLARIS10: /* all engines support GPUVM */570570+ case CHIP_POLARIS12: /* all engines support GPUVM */571571+ default:572572+ adev->mc.gart_size = 256ULL << 20;573573+ break;574574+ case CHIP_TONGA: /* UVD, VCE do not support GPUVM */575575+ case CHIP_FIJI: /* UVD, VCE do not support GPUVM */576576+ case CHIP_CARRIZO: /* UVD, VCE do not support GPUVM, DCE SG support */577577+ case CHIP_STONEY: /* UVD does not support GPUVM, DCE SG support */578578+ adev->mc.gart_size = 1024ULL << 20;579579+ break;580580+ }581581+ } else {582582+ adev->mc.gart_size = (u64)amdgpu_gart_size << 20;583583+ }584584+566585 gmc_v8_0_vram_gtt_location(adev, &adev->mc);567586568587 return 0;
+15-1
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
···499499 if (adev->mc.visible_vram_size > adev->mc.real_vram_size)500500 adev->mc.visible_vram_size = adev->mc.real_vram_size;501501502502- amdgpu_gart_set_defaults(adev);502502+ /* set the gart size */503503+ if (amdgpu_gart_size == -1) {504504+ switch (adev->asic_type) {505505+ case CHIP_VEGA10: /* all engines support GPUVM */506506+ default:507507+ adev->mc.gart_size = 256ULL << 20;508508+ break;509509+ case CHIP_RAVEN: /* DCE SG support */510510+ adev->mc.gart_size = 1024ULL << 20;511511+ break;512512+ }513513+ } else {514514+ adev->mc.gart_size = (u64)amdgpu_gart_size << 20;515515+ }516516+503517 gmc_v9_0_vram_gtt_location(adev, &adev->mc);504518505519 return 0;
···205205 struct amd_sched_entity *entity)206206{207207 struct amd_sched_rq *rq = entity->rq;208208+ int r;208209209210 if (!amd_sched_entity_is_initialized(sched, entity))210211 return;211211-212212 /**213213 * The client will not queue more IBs during this fini, consume existing214214- * queued IBs214214+ * queued IBs or discard them on SIGKILL215215 */216216- wait_event(sched->job_scheduled, amd_sched_entity_is_idle(entity));217217-216216+ if ((current->flags & PF_SIGNALED) && current->exit_code == SIGKILL)217217+ r = -ERESTARTSYS;218218+ else219219+ r = wait_event_killable(sched->job_scheduled,220220+ amd_sched_entity_is_idle(entity));218221 amd_sched_rq_remove_entity(rq, entity);222222+ if (r) {223223+ struct amd_sched_job *job;224224+225225+ /* Park the kernel for a moment to make sure it isn't processing226226+ * our enity.227227+ */228228+ kthread_park(sched->thread);229229+ kthread_unpark(sched->thread);230230+ while (kfifo_out(&entity->job_queue, &job, sizeof(job)))231231+ sched->ops->free_job(job);232232+233233+ }219234 kfifo_free(&entity->job_queue);220235}221236