Lines Matching refs:error
246 struct drm_i915_error_state *error, in i915_ring_error_state() argument
249 struct drm_i915_error_ring *ring = &error->ring[ring_idx]; in i915_ring_error_state()
337 struct drm_i915_error_state *error = error_priv->error; in i915_error_state_to_str() local
342 if (!error) { in i915_error_state_to_str()
347 err_printf(m, "%s\n", error->error_msg); in i915_error_state_to_str()
348 err_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec, in i915_error_state_to_str()
349 error->time.tv_usec); in i915_error_state_to_str()
352 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
353 if (error->ring[i].hangcheck_score > max_hangcheck_score) in i915_error_state_to_str()
354 max_hangcheck_score = error->ring[i].hangcheck_score; in i915_error_state_to_str()
356 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
357 if (error->ring[i].hangcheck_score == max_hangcheck_score && in i915_error_state_to_str()
358 error->ring[i].pid != -1) { in i915_error_state_to_str()
361 error->ring[i].comm, in i915_error_state_to_str()
362 error->ring[i].pid); in i915_error_state_to_str()
365 err_printf(m, "Reset count: %u\n", error->reset_count); in i915_error_state_to_str()
366 err_printf(m, "Suspend count: %u\n", error->suspend_count); in i915_error_state_to_str()
368 err_printf(m, "IOMMU enabled?: %d\n", error->iommu); in i915_error_state_to_str()
369 err_printf(m, "EIR: 0x%08x\n", error->eir); in i915_error_state_to_str()
370 err_printf(m, "IER: 0x%08x\n", error->ier); in i915_error_state_to_str()
374 error->gtier[i]); in i915_error_state_to_str()
376 err_printf(m, "GTIER: 0x%08x\n", error->gtier[0]); in i915_error_state_to_str()
377 err_printf(m, "PGTBL_ER: 0x%08x\n", error->pgtbl_er); in i915_error_state_to_str()
378 err_printf(m, "FORCEWAKE: 0x%08x\n", error->forcewake); in i915_error_state_to_str()
379 err_printf(m, "DERRMR: 0x%08x\n", error->derrmr); in i915_error_state_to_str()
380 err_printf(m, "CCID: 0x%08x\n", error->ccid); in i915_error_state_to_str()
384 err_printf(m, " fence[%d] = %08llx\n", i, error->fence[i]); in i915_error_state_to_str()
386 for (i = 0; i < ARRAY_SIZE(error->extra_instdone); i++) in i915_error_state_to_str()
388 error->extra_instdone[i]); in i915_error_state_to_str()
391 err_printf(m, "ERROR: 0x%08x\n", error->error); in i915_error_state_to_str()
395 error->fault_data1, error->fault_data0); in i915_error_state_to_str()
397 err_printf(m, "DONE_REG: 0x%08x\n", error->done_reg); in i915_error_state_to_str()
401 err_printf(m, "ERR_INT: 0x%08x\n", error->err_int); in i915_error_state_to_str()
403 for (i = 0; i < ARRAY_SIZE(error->ring); i++) in i915_error_state_to_str()
404 i915_ring_error_state(m, dev, error, i); in i915_error_state_to_str()
406 for (i = 0; i < error->vm_count; i++) { in i915_error_state_to_str()
410 error->active_bo[i], in i915_error_state_to_str()
411 error->active_bo_count[i]); in i915_error_state_to_str()
414 error->pinned_bo[i], in i915_error_state_to_str()
415 error->pinned_bo_count[i]); in i915_error_state_to_str()
418 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
419 obj = error->ring[i].batchbuffer; in i915_error_state_to_str()
422 if (error->ring[i].pid != -1) in i915_error_state_to_str()
424 error->ring[i].comm, in i915_error_state_to_str()
425 error->ring[i].pid); in i915_error_state_to_str()
432 obj = error->ring[i].wa_batchbuffer; in i915_error_state_to_str()
440 if (error->ring[i].num_requests) { in i915_error_state_to_str()
443 error->ring[i].num_requests); in i915_error_state_to_str()
444 for (j = 0; j < error->ring[i].num_requests; j++) { in i915_error_state_to_str()
446 error->ring[i].requests[j].seqno, in i915_error_state_to_str()
447 error->ring[i].requests[j].jiffies, in i915_error_state_to_str()
448 error->ring[i].requests[j].tail); in i915_error_state_to_str()
452 if ((obj = error->ring[i].ringbuffer)) { in i915_error_state_to_str()
459 if ((obj = error->ring[i].hws_page)) { in i915_error_state_to_str()
481 if ((obj = error->ring[i].ctx)) { in i915_error_state_to_str()
489 if ((obj = error->semaphore_obj)) { in i915_error_state_to_str()
502 if (error->overlay) in i915_error_state_to_str()
503 intel_overlay_print_error_state(m, error->overlay); in i915_error_state_to_str()
505 if (error->display) in i915_error_state_to_str()
506 intel_display_print_error_state(m, dev, error->display); in i915_error_state_to_str()
562 struct drm_i915_error_state *error = container_of(error_ref, in i915_error_state_free() local
563 typeof(*error), ref); in i915_error_state_free()
566 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_free()
567 i915_error_object_free(error->ring[i].batchbuffer); in i915_error_state_free()
568 i915_error_object_free(error->ring[i].wa_batchbuffer); in i915_error_state_free()
569 i915_error_object_free(error->ring[i].ringbuffer); in i915_error_state_free()
570 i915_error_object_free(error->ring[i].hws_page); in i915_error_state_free()
571 i915_error_object_free(error->ring[i].ctx); in i915_error_state_free()
572 kfree(error->ring[i].requests); in i915_error_state_free()
575 i915_error_object_free(error->semaphore_obj); in i915_error_state_free()
577 for (i = 0; i < error->vm_count; i++) in i915_error_state_free()
578 kfree(error->active_bo[i]); in i915_error_state_free()
580 kfree(error->active_bo); in i915_error_state_free()
581 kfree(error->active_bo_count); in i915_error_state_free()
582 kfree(error->pinned_bo); in i915_error_state_free()
583 kfree(error->pinned_bo_count); in i915_error_state_free()
584 kfree(error->overlay); in i915_error_state_free()
585 kfree(error->display); in i915_error_state_free()
586 kfree(error); in i915_error_state_free()
765 struct drm_i915_error_state *error, in i915_error_generate_code() argument
777 if (error->ring[i].hangcheck_action == HANGCHECK_HUNG) { in i915_error_generate_code()
781 return error->ring[i].ipehr ^ error->ring[i].instdone; in i915_error_generate_code()
789 struct drm_i915_error_state *error) in i915_gem_record_fences() argument
796 error->fence[i] = I915_READ(FENCE_REG(i)); in i915_gem_record_fences()
799 error->fence[i] = I915_READ64(FENCE_REG_965_LO(i)); in i915_gem_record_fences()
802 error->fence[i] = I915_READ64(FENCE_REG_GEN6_LO(i)); in i915_gem_record_fences()
808 struct drm_i915_error_state *error, in gen8_record_semaphore_state() argument
818 if (!error->semaphore_obj) in gen8_record_semaphore_state()
819 error->semaphore_obj = in gen8_record_semaphore_state()
833 tmp = error->semaphore_obj->pages[0]; in gen8_record_semaphore_state()
858 struct drm_i915_error_state *error, in i915_record_ring_state() argument
868 gen8_record_semaphore_state(dev_priv, error, ring, ering); in i915_record_ring_state()
957 struct drm_i915_error_state *error, in i915_gem_record_active_context() argument
964 if (ring->id != RCS || !error->ccid) in i915_gem_record_active_context()
971 if ((error->ccid & PAGE_MASK) == i915_gem_obj_ggtt_offset(obj)) { in i915_gem_record_active_context()
979 struct drm_i915_error_state *error) in i915_gem_record_rings() argument
989 error->ring[i].pid = -1; in i915_gem_record_rings()
994 error->ring[i].valid = true; in i915_gem_record_rings()
996 i915_record_ring_state(dev, error, ring, &error->ring[i]); in i915_gem_record_rings()
1010 error->ring[i].batchbuffer = in i915_gem_record_rings()
1016 error->ring[i].wa_batchbuffer = in i915_gem_record_rings()
1026 strcpy(error->ring[i].comm, task->comm); in i915_gem_record_rings()
1027 error->ring[i].pid = task->pid; in i915_gem_record_rings()
1046 error->ring[i].cpu_ring_head = rbuf->head; in i915_gem_record_rings()
1047 error->ring[i].cpu_ring_tail = rbuf->tail; in i915_gem_record_rings()
1049 error->ring[i].ringbuffer = in i915_gem_record_rings()
1052 error->ring[i].hws_page = in i915_gem_record_rings()
1055 i915_gem_record_active_context(ring, error, &error->ring[i]); in i915_gem_record_rings()
1061 error->ring[i].num_requests = count; in i915_gem_record_rings()
1062 error->ring[i].requests = in i915_gem_record_rings()
1063 kcalloc(count, sizeof(*error->ring[i].requests), in i915_gem_record_rings()
1065 if (error->ring[i].requests == NULL) { in i915_gem_record_rings()
1066 error->ring[i].num_requests = 0; in i915_gem_record_rings()
1074 erq = &error->ring[i].requests[count++]; in i915_gem_record_rings()
1086 struct drm_i915_error_state *error, in i915_gem_capture_vm() argument
1098 error->active_bo_count[ndx] = i; in i915_gem_capture_vm()
1105 error->pinned_bo_count[ndx] = i - error->active_bo_count[ndx]; in i915_gem_capture_vm()
1110 pinned_bo = active_bo + error->active_bo_count[ndx]; in i915_gem_capture_vm()
1114 error->active_bo_count[ndx] = in i915_gem_capture_vm()
1116 error->active_bo_count[ndx], in i915_gem_capture_vm()
1120 error->pinned_bo_count[ndx] = in i915_gem_capture_vm()
1122 error->pinned_bo_count[ndx], in i915_gem_capture_vm()
1124 error->active_bo[ndx] = active_bo; in i915_gem_capture_vm()
1125 error->pinned_bo[ndx] = pinned_bo; in i915_gem_capture_vm()
1129 struct drm_i915_error_state *error) in i915_gem_capture_buffers() argument
1137 error->active_bo = kcalloc(cnt, sizeof(*error->active_bo), GFP_ATOMIC); in i915_gem_capture_buffers()
1138 error->pinned_bo = kcalloc(cnt, sizeof(*error->pinned_bo), GFP_ATOMIC); in i915_gem_capture_buffers()
1139 error->active_bo_count = kcalloc(cnt, sizeof(*error->active_bo_count), in i915_gem_capture_buffers()
1141 error->pinned_bo_count = kcalloc(cnt, sizeof(*error->pinned_bo_count), in i915_gem_capture_buffers()
1144 if (error->active_bo == NULL || in i915_gem_capture_buffers()
1145 error->pinned_bo == NULL || in i915_gem_capture_buffers()
1146 error->active_bo_count == NULL || in i915_gem_capture_buffers()
1147 error->pinned_bo_count == NULL) { in i915_gem_capture_buffers()
1148 kfree(error->active_bo); in i915_gem_capture_buffers()
1149 kfree(error->active_bo_count); in i915_gem_capture_buffers()
1150 kfree(error->pinned_bo); in i915_gem_capture_buffers()
1151 kfree(error->pinned_bo_count); in i915_gem_capture_buffers()
1153 error->active_bo = NULL; in i915_gem_capture_buffers()
1154 error->active_bo_count = NULL; in i915_gem_capture_buffers()
1155 error->pinned_bo = NULL; in i915_gem_capture_buffers()
1156 error->pinned_bo_count = NULL; in i915_gem_capture_buffers()
1159 i915_gem_capture_vm(dev_priv, error, vm, i++); in i915_gem_capture_buffers()
1161 error->vm_count = cnt; in i915_gem_capture_buffers()
1167 struct drm_i915_error_state *error) in i915_capture_reg_state() argument
1182 error->gtier[0] = I915_READ(GTIER); in i915_capture_reg_state()
1183 error->ier = I915_READ(VLV_IER); in i915_capture_reg_state()
1184 error->forcewake = I915_READ(FORCEWAKE_VLV); in i915_capture_reg_state()
1188 error->err_int = I915_READ(GEN7_ERR_INT); in i915_capture_reg_state()
1191 error->fault_data0 = I915_READ(GEN8_FAULT_TLB_DATA0); in i915_capture_reg_state()
1192 error->fault_data1 = I915_READ(GEN8_FAULT_TLB_DATA1); in i915_capture_reg_state()
1196 error->forcewake = I915_READ(FORCEWAKE); in i915_capture_reg_state()
1197 error->gab_ctl = I915_READ(GAB_CTL); in i915_capture_reg_state()
1198 error->gfx_mode = I915_READ(GFX_MODE); in i915_capture_reg_state()
1203 error->forcewake = I915_READ(FORCEWAKE_MT); in i915_capture_reg_state()
1206 error->derrmr = I915_READ(DERRMR); in i915_capture_reg_state()
1207 error->error = I915_READ(ERROR_GEN6); in i915_capture_reg_state()
1208 error->done_reg = I915_READ(DONE_REG); in i915_capture_reg_state()
1213 error->gam_ecochk = I915_READ(GAM_ECOCHK); in i915_capture_reg_state()
1214 error->gac_eco = I915_READ(GAC_ECO_BITS); in i915_capture_reg_state()
1219 error->ccid = I915_READ(CCID); in i915_capture_reg_state()
1222 error->ier = I915_READ(GEN8_DE_MISC_IER); in i915_capture_reg_state()
1224 error->gtier[i] = I915_READ(GEN8_GT_IER(i)); in i915_capture_reg_state()
1226 error->ier = I915_READ(DEIER); in i915_capture_reg_state()
1227 error->gtier[0] = I915_READ(GTIER); in i915_capture_reg_state()
1229 error->ier = I915_READ16(IER); in i915_capture_reg_state()
1231 error->ier = I915_READ(IER); in i915_capture_reg_state()
1233 error->eir = I915_READ(EIR); in i915_capture_reg_state()
1234 error->pgtbl_er = I915_READ(PGTBL_ER); in i915_capture_reg_state()
1236 i915_get_extra_instdone(dev, error->extra_instdone); in i915_capture_reg_state()
1240 struct drm_i915_error_state *error, in i915_error_capture_msg() argument
1248 ecode = i915_error_generate_code(dev_priv, error, &ring_id); in i915_error_capture_msg()
1250 len = scnprintf(error->error_msg, sizeof(error->error_msg), in i915_error_capture_msg()
1254 if (ring_id != -1 && error->ring[ring_id].pid != -1) in i915_error_capture_msg()
1255 len += scnprintf(error->error_msg + len, in i915_error_capture_msg()
1256 sizeof(error->error_msg) - len, in i915_error_capture_msg()
1258 error->ring[ring_id].comm, in i915_error_capture_msg()
1259 error->ring[ring_id].pid); in i915_error_capture_msg()
1261 scnprintf(error->error_msg + len, sizeof(error->error_msg) - len, in i915_error_capture_msg()
1268 struct drm_i915_error_state *error) in i915_capture_gen_state() argument
1270 error->iommu = -1; in i915_capture_gen_state()
1272 error->iommu = intel_iommu_gfx_mapped; in i915_capture_gen_state()
1274 error->reset_count = i915_reset_count(&dev_priv->gpu_error); in i915_capture_gen_state()
1275 error->suspend_count = dev_priv->suspend_count; in i915_capture_gen_state()
1292 struct drm_i915_error_state *error; in i915_capture_error_state() local
1296 error = kzalloc(sizeof(*error), GFP_ATOMIC); in i915_capture_error_state()
1297 if (!error) { in i915_capture_error_state()
1302 kref_init(&error->ref); in i915_capture_error_state()
1304 i915_capture_gen_state(dev_priv, error); in i915_capture_error_state()
1305 i915_capture_reg_state(dev_priv, error); in i915_capture_error_state()
1306 i915_gem_capture_buffers(dev_priv, error); in i915_capture_error_state()
1307 i915_gem_record_fences(dev, error); in i915_capture_error_state()
1308 i915_gem_record_rings(dev, error); in i915_capture_error_state()
1310 do_gettimeofday(&error->time); in i915_capture_error_state()
1312 error->overlay = intel_overlay_capture_error_state(dev); in i915_capture_error_state()
1313 error->display = intel_display_capture_error_state(dev); in i915_capture_error_state()
1315 i915_error_capture_msg(dev, error, wedged, error_msg); in i915_capture_error_state()
1316 DRM_INFO("%s\n", error->error_msg); in i915_capture_error_state()
1320 dev_priv->gpu_error.first_error = error; in i915_capture_error_state()
1321 error = NULL; in i915_capture_error_state()
1325 if (error) { in i915_capture_error_state()
1326 i915_error_state_free(&error->ref); in i915_capture_error_state()
1346 error_priv->error = dev_priv->gpu_error.first_error; in i915_error_state_get()
1347 if (error_priv->error) in i915_error_state_get()
1348 kref_get(&error_priv->error->ref); in i915_error_state_get()
1355 if (error_priv->error) in i915_error_state_put()
1356 kref_put(&error_priv->error->ref, i915_error_state_free); in i915_error_state_put()
1362 struct drm_i915_error_state *error; in i915_destroy_error_state() local
1365 error = dev_priv->gpu_error.first_error; in i915_destroy_error_state()
1369 if (error) in i915_destroy_error_state()
1370 kref_put(&error->ref, i915_error_state_free); in i915_destroy_error_state()