Lines Matching refs:svm
93 nouveau_ivmm_find(struct nouveau_svm *svm, u64 inst) in nouveau_ivmm_find() argument
96 list_for_each_entry(ivmm, &svm->inst, head) { in nouveau_ivmm_find()
171 if (!cli->svm.svmm) { in nouveau_svmm_bind()
188 nouveau_dmem_migrate_vma(cli->drm, cli->svm.svmm, vma, addr, in nouveau_svmm_bind()
212 mutex_lock(&svmm->vmm->cli->drm->svm->mutex); in nouveau_svmm_part()
213 ivmm = nouveau_ivmm_find(svmm->vmm->cli->drm->svm, inst); in nouveau_svmm_part()
218 mutex_unlock(&svmm->vmm->cli->drm->svm->mutex); in nouveau_svmm_part()
233 mutex_lock(&svmm->vmm->cli->drm->svm->mutex); in nouveau_svmm_join()
234 list_add(&ivmm->head, &svmm->vmm->cli->drm->svm->inst); in nouveau_svmm_join()
235 mutex_unlock(&svmm->vmm->cli->drm->svm->mutex); in nouveau_svmm_join()
327 if (!cli->drm->svm) in nouveau_svmm_init()
333 svmm->vmm = &cli->svm; in nouveau_svmm_init()
340 if (cli->svm.cli) { in nouveau_svmm_init()
356 }, sizeof(struct gp100_vmm_v0), &cli->svm.vmm); in nouveau_svmm_init()
367 cli->svm.svmm = svmm; in nouveau_svmm_init()
368 cli->svm.cli = cli; in nouveau_svmm_init()
383 nouveau_svm_fault_replay(struct nouveau_svm *svm) in nouveau_svm_fault_replay() argument
385 SVM_DBG(svm, "replay"); in nouveau_svm_fault_replay()
386 WARN_ON(nvif_object_mthd(&svm->drm->client.vmm.vmm.object, in nouveau_svm_fault_replay()
398 nouveau_svm_fault_cancel(struct nouveau_svm *svm, in nouveau_svm_fault_cancel() argument
401 SVM_DBG(svm, "cancel %016llx %d %02x %02x", inst, hub, gpc, client); in nouveau_svm_fault_cancel()
402 WARN_ON(nvif_object_mthd(&svm->drm->client.vmm.vmm.object, in nouveau_svm_fault_cancel()
413 nouveau_svm_fault_cancel_fault(struct nouveau_svm *svm, in nouveau_svm_fault_cancel_fault() argument
416 nouveau_svm_fault_cancel(svm, fault->inst, in nouveau_svm_fault_cancel_fault()
455 nouveau_svm_fault_cache(struct nouveau_svm *svm, in nouveau_svm_fault_cache() argument
482 nouveau_svm_fault_cancel(svm, inst, hub, gpc, client); in nouveau_svm_fault_cache()
499 SVM_DBG(svm, "fault %016llx %016llx %02x", in nouveau_svm_fault_cache()
719 struct nouveau_svm *svm = in nouveau_svm_fault() local
720 container_of(buffer, typeof(*svm), buffer[buffer->id]); in nouveau_svm_fault()
721 struct nvif_object *device = &svm->drm->client.device.object; in nouveau_svm_fault()
735 SVM_DBG(svm, "fault handler"); in nouveau_svm_fault()
744 SVM_DBG(svm, "get %08x put %08x", buffer->get, buffer->put); in nouveau_svm_fault()
746 nouveau_svm_fault_cache(svm, buffer, buffer->get * 0x20); in nouveau_svm_fault()
751 SVM_DBG(svm, "%d fault(s) pending", buffer->fault_nr); in nouveau_svm_fault()
761 mutex_lock(&svm->mutex); in nouveau_svm_fault()
765 nouveau_ivmm_find(svm, buffer->fault[fi]->inst); in nouveau_svm_fault()
768 SVM_DBG(svm, "inst %016llx -> svm-%p", inst, svmm); in nouveau_svm_fault()
772 mutex_unlock(&svm->mutex); in nouveau_svm_fault()
787 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]); in nouveau_svm_fault()
829 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]); in nouveau_svm_fault()
835 ret = nouveau_atomic_range_fault(svmm, svm->drm, in nouveau_svm_fault()
839 ret = nouveau_range_fault(svmm, svm->drm, &args.i, in nouveau_svm_fault()
875 nouveau_svm_fault_cancel_fault(svm, fault); in nouveau_svm_fault()
883 nouveau_svm_fault_replay(svm); in nouveau_svm_fault()
936 nouveau_svm_fault_buffer_fini(struct nouveau_svm *svm, int id) in nouveau_svm_fault_buffer_fini() argument
938 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id]; in nouveau_svm_fault_buffer_fini()
943 nouveau_svm_fault_buffer_init(struct nouveau_svm *svm, int id) in nouveau_svm_fault_buffer_init() argument
945 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id]; in nouveau_svm_fault_buffer_init()
946 struct nvif_object *device = &svm->drm->client.device.object; in nouveau_svm_fault_buffer_init()
949 SVM_DBG(svm, "get %08x put %08x (init)", buffer->get, buffer->put); in nouveau_svm_fault_buffer_init()
954 nouveau_svm_fault_buffer_dtor(struct nouveau_svm *svm, int id) in nouveau_svm_fault_buffer_dtor() argument
956 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id]; in nouveau_svm_fault_buffer_dtor()
965 nouveau_svm_fault_buffer_fini(svm, id); in nouveau_svm_fault_buffer_dtor()
972 nouveau_svm_fault_buffer_ctor(struct nouveau_svm *svm, s32 oclass, int id) in nouveau_svm_fault_buffer_ctor() argument
974 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id]; in nouveau_svm_fault_buffer_ctor()
975 struct nouveau_drm *drm = svm->drm; in nouveau_svm_fault_buffer_ctor()
985 SVM_ERR(svm, "Fault buffer allocation failed: %d", ret); in nouveau_svm_fault_buffer_ctor()
1004 return nouveau_svm_fault_buffer_init(svm, id); in nouveau_svm_fault_buffer_ctor()
1010 struct nouveau_svm *svm = drm->svm; in nouveau_svm_resume() local
1011 if (svm) in nouveau_svm_resume()
1012 nouveau_svm_fault_buffer_init(svm, 0); in nouveau_svm_resume()
1018 struct nouveau_svm *svm = drm->svm; in nouveau_svm_suspend() local
1019 if (svm) in nouveau_svm_suspend()
1020 nouveau_svm_fault_buffer_fini(svm, 0); in nouveau_svm_suspend()
1026 struct nouveau_svm *svm = drm->svm; in nouveau_svm_fini() local
1027 if (svm) { in nouveau_svm_fini()
1028 nouveau_svm_fault_buffer_dtor(svm, 0); in nouveau_svm_fini()
1029 kfree(drm->svm); in nouveau_svm_fini()
1030 drm->svm = NULL; in nouveau_svm_fini()
1042 struct nouveau_svm *svm; in nouveau_svm_init() local
1052 if (!(drm->svm = svm = kzalloc(sizeof(*drm->svm), GFP_KERNEL))) in nouveau_svm_init()
1055 drm->svm->drm = drm; in nouveau_svm_init()
1056 mutex_init(&drm->svm->mutex); in nouveau_svm_init()
1057 INIT_LIST_HEAD(&drm->svm->inst); in nouveau_svm_init()
1061 SVM_DBG(svm, "No supported fault buffer class"); in nouveau_svm_init()
1066 ret = nouveau_svm_fault_buffer_ctor(svm, buffers[ret].oclass, 0); in nouveau_svm_init()
1072 SVM_DBG(svm, "Initialised"); in nouveau_svm_init()