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