Lines Matching defs:fault
66 u8 fault;
68 } **fault;
160 * page fault) and maybe some other commands.
379 /* Issue fault replay for GPU to retry accesses that faulted previously. */
390 /* Cancel a replayable fault that could not be handled.
392 * Cancelling the fault will trigger recovery to reset the engine
412 struct nouveau_svm_fault *fault)
414 nouveau_svm_fault_cancel(svm, fault->inst,
415 fault->hub,
416 fault->gpc,
417 fault->client);
421 nouveau_svm_fault_priority(u8 fault)
423 switch (fault) {
469 struct nouveau_svm_fault *fault;
477 if (!buffer->fault[buffer->fault_nr]) {
478 fault = kmalloc(sizeof(*fault), GFP_KERNEL);
479 if (WARN_ON(!fault)) {
483 buffer->fault[buffer->fault_nr] = fault;
486 fault = buffer->fault[buffer->fault_nr++];
487 fault->inst = inst;
488 fault->addr = (u64)addrhi << 32 | addrlo;
489 fault->time = (u64)timehi << 32 | timelo;
490 fault->engine = engine;
491 fault->gpc = gpc;
492 fault->hub = hub;
493 fault->access = (info & 0x000f0000) >> 16;
494 fault->client = client;
495 fault->fault = (info & 0x0000001f);
497 SVM_DBG(svm, "fault %016llx %016llx %02x",
498 fault->inst, fault->addr, fault->access);
660 /* Have HMM fault pages within the fault window to the GPU. */
729 /* Parse available fault buffer entries into a cache, and update
732 SVM_DBG(svm, "fault handler");
748 SVM_DBG(svm, "%d fault(s) pending", buffer->fault_nr);
754 sort(buffer->fault, buffer->fault_nr, sizeof(*buffer->fault),
760 if (!svmm || buffer->fault[fi]->inst != inst) {
762 nouveau_ivmm_find(svm, buffer->fault[fi]->inst);
764 inst = buffer->fault[fi]->inst;
767 buffer->fault[fi]->svmm = svmm;
783 if (!(svmm = buffer->fault[fi]->svmm)) {
784 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]);
787 SVMM_DBG(svmm, "addr %016llx", buffer->fault[fi]->addr);
792 start = buffer->fault[fi]->addr;
799 * fault window, determining required pages and access
806 * Determine required permissions based on GPU fault
809 switch (buffer->fault[fi]->access) {
826 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]);
850 * fault addresses have sufficient access permission.
852 if (buffer->fault[fn]->svmm != svmm ||
853 buffer->fault[fn]->addr >= limit ||
854 (buffer->fault[fi]->access == FAULT_ACCESS_READ &&
856 (buffer->fault[fi]->access != FAULT_ACCESS_READ &&
857 buffer->fault[fi]->access != FAULT_ACCESS_PREFETCH &&
859 (buffer->fault[fi]->access != FAULT_ACCESS_READ &&
860 buffer->fault[fi]->access != FAULT_ACCESS_WRITE &&
861 buffer->fault[fi]->access != FAULT_ACCESS_PREFETCH &&
869 struct nouveau_svm_fault *fault =
870 buffer->fault[fi++];
872 nouveau_svm_fault_cancel_fault(svm, fault);
878 /* Issue fault replay to the GPU. */
972 if (buffer->fault) {
973 for (i = 0; buffer->fault[i] && i < buffer->entries; i++)
974 kfree(buffer->fault[i]);
975 kvfree(buffer->fault);
1011 buffer->fault = kvcalloc(buffer->entries, sizeof(*buffer->fault), GFP_KERNEL);
1012 if (!buffer->fault)
1073 SVM_DBG(svm, "No supported fault buffer class");