@@ -689,13 +689,13 @@ void kfd_process_destroy_wq(void)
689689}
690690
691691static void kfd_process_free_gpuvm (struct kgd_mem * mem ,
692- struct kfd_process_device * pdd , void * kptr )
692+ struct kfd_process_device * pdd , void * * kptr )
693693{
694694 struct kfd_dev * dev = pdd -> dev ;
695695
696- if (kptr ) {
696+ if (kptr && * kptr ) {
697697 amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel (mem );
698- kptr = NULL ;
698+ * kptr = NULL ;
699699 }
700700
701701 amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu (dev -> adev , mem , pdd -> drm_priv );
@@ -795,7 +795,7 @@ static void kfd_process_device_destroy_ib_mem(struct kfd_process_device *pdd)
795795 if (!qpd -> ib_kaddr || !qpd -> ib_base )
796796 return ;
797797
798- kfd_process_free_gpuvm (qpd -> ib_mem , pdd , qpd -> ib_kaddr );
798+ kfd_process_free_gpuvm (qpd -> ib_mem , pdd , & qpd -> ib_kaddr );
799799}
800800
801801struct kfd_process * kfd_create_process (struct file * filep )
@@ -1277,7 +1277,7 @@ static void kfd_process_device_destroy_cwsr_dgpu(struct kfd_process_device *pdd)
12771277 if (!dev -> cwsr_enabled || !qpd -> cwsr_kaddr || !qpd -> cwsr_base )
12781278 return ;
12791279
1280- kfd_process_free_gpuvm (qpd -> cwsr_mem , pdd , qpd -> cwsr_kaddr );
1280+ kfd_process_free_gpuvm (qpd -> cwsr_mem , pdd , & qpd -> cwsr_kaddr );
12811281}
12821282
12831283void kfd_process_set_trap_handler (struct qcm_process_device * qpd ,
@@ -1576,9 +1576,9 @@ int kfd_process_device_init_vm(struct kfd_process_device *pdd,
15761576 p = pdd -> process ;
15771577 dev = pdd -> dev ;
15781578
1579- ret = amdgpu_amdkfd_gpuvm_acquire_process_vm (
1580- dev -> adev , drm_file , p -> pasid ,
1581- & p -> kgd_process_info , & p -> ef );
1579+ ret = amdgpu_amdkfd_gpuvm_acquire_process_vm (dev -> adev , drm_file ,
1580+ & p -> kgd_process_info ,
1581+ & p -> ef );
15821582 if (ret ) {
15831583 pr_err ("Failed to create process VM object\n" );
15841584 return ret ;
@@ -1593,13 +1593,19 @@ int kfd_process_device_init_vm(struct kfd_process_device *pdd,
15931593 if (ret )
15941594 goto err_init_cwsr ;
15951595
1596+ ret = amdgpu_amdkfd_gpuvm_set_vm_pasid (dev -> adev , drm_file , p -> pasid );
1597+ if (ret )
1598+ goto err_set_pasid ;
1599+
15961600 pdd -> drm_file = drm_file ;
15971601
15981602 return 0 ;
15991603
1604+ err_set_pasid :
1605+ kfd_process_device_destroy_cwsr_dgpu (pdd );
16001606err_init_cwsr :
1607+ kfd_process_device_destroy_ib_mem (pdd );
16011608err_reserve_ib_mem :
1602- kfd_process_device_free_bos (pdd );
16031609 pdd -> drm_priv = NULL ;
16041610
16051611 return ret ;
0 commit comments