Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdkfd: Make all TLB-flushes heavy-weight

With only one sequence number we cannot track the need for legacy vs
heavy-weight flushes reliably. Always use heavy-weight.

Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
Reviewed-by: Philip Yang <philip.yang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit c1a3ff1d327820cd9a52bc1056b98681fc088949)
Cc: stable@vger.kernel.org

authored by

Felix Kuehling and committed by
Alex Deucher
9b4e3495 f0997a06

+10 -10
+2 -2
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
··· 1360 1360 peer_pdd = kfd_process_device_data_by_id(p, devices_arr[i]); 1361 1361 if (WARN_ON_ONCE(!peer_pdd)) 1362 1362 continue; 1363 - kfd_flush_tlb(peer_pdd, TLB_FLUSH_LEGACY); 1363 + kfd_flush_tlb(peer_pdd); 1364 1364 } 1365 1365 kfree(devices_arr); 1366 1366 ··· 1455 1455 if (WARN_ON_ONCE(!peer_pdd)) 1456 1456 continue; 1457 1457 if (flush_tlb) 1458 - kfd_flush_tlb(peer_pdd, TLB_FLUSH_HEAVYWEIGHT); 1458 + kfd_flush_tlb(peer_pdd); 1459 1459 1460 1460 /* Remove dma mapping after tlb flush to avoid IO_PAGE_FAULT */ 1461 1461 err = amdgpu_amdkfd_gpuvm_dmaunmap_mem(mem, peer_pdd->drm_priv);
+3 -3
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
··· 572 572 qpd->vmid, 573 573 qpd->page_table_base); 574 574 /* invalidate the VM context after pasid and vmid mapping is set up */ 575 - kfd_flush_tlb(qpd_to_pdd(qpd), TLB_FLUSH_LEGACY); 575 + kfd_flush_tlb(qpd_to_pdd(qpd)); 576 576 577 577 if (dqm->dev->kfd2kgd->set_scratch_backing_va) 578 578 dqm->dev->kfd2kgd->set_scratch_backing_va(dqm->dev->adev, ··· 610 610 if (flush_texture_cache_nocpsch(q->device, qpd)) 611 611 dev_err(dev, "Failed to flush TC\n"); 612 612 613 - kfd_flush_tlb(qpd_to_pdd(qpd), TLB_FLUSH_LEGACY); 613 + kfd_flush_tlb(qpd_to_pdd(qpd)); 614 614 615 615 /* Release the vmid mapping */ 616 616 set_pasid_vmid_mapping(dqm, 0, qpd->vmid); ··· 1284 1284 dqm->dev->adev, 1285 1285 qpd->vmid, 1286 1286 qpd->page_table_base); 1287 - kfd_flush_tlb(pdd, TLB_FLUSH_LEGACY); 1287 + kfd_flush_tlb(pdd); 1288 1288 } 1289 1289 1290 1290 /* Take a safe reference to the mm_struct, which may otherwise
+3 -3
drivers/gpu/drm/amd/amdkfd/kfd_priv.h
··· 1554 1554 void kfd_signal_poison_consumed_event(struct kfd_node *dev, u32 pasid); 1555 1555 void kfd_signal_process_terminate_event(struct kfd_process *p); 1556 1556 1557 - static inline void kfd_flush_tlb(struct kfd_process_device *pdd, 1558 - enum TLB_FLUSH_TYPE type) 1557 + static inline void kfd_flush_tlb(struct kfd_process_device *pdd) 1559 1558 { 1560 1559 struct amdgpu_device *adev = pdd->dev->adev; 1561 1560 struct amdgpu_vm *vm = drm_priv_to_vm(pdd->drm_priv); 1562 1561 1563 - amdgpu_vm_flush_compute_tlb(adev, vm, type, pdd->dev->xcc_mask); 1562 + amdgpu_vm_flush_compute_tlb(adev, vm, TLB_FLUSH_HEAVYWEIGHT, 1563 + pdd->dev->xcc_mask); 1564 1564 } 1565 1565 1566 1566 static inline bool kfd_flush_tlb_after_unmap(struct kfd_dev *dev)
+2 -2
drivers/gpu/drm/amd/amdkfd/kfd_svm.c
··· 1424 1424 if (r) 1425 1425 break; 1426 1426 } 1427 - kfd_flush_tlb(pdd, TLB_FLUSH_HEAVYWEIGHT); 1427 + kfd_flush_tlb(pdd); 1428 1428 } 1429 1429 1430 1430 return r; ··· 1571 1571 } 1572 1572 } 1573 1573 1574 - kfd_flush_tlb(pdd, TLB_FLUSH_LEGACY); 1574 + kfd_flush_tlb(pdd); 1575 1575 } 1576 1576 1577 1577 return r;