Lines Matching defs:svm

78 #define SVM_DBG(s,f,a...) NV_DEBUG((s)->drm, "svm: "f"\n", ##a)
79 #define SVM_ERR(s,f,a...) NV_WARN((s)->drm, "svm: "f"\n", ##a)
94 nouveau_ivmm_find(struct nouveau_svm *svm, u64 inst)
97 list_for_each_entry(ivmm, &svm->inst, head) {
105 NV_DEBUG((s)->vmm->cli->drm, "svm-%p: "f"\n", (s), ##a)
107 NV_WARN((s)->vmm->cli->drm, "svm-%p: "f"\n", (s), ##a)
169 if (!cli->svm.svmm) {
186 nouveau_dmem_migrate_vma(cli->drm, cli->svm.svmm, vma, addr,
210 mutex_lock(&svmm->vmm->cli->drm->svm->mutex);
211 ivmm = nouveau_ivmm_find(svmm->vmm->cli->drm->svm, inst);
216 mutex_unlock(&svmm->vmm->cli->drm->svm->mutex);
231 mutex_lock(&svmm->vmm->cli->drm->svm->mutex);
232 list_add(&ivmm->head, &svmm->vmm->cli->drm->svm->inst);
233 mutex_unlock(&svmm->vmm->cli->drm->svm->mutex);
324 /* We need to fail if svm is disabled */
325 if (!cli->drm->svm)
331 svmm->vmm = &cli->svm;
338 if (cli->svm.cli) {
354 }, sizeof(struct gp100_vmm_v0), &cli->svm.vmm);
365 cli->svm.svmm = svmm;
366 cli->svm.cli = cli;
381 nouveau_svm_fault_replay(struct nouveau_svm *svm)
383 SVM_DBG(svm, "replay");
384 WARN_ON(nvif_object_mthd(&svm->drm->client.vmm.vmm.object,
396 nouveau_svm_fault_cancel(struct nouveau_svm *svm,
399 SVM_DBG(svm, "cancel %016llx %d %02x %02x", inst, hub, gpc, client);
400 WARN_ON(nvif_object_mthd(&svm->drm->client.vmm.vmm.object,
411 nouveau_svm_fault_cancel_fault(struct nouveau_svm *svm,
414 nouveau_svm_fault_cancel(svm, fault->inst,
453 nouveau_svm_fault_cache(struct nouveau_svm *svm,
480 nouveau_svm_fault_cancel(svm, inst, hub, gpc, client);
497 SVM_DBG(svm, "fault %016llx %016llx %02x",
716 struct nouveau_svm *svm = container_of(buffer, typeof(*svm), buffer[buffer->id]);
717 struct nvif_object *device = &svm->drm->client.device.object;
731 SVM_DBG(svm, "fault handler");
740 SVM_DBG(svm, "get %08x put %08x", buffer->get, buffer->put);
742 nouveau_svm_fault_cache(svm, buffer, buffer->get * 0x20);
747 SVM_DBG(svm, "%d fault(s) pending", buffer->fault_nr);
757 mutex_lock(&svm->mutex);
761 nouveau_ivmm_find(svm, buffer->fault[fi]->inst);
764 SVM_DBG(svm, "inst %016llx -> svm-%p", inst, svmm);
768 mutex_unlock(&svm->mutex);
783 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]);
825 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]);
831 ret = nouveau_atomic_range_fault(svmm, svm->drm,
835 ret = nouveau_range_fault(svmm, svm->drm, &args.i,
871 nouveau_svm_fault_cancel_fault(svm, fault);
879 nouveau_svm_fault_replay(svm);
939 nouveau_svm_fault_buffer_fini(struct nouveau_svm *svm, int id)
941 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id];
948 nouveau_svm_fault_buffer_init(struct nouveau_svm *svm, int id)
950 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id];
951 struct nvif_object *device = &svm->drm->client.device.object;
955 SVM_DBG(svm, "get %08x put %08x (init)", buffer->get, buffer->put);
961 nouveau_svm_fault_buffer_dtor(struct nouveau_svm *svm, int id)
963 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id];
969 nouveau_svm_fault_buffer_fini(svm, id);
982 nouveau_svm_fault_buffer_ctor(struct nouveau_svm *svm, s32 oclass, int id)
984 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id];
985 struct nouveau_drm *drm = svm->drm;
995 SVM_ERR(svm, "Fault buffer allocation failed: %d", ret);
1014 return nouveau_svm_fault_buffer_init(svm, id);
1020 struct nouveau_svm *svm = drm->svm;
1021 if (svm)
1022 nouveau_svm_fault_buffer_init(svm, 0);
1028 struct nouveau_svm *svm = drm->svm;
1029 if (svm)
1030 nouveau_svm_fault_buffer_fini(svm, 0);
1036 struct nouveau_svm *svm = drm->svm;
1037 if (svm) {
1038 nouveau_svm_fault_buffer_dtor(svm, 0);
1039 kfree(drm->svm);
1040 drm->svm = NULL;
1052 struct nouveau_svm *svm;
1062 drm->svm = svm = kzalloc(struct_size(drm->svm, buffer, 1), GFP_KERNEL);
1063 if (!drm->svm)
1066 drm->svm->drm = drm;
1067 mutex_init(&drm->svm->mutex);
1068 INIT_LIST_HEAD(&drm->svm->inst);
1072 SVM_DBG(svm, "No supported fault buffer class");
1077 ret = nouveau_svm_fault_buffer_ctor(svm, buffers[ret].oclass, 0);
1083 SVM_DBG(svm, "Initialised");