• Home
  • Raw
  • Download

Lines Matching refs:buffer

70 	} buffer[1];  member
457 struct nouveau_svm_fault_buffer *buffer, u32 offset) in nouveau_svm_fault_cache() argument
459 struct nvif_object *memory = &buffer->object; in nouveau_svm_fault_cache()
480 if (!buffer->fault[buffer->fault_nr]) { in nouveau_svm_fault_cache()
486 buffer->fault[buffer->fault_nr] = fault; in nouveau_svm_fault_cache()
489 fault = buffer->fault[buffer->fault_nr++]; in nouveau_svm_fault_cache()
718 struct nouveau_svm_fault_buffer *buffer = container_of(work, typeof(*buffer), work); in nouveau_svm_fault() local
719 struct nouveau_svm *svm = container_of(buffer, typeof(*svm), buffer[buffer->id]); in nouveau_svm_fault()
735 if (buffer->get == buffer->put) { in nouveau_svm_fault()
736 buffer->put = nvif_rd32(device, buffer->putaddr); in nouveau_svm_fault()
737 buffer->get = nvif_rd32(device, buffer->getaddr); in nouveau_svm_fault()
738 if (buffer->get == buffer->put) in nouveau_svm_fault()
741 buffer->fault_nr = 0; in nouveau_svm_fault()
743 SVM_DBG(svm, "get %08x put %08x", buffer->get, buffer->put); in nouveau_svm_fault()
744 while (buffer->get != buffer->put) { in nouveau_svm_fault()
745 nouveau_svm_fault_cache(svm, buffer, buffer->get * 0x20); in nouveau_svm_fault()
746 if (++buffer->get == buffer->entries) in nouveau_svm_fault()
747 buffer->get = 0; in nouveau_svm_fault()
749 nvif_wr32(device, buffer->getaddr, buffer->get); in nouveau_svm_fault()
750 SVM_DBG(svm, "%d fault(s) pending", buffer->fault_nr); in nouveau_svm_fault()
756 sort(buffer->fault, buffer->fault_nr, sizeof(*buffer->fault), in nouveau_svm_fault()
761 for (fi = 0, svmm = NULL; fi < buffer->fault_nr; fi++) { in nouveau_svm_fault()
762 if (!svmm || buffer->fault[fi]->inst != inst) { in nouveau_svm_fault()
764 nouveau_ivmm_find(svm, buffer->fault[fi]->inst); in nouveau_svm_fault()
766 inst = buffer->fault[fi]->inst; in nouveau_svm_fault()
769 buffer->fault[fi]->svmm = svmm; in nouveau_svm_fault()
780 for (fi = 0; fn = fi + 1, fi < buffer->fault_nr; fi = fn) { in nouveau_svm_fault()
785 if (!(svmm = buffer->fault[fi]->svmm)) { in nouveau_svm_fault()
786 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]); in nouveau_svm_fault()
789 SVMM_DBG(svmm, "addr %016llx", buffer->fault[fi]->addr); in nouveau_svm_fault()
794 start = buffer->fault[fi]->addr; in nouveau_svm_fault()
811 switch (buffer->fault[fi]->access) { in nouveau_svm_fault()
828 nouveau_svm_fault_cancel_fault(svm, buffer->fault[fi]); in nouveau_svm_fault()
844 for (fn = fi; ++fn < buffer->fault_nr; ) { in nouveau_svm_fault()
854 if (buffer->fault[fn]->svmm != svmm || in nouveau_svm_fault()
855 buffer->fault[fn]->addr >= limit || in nouveau_svm_fault()
856 (buffer->fault[fi]->access == FAULT_ACCESS_READ && in nouveau_svm_fault()
858 (buffer->fault[fi]->access != FAULT_ACCESS_READ && in nouveau_svm_fault()
859 buffer->fault[fi]->access != FAULT_ACCESS_PREFETCH && in nouveau_svm_fault()
861 (buffer->fault[fi]->access != FAULT_ACCESS_READ && in nouveau_svm_fault()
862 buffer->fault[fi]->access != FAULT_ACCESS_WRITE && in nouveau_svm_fault()
863 buffer->fault[fi]->access != FAULT_ACCESS_PREFETCH && in nouveau_svm_fault()
872 buffer->fault[fi++]; in nouveau_svm_fault()
888 struct nouveau_svm_fault_buffer *buffer = container_of(event, typeof(*buffer), notify); in nouveau_svm_event() local
890 schedule_work(&buffer->work); in nouveau_svm_event()
945 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id]; in nouveau_svm_fault_buffer_fini() local
947 nvif_event_block(&buffer->notify); in nouveau_svm_fault_buffer_fini()
948 flush_work(&buffer->work); in nouveau_svm_fault_buffer_fini()
954 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id]; in nouveau_svm_fault_buffer_init() local
957 buffer->get = nvif_rd32(device, buffer->getaddr); in nouveau_svm_fault_buffer_init()
958 buffer->put = nvif_rd32(device, buffer->putaddr); in nouveau_svm_fault_buffer_init()
959 SVM_DBG(svm, "get %08x put %08x (init)", buffer->get, buffer->put); in nouveau_svm_fault_buffer_init()
961 return nvif_event_allow(&buffer->notify); in nouveau_svm_fault_buffer_init()
967 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id]; in nouveau_svm_fault_buffer_dtor() local
970 if (!nvif_object_constructed(&buffer->object)) in nouveau_svm_fault_buffer_dtor()
975 if (buffer->fault) { in nouveau_svm_fault_buffer_dtor()
976 for (i = 0; buffer->fault[i] && i < buffer->entries; i++) in nouveau_svm_fault_buffer_dtor()
977 kfree(buffer->fault[i]); in nouveau_svm_fault_buffer_dtor()
978 kvfree(buffer->fault); in nouveau_svm_fault_buffer_dtor()
981 nvif_event_dtor(&buffer->notify); in nouveau_svm_fault_buffer_dtor()
982 nvif_object_dtor(&buffer->object); in nouveau_svm_fault_buffer_dtor()
988 struct nouveau_svm_fault_buffer *buffer = &svm->buffer[id]; in nouveau_svm_fault_buffer_ctor() local
994 buffer->id = id; in nouveau_svm_fault_buffer_ctor()
997 sizeof(args), &buffer->object); in nouveau_svm_fault_buffer_ctor()
1003 nvif_object_map(&buffer->object, NULL, 0); in nouveau_svm_fault_buffer_ctor()
1004 buffer->entries = args.entries; in nouveau_svm_fault_buffer_ctor()
1005 buffer->getaddr = args.get; in nouveau_svm_fault_buffer_ctor()
1006 buffer->putaddr = args.put; in nouveau_svm_fault_buffer_ctor()
1007 INIT_WORK(&buffer->work, nouveau_svm_fault); in nouveau_svm_fault_buffer_ctor()
1009 ret = nvif_event_ctor(&buffer->object, "svmFault", id, nouveau_svm_event, true, NULL, 0, in nouveau_svm_fault_buffer_ctor()
1010 &buffer->notify); in nouveau_svm_fault_buffer_ctor()
1014 buffer->fault = kvcalloc(buffer->entries, sizeof(*buffer->fault), GFP_KERNEL); in nouveau_svm_fault_buffer_ctor()
1015 if (!buffer->fault) in nouveau_svm_fault_buffer_ctor()