Lines Matching defs:svm
75 #define SVM_DBG(s,f,a...) NV_DEBUG((s)->drm, "svm: "f"\n", ##a)
76 #define SVM_ERR(s,f,a...) NV_WARN((s)->drm, "svm: "f"\n", ##a)
85 nouveau_ivmm_find(struct nouveau_svm *svm, u64 inst)
88 list_for_each_entry(ivmm, &svm->inst, head) {
107 NV_DEBUG((s)->vmm->cli->drm, "svm-%p: "f"\n", (s), ##a)
109 NV_WARN((s)->vmm->cli->drm, "svm-%p: "f"\n", (s), ##a)
212 mutex_lock(&svmm->vmm->cli->drm->svm->mutex);
213 ivmm = nouveau_ivmm_find(svmm->vmm->cli->drm->svm, inst);
218 mutex_unlock(&svmm->vmm->cli->drm->svm->mutex);
233 mutex_lock(&svmm->vmm->cli->drm->svm->mutex);
234 list_add(&ivmm->head, &svmm->vmm->cli->drm->svm->inst);
235 mutex_unlock(&svmm->vmm->cli->drm->svm->mutex);
322 /* Allocate tracking for SVM-enabled VMM. */
325 svmm->vmm = &cli->svm;
330 /* Check that SVM isn't already enabled for the client. */
332 if (cli->svm.cli) {
337 /* Allocate a new GPU VMM that can support SVM (managed by the
347 }, sizeof(struct gp100_vmm_v0), &cli->svm.vmm);
358 cli->svm.svmm = svmm;
359 cli->svm.cli = cli;
389 nouveau_svm_fault_replay(struct nouveau_svm *svm)
391 SVM_DBG(svm, "replay");
392 WARN_ON(nvif_object_mthd(&svm->drm->client.vmm.vmm.object,
404 nouveau_svm_fault_cancel(struct nouveau_svm *svm,
407 SVM_DBG(svm, "cancel %016llx %d %02x %02x", inst, hub, gpc, client);
408 WARN_ON(nvif_object_mthd(&svm->drm->client.vmm.vmm.object,
419 nouveau_svm_fault_cancel_fault(struct nouveau_svm *svm,
422 nouveau_svm_fault_cancel(svm, fault->inst,
444 nouveau_svm_fault_cache(struct nouveau_svm *svm,
471 nouveau_svm_fault_cancel(svm, inst, hub, gpc, client);
488 SVM_DBG(svm, "fault %016llx %016llx %02x",
583 struct nouveau_svm *svm =
584 container_of(buffer, typeof(*svm), buffer[buffer->id]);
585 struct nvif_object *device = &svm->drm->client.device.object;
603 SVM_DBG(svm, "fault handler");
612 SVM_DBG(svm, "get %08x put %08x", buffer->get, buffer->put);
614 nouveau_svm_fault_cache(svm, buffer, buffer->get * 0x20);
619 SVM_DBG(svm, "%d fault(s) pending", buffer->fault_nr);
629 mutex_lock(&svm->mutex);
633 nouveau_ivmm_find(svm, buffer->fault[fi]->inst);
636 SVM_DBG(svm, "inst %016llx -> svm-%p", inst, svmm);
640 mutex_unlock(&svm->mutex);
653 /* Cancel any faults from non-SVM channels. */
655 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]);
674 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]);
687 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]);
698 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]);
760 svmm, svm->drm, &args,
779 nouveau_svm_fault_cancel_fault(svm, fault);
788 nouveau_svm_fault_replay(svm);
793 nouveau_svm_fault_buffer_fini(struct nouveau_svm *svm, int id)
795 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id];
800 nouveau_svm_fault_buffer_init(struct nouveau_svm *svm, int id)
802 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id];
803 struct nvif_object *device = &svm->drm->client.device.object;
806 SVM_DBG(svm, "get %08x put %08x (init)", buffer->get, buffer->put);
811 nouveau_svm_fault_buffer_dtor(struct nouveau_svm *svm, int id)
813 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id];
822 nouveau_svm_fault_buffer_fini(svm, id);
829 nouveau_svm_fault_buffer_ctor(struct nouveau_svm *svm, s32 oclass, int id)
831 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id];
832 struct nouveau_drm *drm = svm->drm;
842 SVM_ERR(svm, "Fault buffer allocation failed: %d", ret);
861 return nouveau_svm_fault_buffer_init(svm, id);
867 struct nouveau_svm *svm = drm->svm;
868 if (svm)
869 nouveau_svm_fault_buffer_init(svm, 0);
875 struct nouveau_svm *svm = drm->svm;
876 if (svm)
877 nouveau_svm_fault_buffer_fini(svm, 0);
883 struct nouveau_svm *svm = drm->svm;
884 if (svm) {
885 nouveau_svm_fault_buffer_dtor(svm, 0);
886 kfree(drm->svm);
887 drm->svm = NULL;
899 struct nouveau_svm *svm;
909 if (!(drm->svm = svm = kzalloc(sizeof(*drm->svm), GFP_KERNEL)))
912 drm->svm->drm = drm;
913 mutex_init(&drm->svm->mutex);
914 INIT_LIST_HEAD(&drm->svm->inst);
918 SVM_DBG(svm, "No supported fault buffer class");
923 ret = nouveau_svm_fault_buffer_ctor(svm, buffers[ret].oclass, 0);
929 SVM_DBG(svm, "Initialised");