1 /* 2 * Copyright 2014 Advanced Micro Devices, Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 */ 22 23 #include <linux/mutex.h> 24 #include <linux/log2.h> 25 #include <linux/sched.h> 26 #include <linux/sched/mm.h> 27 #include <linux/sched/task.h> 28 #include <linux/slab.h> 29 #include <linux/amd-iommu.h> 30 #include <linux/notifier.h> 31 #include <linux/compat.h> 32 #include <linux/mman.h> 33 34 struct mm_struct; 35 36 #include "kfd_priv.h" 37 #include "kfd_device_queue_manager.h" 38 #include "kfd_dbgmgr.h" 39 #include "kfd_iommu.h" 40 41 /* 42 * List of struct kfd_process (field kfd_process). 43 * Unique/indexed by mm_struct* 44 */ 45 DEFINE_HASHTABLE(kfd_processes_table, KFD_PROCESS_TABLE_SIZE); 46 static DEFINE_MUTEX(kfd_processes_mutex); 47 48 DEFINE_SRCU(kfd_processes_srcu); 49 50 static struct workqueue_struct *kfd_process_wq; 51 52 static struct kfd_process *find_process(const struct task_struct *thread); 53 static void kfd_process_ref_release(struct kref *ref); 54 static struct kfd_process *create_process(const struct task_struct *thread, 55 struct file *filep); 56 static int kfd_process_init_cwsr(struct kfd_process *p, struct file *filep); 57 58 static void evict_process_worker(struct work_struct *work); 59 static void restore_process_worker(struct work_struct *work); 60 61 62 void kfd_process_create_wq(void) 63 { 64 if (!kfd_process_wq) 65 kfd_process_wq = alloc_workqueue("kfd_process_wq", 0, 0); 66 } 67 68 void kfd_process_destroy_wq(void) 69 { 70 if (kfd_process_wq) { 71 destroy_workqueue(kfd_process_wq); 72 kfd_process_wq = NULL; 73 } 74 } 75 76 struct kfd_process *kfd_create_process(struct file *filep) 77 { 78 struct kfd_process *process; 79 struct task_struct *thread = current; 80 81 if (!thread->mm) 82 return ERR_PTR(-EINVAL); 83 84 /* Only the pthreads threading model is supported. */ 85 if (thread->group_leader->mm != thread->mm) 86 return ERR_PTR(-EINVAL); 87 88 /* 89 * take kfd processes mutex before starting of process creation 90 * so there won't be a case where two threads of the same process 91 * create two kfd_process structures 92 */ 93 mutex_lock(&kfd_processes_mutex); 94 95 /* A prior open of /dev/kfd could have already created the process. */ 96 process = find_process(thread); 97 if (process) 98 pr_debug("Process already found\n"); 99 else 100 process = create_process(thread, filep); 101 102 mutex_unlock(&kfd_processes_mutex); 103 104 return process; 105 } 106 107 struct kfd_process *kfd_get_process(const struct task_struct *thread) 108 { 109 struct kfd_process *process; 110 111 if (!thread->mm) 112 return ERR_PTR(-EINVAL); 113 114 /* Only the pthreads threading model is supported. */ 115 if (thread->group_leader->mm != thread->mm) 116 return ERR_PTR(-EINVAL); 117 118 process = find_process(thread); 119 120 return process; 121 } 122 123 static struct kfd_process *find_process_by_mm(const struct mm_struct *mm) 124 { 125 struct kfd_process *process; 126 127 hash_for_each_possible_rcu(kfd_processes_table, process, 128 kfd_processes, (uintptr_t)mm) 129 if (process->mm == mm) 130 return process; 131 132 return NULL; 133 } 134 135 static struct kfd_process *find_process(const struct task_struct *thread) 136 { 137 struct kfd_process *p; 138 int idx; 139 140 idx = srcu_read_lock(&kfd_processes_srcu); 141 p = find_process_by_mm(thread->mm); 142 srcu_read_unlock(&kfd_processes_srcu, idx); 143 144 return p; 145 } 146 147 void kfd_unref_process(struct kfd_process *p) 148 { 149 kref_put(&p->ref, kfd_process_ref_release); 150 } 151 152 static void kfd_process_destroy_pdds(struct kfd_process *p) 153 { 154 struct kfd_process_device *pdd, *temp; 155 156 list_for_each_entry_safe(pdd, temp, &p->per_device_data, 157 per_device_list) { 158 pr_debug("Releasing pdd (topology id %d) for process (pasid %d)\n", 159 pdd->dev->id, p->pasid); 160 161 if (pdd->vm) 162 pdd->dev->kfd2kgd->destroy_process_vm( 163 pdd->dev->kgd, pdd->vm); 164 165 list_del(&pdd->per_device_list); 166 167 if (pdd->qpd.cwsr_kaddr) 168 free_pages((unsigned long)pdd->qpd.cwsr_kaddr, 169 get_order(KFD_CWSR_TBA_TMA_SIZE)); 170 171 kfree(pdd); 172 } 173 } 174 175 /* No process locking is needed in this function, because the process 176 * is not findable any more. We must assume that no other thread is 177 * using it any more, otherwise we couldn't safely free the process 178 * structure in the end. 179 */ 180 static void kfd_process_wq_release(struct work_struct *work) 181 { 182 struct kfd_process *p = container_of(work, struct kfd_process, 183 release_work); 184 185 kfd_iommu_unbind_process(p); 186 187 kfd_process_destroy_pdds(p); 188 dma_fence_put(p->ef); 189 190 kfd_event_free_process(p); 191 192 kfd_pasid_free(p->pasid); 193 kfd_free_process_doorbells(p); 194 195 mutex_destroy(&p->mutex); 196 197 put_task_struct(p->lead_thread); 198 199 kfree(p); 200 } 201 202 static void kfd_process_ref_release(struct kref *ref) 203 { 204 struct kfd_process *p = container_of(ref, struct kfd_process, ref); 205 206 INIT_WORK(&p->release_work, kfd_process_wq_release); 207 queue_work(kfd_process_wq, &p->release_work); 208 } 209 210 static void kfd_process_destroy_delayed(struct rcu_head *rcu) 211 { 212 struct kfd_process *p = container_of(rcu, struct kfd_process, rcu); 213 214 kfd_unref_process(p); 215 } 216 217 static void kfd_process_notifier_release(struct mmu_notifier *mn, 218 struct mm_struct *mm) 219 { 220 struct kfd_process *p; 221 struct kfd_process_device *pdd = NULL; 222 223 /* 224 * The kfd_process structure can not be free because the 225 * mmu_notifier srcu is read locked 226 */ 227 p = container_of(mn, struct kfd_process, mmu_notifier); 228 if (WARN_ON(p->mm != mm)) 229 return; 230 231 mutex_lock(&kfd_processes_mutex); 232 hash_del_rcu(&p->kfd_processes); 233 mutex_unlock(&kfd_processes_mutex); 234 synchronize_srcu(&kfd_processes_srcu); 235 236 cancel_delayed_work_sync(&p->eviction_work); 237 cancel_delayed_work_sync(&p->restore_work); 238 239 mutex_lock(&p->mutex); 240 241 /* Iterate over all process device data structures and if the 242 * pdd is in debug mode, we should first force unregistration, 243 * then we will be able to destroy the queues 244 */ 245 list_for_each_entry(pdd, &p->per_device_data, per_device_list) { 246 struct kfd_dev *dev = pdd->dev; 247 248 mutex_lock(kfd_get_dbgmgr_mutex()); 249 if (dev && dev->dbgmgr && dev->dbgmgr->pasid == p->pasid) { 250 if (!kfd_dbgmgr_unregister(dev->dbgmgr, p)) { 251 kfd_dbgmgr_destroy(dev->dbgmgr); 252 dev->dbgmgr = NULL; 253 } 254 } 255 mutex_unlock(kfd_get_dbgmgr_mutex()); 256 } 257 258 kfd_process_dequeue_from_all_devices(p); 259 pqm_uninit(&p->pqm); 260 261 /* Indicate to other users that MM is no longer valid */ 262 p->mm = NULL; 263 264 mutex_unlock(&p->mutex); 265 266 mmu_notifier_unregister_no_release(&p->mmu_notifier, mm); 267 mmu_notifier_call_srcu(&p->rcu, &kfd_process_destroy_delayed); 268 } 269 270 static const struct mmu_notifier_ops kfd_process_mmu_notifier_ops = { 271 .release = kfd_process_notifier_release, 272 }; 273 274 static int kfd_process_init_cwsr(struct kfd_process *p, struct file *filep) 275 { 276 unsigned long offset; 277 struct kfd_process_device *pdd = NULL; 278 struct kfd_dev *dev = NULL; 279 struct qcm_process_device *qpd = NULL; 280 281 list_for_each_entry(pdd, &p->per_device_data, per_device_list) { 282 dev = pdd->dev; 283 qpd = &pdd->qpd; 284 if (!dev->cwsr_enabled || qpd->cwsr_kaddr) 285 continue; 286 offset = (dev->id | KFD_MMAP_RESERVED_MEM_MASK) << PAGE_SHIFT; 287 qpd->tba_addr = (int64_t)vm_mmap(filep, 0, 288 KFD_CWSR_TBA_TMA_SIZE, PROT_READ | PROT_EXEC, 289 MAP_SHARED, offset); 290 291 if (IS_ERR_VALUE(qpd->tba_addr)) { 292 int err = qpd->tba_addr; 293 294 pr_err("Failure to set tba address. error %d.\n", err); 295 qpd->tba_addr = 0; 296 qpd->cwsr_kaddr = NULL; 297 return err; 298 } 299 300 memcpy(qpd->cwsr_kaddr, dev->cwsr_isa, dev->cwsr_isa_size); 301 302 qpd->tma_addr = qpd->tba_addr + KFD_CWSR_TMA_OFFSET; 303 pr_debug("set tba :0x%llx, tma:0x%llx, cwsr_kaddr:%p for pqm.\n", 304 qpd->tba_addr, qpd->tma_addr, qpd->cwsr_kaddr); 305 } 306 307 return 0; 308 } 309 310 static struct kfd_process *create_process(const struct task_struct *thread, 311 struct file *filep) 312 { 313 struct kfd_process *process; 314 int err = -ENOMEM; 315 316 process = kzalloc(sizeof(*process), GFP_KERNEL); 317 318 if (!process) 319 goto err_alloc_process; 320 321 process->pasid = kfd_pasid_alloc(); 322 if (process->pasid == 0) 323 goto err_alloc_pasid; 324 325 if (kfd_alloc_process_doorbells(process) < 0) 326 goto err_alloc_doorbells; 327 328 kref_init(&process->ref); 329 330 mutex_init(&process->mutex); 331 332 process->mm = thread->mm; 333 334 /* register notifier */ 335 process->mmu_notifier.ops = &kfd_process_mmu_notifier_ops; 336 err = mmu_notifier_register(&process->mmu_notifier, process->mm); 337 if (err) 338 goto err_mmu_notifier; 339 340 hash_add_rcu(kfd_processes_table, &process->kfd_processes, 341 (uintptr_t)process->mm); 342 343 process->lead_thread = thread->group_leader; 344 get_task_struct(process->lead_thread); 345 346 INIT_LIST_HEAD(&process->per_device_data); 347 348 kfd_event_init_process(process); 349 350 err = pqm_init(&process->pqm, process); 351 if (err != 0) 352 goto err_process_pqm_init; 353 354 /* init process apertures*/ 355 process->is_32bit_user_mode = in_compat_syscall(); 356 err = kfd_init_apertures(process); 357 if (err != 0) 358 goto err_init_apertures; 359 360 INIT_DELAYED_WORK(&process->eviction_work, evict_process_worker); 361 INIT_DELAYED_WORK(&process->restore_work, restore_process_worker); 362 process->last_restore_timestamp = get_jiffies_64(); 363 364 err = kfd_process_init_cwsr(process, filep); 365 if (err) 366 goto err_init_cwsr; 367 368 return process; 369 370 err_init_cwsr: 371 kfd_process_destroy_pdds(process); 372 err_init_apertures: 373 pqm_uninit(&process->pqm); 374 err_process_pqm_init: 375 hash_del_rcu(&process->kfd_processes); 376 synchronize_rcu(); 377 mmu_notifier_unregister_no_release(&process->mmu_notifier, process->mm); 378 err_mmu_notifier: 379 mutex_destroy(&process->mutex); 380 kfd_free_process_doorbells(process); 381 err_alloc_doorbells: 382 kfd_pasid_free(process->pasid); 383 err_alloc_pasid: 384 kfree(process); 385 err_alloc_process: 386 return ERR_PTR(err); 387 } 388 389 struct kfd_process_device *kfd_get_process_device_data(struct kfd_dev *dev, 390 struct kfd_process *p) 391 { 392 struct kfd_process_device *pdd = NULL; 393 394 list_for_each_entry(pdd, &p->per_device_data, per_device_list) 395 if (pdd->dev == dev) 396 return pdd; 397 398 return NULL; 399 } 400 401 struct kfd_process_device *kfd_create_process_device_data(struct kfd_dev *dev, 402 struct kfd_process *p) 403 { 404 struct kfd_process_device *pdd = NULL; 405 406 pdd = kzalloc(sizeof(*pdd), GFP_KERNEL); 407 if (!pdd) 408 return NULL; 409 410 pdd->dev = dev; 411 INIT_LIST_HEAD(&pdd->qpd.queues_list); 412 INIT_LIST_HEAD(&pdd->qpd.priv_queue_list); 413 pdd->qpd.dqm = dev->dqm; 414 pdd->qpd.pqm = &p->pqm; 415 pdd->qpd.evicted = 0; 416 pdd->process = p; 417 pdd->bound = PDD_UNBOUND; 418 pdd->already_dequeued = false; 419 list_add(&pdd->per_device_list, &p->per_device_data); 420 421 /* Create the GPUVM context for this specific device */ 422 if (dev->kfd2kgd->create_process_vm(dev->kgd, &pdd->vm, 423 &p->kgd_process_info, &p->ef)) { 424 pr_err("Failed to create process VM object\n"); 425 goto err_create_pdd; 426 } 427 return pdd; 428 429 err_create_pdd: 430 list_del(&pdd->per_device_list); 431 kfree(pdd); 432 return NULL; 433 } 434 435 /* 436 * Direct the IOMMU to bind the process (specifically the pasid->mm) 437 * to the device. 438 * Unbinding occurs when the process dies or the device is removed. 439 * 440 * Assumes that the process lock is held. 441 */ 442 struct kfd_process_device *kfd_bind_process_to_device(struct kfd_dev *dev, 443 struct kfd_process *p) 444 { 445 struct kfd_process_device *pdd; 446 int err; 447 448 pdd = kfd_get_process_device_data(dev, p); 449 if (!pdd) { 450 pr_err("Process device data doesn't exist\n"); 451 return ERR_PTR(-ENOMEM); 452 } 453 454 err = kfd_iommu_bind_process_to_device(pdd); 455 if (err) 456 return ERR_PTR(err); 457 458 return pdd; 459 } 460 461 struct kfd_process_device *kfd_get_first_process_device_data( 462 struct kfd_process *p) 463 { 464 return list_first_entry(&p->per_device_data, 465 struct kfd_process_device, 466 per_device_list); 467 } 468 469 struct kfd_process_device *kfd_get_next_process_device_data( 470 struct kfd_process *p, 471 struct kfd_process_device *pdd) 472 { 473 if (list_is_last(&pdd->per_device_list, &p->per_device_data)) 474 return NULL; 475 return list_next_entry(pdd, per_device_list); 476 } 477 478 bool kfd_has_process_device_data(struct kfd_process *p) 479 { 480 return !(list_empty(&p->per_device_data)); 481 } 482 483 /* This increments the process->ref counter. */ 484 struct kfd_process *kfd_lookup_process_by_pasid(unsigned int pasid) 485 { 486 struct kfd_process *p, *ret_p = NULL; 487 unsigned int temp; 488 489 int idx = srcu_read_lock(&kfd_processes_srcu); 490 491 hash_for_each_rcu(kfd_processes_table, temp, p, kfd_processes) { 492 if (p->pasid == pasid) { 493 kref_get(&p->ref); 494 ret_p = p; 495 break; 496 } 497 } 498 499 srcu_read_unlock(&kfd_processes_srcu, idx); 500 501 return ret_p; 502 } 503 504 /* This increments the process->ref counter. */ 505 struct kfd_process *kfd_lookup_process_by_mm(const struct mm_struct *mm) 506 { 507 struct kfd_process *p; 508 509 int idx = srcu_read_lock(&kfd_processes_srcu); 510 511 p = find_process_by_mm(mm); 512 if (p) 513 kref_get(&p->ref); 514 515 srcu_read_unlock(&kfd_processes_srcu, idx); 516 517 return p; 518 } 519 520 /* process_evict_queues - Evict all user queues of a process 521 * 522 * Eviction is reference-counted per process-device. This means multiple 523 * evictions from different sources can be nested safely. 524 */ 525 static int process_evict_queues(struct kfd_process *p) 526 { 527 struct kfd_process_device *pdd; 528 int r = 0; 529 unsigned int n_evicted = 0; 530 531 list_for_each_entry(pdd, &p->per_device_data, per_device_list) { 532 r = pdd->dev->dqm->ops.evict_process_queues(pdd->dev->dqm, 533 &pdd->qpd); 534 if (r) { 535 pr_err("Failed to evict process queues\n"); 536 goto fail; 537 } 538 n_evicted++; 539 } 540 541 return r; 542 543 fail: 544 /* To keep state consistent, roll back partial eviction by 545 * restoring queues 546 */ 547 list_for_each_entry(pdd, &p->per_device_data, per_device_list) { 548 if (n_evicted == 0) 549 break; 550 if (pdd->dev->dqm->ops.restore_process_queues(pdd->dev->dqm, 551 &pdd->qpd)) 552 pr_err("Failed to restore queues\n"); 553 554 n_evicted--; 555 } 556 557 return r; 558 } 559 560 /* process_restore_queues - Restore all user queues of a process */ 561 static int process_restore_queues(struct kfd_process *p) 562 { 563 struct kfd_process_device *pdd; 564 int r, ret = 0; 565 566 list_for_each_entry(pdd, &p->per_device_data, per_device_list) { 567 r = pdd->dev->dqm->ops.restore_process_queues(pdd->dev->dqm, 568 &pdd->qpd); 569 if (r) { 570 pr_err("Failed to restore process queues\n"); 571 if (!ret) 572 ret = r; 573 } 574 } 575 576 return ret; 577 } 578 579 static void evict_process_worker(struct work_struct *work) 580 { 581 int ret; 582 struct kfd_process *p; 583 struct delayed_work *dwork; 584 585 dwork = to_delayed_work(work); 586 587 /* Process termination destroys this worker thread. So during the 588 * lifetime of this thread, kfd_process p will be valid 589 */ 590 p = container_of(dwork, struct kfd_process, eviction_work); 591 WARN_ONCE(p->last_eviction_seqno != p->ef->seqno, 592 "Eviction fence mismatch\n"); 593 594 /* Narrow window of overlap between restore and evict work 595 * item is possible. Once amdgpu_amdkfd_gpuvm_restore_process_bos 596 * unreserves KFD BOs, it is possible to evicted again. But 597 * restore has few more steps of finish. So lets wait for any 598 * previous restore work to complete 599 */ 600 flush_delayed_work(&p->restore_work); 601 602 pr_debug("Started evicting pasid %d\n", p->pasid); 603 ret = process_evict_queues(p); 604 if (!ret) { 605 dma_fence_signal(p->ef); 606 dma_fence_put(p->ef); 607 p->ef = NULL; 608 schedule_delayed_work(&p->restore_work, 609 msecs_to_jiffies(PROCESS_RESTORE_TIME_MS)); 610 611 pr_debug("Finished evicting pasid %d\n", p->pasid); 612 } else 613 pr_err("Failed to evict queues of pasid %d\n", p->pasid); 614 } 615 616 static void restore_process_worker(struct work_struct *work) 617 { 618 struct delayed_work *dwork; 619 struct kfd_process *p; 620 struct kfd_process_device *pdd; 621 int ret = 0; 622 623 dwork = to_delayed_work(work); 624 625 /* Process termination destroys this worker thread. So during the 626 * lifetime of this thread, kfd_process p will be valid 627 */ 628 p = container_of(dwork, struct kfd_process, restore_work); 629 630 /* Call restore_process_bos on the first KGD device. This function 631 * takes care of restoring the whole process including other devices. 632 * Restore can fail if enough memory is not available. If so, 633 * reschedule again. 634 */ 635 pdd = list_first_entry(&p->per_device_data, 636 struct kfd_process_device, 637 per_device_list); 638 639 pr_debug("Started restoring pasid %d\n", p->pasid); 640 641 /* Setting last_restore_timestamp before successful restoration. 642 * Otherwise this would have to be set by KGD (restore_process_bos) 643 * before KFD BOs are unreserved. If not, the process can be evicted 644 * again before the timestamp is set. 645 * If restore fails, the timestamp will be set again in the next 646 * attempt. This would mean that the minimum GPU quanta would be 647 * PROCESS_ACTIVE_TIME_MS - (time to execute the following two 648 * functions) 649 */ 650 651 p->last_restore_timestamp = get_jiffies_64(); 652 ret = pdd->dev->kfd2kgd->restore_process_bos(p->kgd_process_info, 653 &p->ef); 654 if (ret) { 655 pr_debug("Failed to restore BOs of pasid %d, retry after %d ms\n", 656 p->pasid, PROCESS_BACK_OFF_TIME_MS); 657 ret = schedule_delayed_work(&p->restore_work, 658 msecs_to_jiffies(PROCESS_BACK_OFF_TIME_MS)); 659 WARN(!ret, "reschedule restore work failed\n"); 660 return; 661 } 662 663 ret = process_restore_queues(p); 664 if (!ret) 665 pr_debug("Finished restoring pasid %d\n", p->pasid); 666 else 667 pr_err("Failed to restore queues of pasid %d\n", p->pasid); 668 } 669 670 void kfd_suspend_all_processes(void) 671 { 672 struct kfd_process *p; 673 unsigned int temp; 674 int idx = srcu_read_lock(&kfd_processes_srcu); 675 676 hash_for_each_rcu(kfd_processes_table, temp, p, kfd_processes) { 677 cancel_delayed_work_sync(&p->eviction_work); 678 cancel_delayed_work_sync(&p->restore_work); 679 680 if (process_evict_queues(p)) 681 pr_err("Failed to suspend process %d\n", p->pasid); 682 dma_fence_signal(p->ef); 683 dma_fence_put(p->ef); 684 p->ef = NULL; 685 } 686 srcu_read_unlock(&kfd_processes_srcu, idx); 687 } 688 689 int kfd_resume_all_processes(void) 690 { 691 struct kfd_process *p; 692 unsigned int temp; 693 int ret = 0, idx = srcu_read_lock(&kfd_processes_srcu); 694 695 hash_for_each_rcu(kfd_processes_table, temp, p, kfd_processes) { 696 if (!schedule_delayed_work(&p->restore_work, 0)) { 697 pr_err("Restore process %d failed during resume\n", 698 p->pasid); 699 ret = -EFAULT; 700 } 701 } 702 srcu_read_unlock(&kfd_processes_srcu, idx); 703 return ret; 704 } 705 706 int kfd_reserved_mem_mmap(struct kfd_process *process, 707 struct vm_area_struct *vma) 708 { 709 struct kfd_dev *dev = kfd_device_by_id(vma->vm_pgoff); 710 struct kfd_process_device *pdd; 711 struct qcm_process_device *qpd; 712 713 if (!dev) 714 return -EINVAL; 715 if ((vma->vm_end - vma->vm_start) != KFD_CWSR_TBA_TMA_SIZE) { 716 pr_err("Incorrect CWSR mapping size.\n"); 717 return -EINVAL; 718 } 719 720 pdd = kfd_get_process_device_data(dev, process); 721 if (!pdd) 722 return -EINVAL; 723 qpd = &pdd->qpd; 724 725 qpd->cwsr_kaddr = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, 726 get_order(KFD_CWSR_TBA_TMA_SIZE)); 727 if (!qpd->cwsr_kaddr) { 728 pr_err("Error allocating per process CWSR buffer.\n"); 729 return -ENOMEM; 730 } 731 732 vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND 733 | VM_NORESERVE | VM_DONTDUMP | VM_PFNMAP; 734 /* Mapping pages to user process */ 735 return remap_pfn_range(vma, vma->vm_start, 736 PFN_DOWN(__pa(qpd->cwsr_kaddr)), 737 KFD_CWSR_TBA_TMA_SIZE, vma->vm_page_prot); 738 } 739 740 void kfd_flush_tlb(struct kfd_process_device *pdd) 741 { 742 struct kfd_dev *dev = pdd->dev; 743 const struct kfd2kgd_calls *f2g = dev->kfd2kgd; 744 745 if (dev->dqm->sched_policy == KFD_SCHED_POLICY_NO_HWS) { 746 /* Nothing to flush until a VMID is assigned, which 747 * only happens when the first queue is created. 748 */ 749 if (pdd->qpd.vmid) 750 f2g->invalidate_tlbs_vmid(dev->kgd, pdd->qpd.vmid); 751 } else { 752 f2g->invalidate_tlbs(dev->kgd, pdd->process->pasid); 753 } 754 } 755 756 #if defined(CONFIG_DEBUG_FS) 757 758 int kfd_debugfs_mqds_by_process(struct seq_file *m, void *data) 759 { 760 struct kfd_process *p; 761 unsigned int temp; 762 int r = 0; 763 764 int idx = srcu_read_lock(&kfd_processes_srcu); 765 766 hash_for_each_rcu(kfd_processes_table, temp, p, kfd_processes) { 767 seq_printf(m, "Process %d PASID %d:\n", 768 p->lead_thread->tgid, p->pasid); 769 770 mutex_lock(&p->mutex); 771 r = pqm_debugfs_mqds(m, &p->pqm); 772 mutex_unlock(&p->mutex); 773 774 if (r) 775 break; 776 } 777 778 srcu_read_unlock(&kfd_processes_srcu, idx); 779 780 return r; 781 } 782 783 #endif 784