Lines Matching refs:error

245 				  struct drm_i915_error_state *error,  in i915_ring_error_state()  argument
248 struct drm_i915_error_ring *ring = &error->ring[ring_idx]; in i915_ring_error_state()
335 struct drm_i915_error_state *error = error_priv->error; in i915_error_state_to_str() local
340 if (!error) { in i915_error_state_to_str()
345 err_printf(m, "%s\n", error->error_msg); in i915_error_state_to_str()
346 err_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec, in i915_error_state_to_str()
347 error->time.tv_usec); in i915_error_state_to_str()
350 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
351 if (error->ring[i].hangcheck_score > max_hangcheck_score) in i915_error_state_to_str()
352 max_hangcheck_score = error->ring[i].hangcheck_score; in i915_error_state_to_str()
354 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
355 if (error->ring[i].hangcheck_score == max_hangcheck_score && in i915_error_state_to_str()
356 error->ring[i].pid != -1) { in i915_error_state_to_str()
359 error->ring[i].comm, in i915_error_state_to_str()
360 error->ring[i].pid); in i915_error_state_to_str()
363 err_printf(m, "Reset count: %u\n", error->reset_count); in i915_error_state_to_str()
364 err_printf(m, "Suspend count: %u\n", error->suspend_count); in i915_error_state_to_str()
366 err_printf(m, "EIR: 0x%08x\n", error->eir); in i915_error_state_to_str()
367 err_printf(m, "IER: 0x%08x\n", error->ier); in i915_error_state_to_str()
371 error->gtier[i]); in i915_error_state_to_str()
373 err_printf(m, "GTIER: 0x%08x\n", error->gtier[0]); in i915_error_state_to_str()
374 err_printf(m, "PGTBL_ER: 0x%08x\n", error->pgtbl_er); in i915_error_state_to_str()
375 err_printf(m, "FORCEWAKE: 0x%08x\n", error->forcewake); in i915_error_state_to_str()
376 err_printf(m, "DERRMR: 0x%08x\n", error->derrmr); in i915_error_state_to_str()
377 err_printf(m, "CCID: 0x%08x\n", error->ccid); in i915_error_state_to_str()
381 err_printf(m, " fence[%d] = %08llx\n", i, error->fence[i]); in i915_error_state_to_str()
383 for (i = 0; i < ARRAY_SIZE(error->extra_instdone); i++) in i915_error_state_to_str()
385 error->extra_instdone[i]); in i915_error_state_to_str()
388 err_printf(m, "ERROR: 0x%08x\n", error->error); in i915_error_state_to_str()
392 error->fault_data1, error->fault_data0); in i915_error_state_to_str()
394 err_printf(m, "DONE_REG: 0x%08x\n", error->done_reg); in i915_error_state_to_str()
398 err_printf(m, "ERR_INT: 0x%08x\n", error->err_int); in i915_error_state_to_str()
400 for (i = 0; i < ARRAY_SIZE(error->ring); i++) in i915_error_state_to_str()
401 i915_ring_error_state(m, dev, error, i); in i915_error_state_to_str()
403 for (i = 0; i < error->vm_count; i++) { in i915_error_state_to_str()
407 error->active_bo[i], in i915_error_state_to_str()
408 error->active_bo_count[i]); in i915_error_state_to_str()
411 error->pinned_bo[i], in i915_error_state_to_str()
412 error->pinned_bo_count[i]); in i915_error_state_to_str()
415 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_to_str()
416 obj = error->ring[i].batchbuffer; in i915_error_state_to_str()
419 if (error->ring[i].pid != -1) in i915_error_state_to_str()
421 error->ring[i].comm, in i915_error_state_to_str()
422 error->ring[i].pid); in i915_error_state_to_str()
428 obj = error->ring[i].wa_batchbuffer; in i915_error_state_to_str()
435 if (error->ring[i].num_requests) { in i915_error_state_to_str()
438 error->ring[i].num_requests); in i915_error_state_to_str()
439 for (j = 0; j < error->ring[i].num_requests; j++) { in i915_error_state_to_str()
441 error->ring[i].requests[j].seqno, in i915_error_state_to_str()
442 error->ring[i].requests[j].jiffies, in i915_error_state_to_str()
443 error->ring[i].requests[j].tail); in i915_error_state_to_str()
447 if ((obj = error->ring[i].ringbuffer)) { in i915_error_state_to_str()
454 if ((obj = error->ring[i].hws_page)) { in i915_error_state_to_str()
470 if ((obj = error->ring[i].ctx)) { in i915_error_state_to_str()
478 if ((obj = error->semaphore_obj)) { in i915_error_state_to_str()
490 if (error->overlay) in i915_error_state_to_str()
491 intel_overlay_print_error_state(m, error->overlay); in i915_error_state_to_str()
493 if (error->display) in i915_error_state_to_str()
494 intel_display_print_error_state(m, dev, error->display); in i915_error_state_to_str()
550 struct drm_i915_error_state *error = container_of(error_ref, in i915_error_state_free() local
551 typeof(*error), ref); in i915_error_state_free()
554 for (i = 0; i < ARRAY_SIZE(error->ring); i++) { in i915_error_state_free()
555 i915_error_object_free(error->ring[i].batchbuffer); in i915_error_state_free()
556 i915_error_object_free(error->ring[i].ringbuffer); in i915_error_state_free()
557 i915_error_object_free(error->ring[i].hws_page); in i915_error_state_free()
558 i915_error_object_free(error->ring[i].ctx); in i915_error_state_free()
559 kfree(error->ring[i].requests); in i915_error_state_free()
562 i915_error_object_free(error->semaphore_obj); in i915_error_state_free()
564 for (i = 0; i < error->vm_count; i++) in i915_error_state_free()
565 kfree(error->active_bo[i]); in i915_error_state_free()
567 kfree(error->active_bo); in i915_error_state_free()
568 kfree(error->active_bo_count); in i915_error_state_free()
569 kfree(error->pinned_bo); in i915_error_state_free()
570 kfree(error->pinned_bo_count); in i915_error_state_free()
571 kfree(error->overlay); in i915_error_state_free()
572 kfree(error->display); in i915_error_state_free()
573 kfree(error); in i915_error_state_free()
750 struct drm_i915_error_state *error, in i915_error_generate_code() argument
762 if (error->ring[i].hangcheck_action == HANGCHECK_HUNG) { in i915_error_generate_code()
766 return error->ring[i].ipehr ^ error->ring[i].instdone; in i915_error_generate_code()
774 struct drm_i915_error_state *error) in i915_gem_record_fences() argument
781 error->fence[i] = I915_READ(FENCE_REG_830_0 + (i * 4)); in i915_gem_record_fences()
784 error->fence[i+8] = I915_READ(FENCE_REG_945_8 + in i915_gem_record_fences()
788 error->fence[i] = I915_READ64(FENCE_REG_965_0 + in i915_gem_record_fences()
792 error->fence[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + in i915_gem_record_fences()
798 struct drm_i915_error_state *error, in gen8_record_semaphore_state() argument
808 if (!error->semaphore_obj) in gen8_record_semaphore_state()
809 error->semaphore_obj = in gen8_record_semaphore_state()
823 tmp = error->semaphore_obj->pages[0]; in gen8_record_semaphore_state()
848 struct drm_i915_error_state *error, in i915_record_ring_state() argument
858 gen8_record_semaphore_state(dev_priv, error, ring, ering); in i915_record_ring_state()
946 struct drm_i915_error_state *error, in i915_gem_record_active_context() argument
953 if (ring->id != RCS || !error->ccid) in i915_gem_record_active_context()
960 if ((error->ccid & PAGE_MASK) == i915_gem_obj_ggtt_offset(obj)) { in i915_gem_record_active_context()
968 struct drm_i915_error_state *error) in i915_gem_record_rings() argument
978 error->ring[i].pid = -1; in i915_gem_record_rings()
983 error->ring[i].valid = true; in i915_gem_record_rings()
985 i915_record_ring_state(dev, error, ring, &error->ring[i]); in i915_gem_record_rings()
999 error->ring[i].batchbuffer = in i915_gem_record_rings()
1005 error->ring[i].wa_batchbuffer = in i915_gem_record_rings()
1015 strcpy(error->ring[i].comm, task->comm); in i915_gem_record_rings()
1016 error->ring[i].pid = task->pid; in i915_gem_record_rings()
1035 error->ring[i].cpu_ring_head = rbuf->head; in i915_gem_record_rings()
1036 error->ring[i].cpu_ring_tail = rbuf->tail; in i915_gem_record_rings()
1038 error->ring[i].ringbuffer = in i915_gem_record_rings()
1041 error->ring[i].hws_page = in i915_gem_record_rings()
1044 i915_gem_record_active_context(ring, error, &error->ring[i]); in i915_gem_record_rings()
1050 error->ring[i].num_requests = count; in i915_gem_record_rings()
1051 error->ring[i].requests = in i915_gem_record_rings()
1052 kcalloc(count, sizeof(*error->ring[i].requests), in i915_gem_record_rings()
1054 if (error->ring[i].requests == NULL) { in i915_gem_record_rings()
1055 error->ring[i].num_requests = 0; in i915_gem_record_rings()
1063 erq = &error->ring[i].requests[count++]; in i915_gem_record_rings()
1075 struct drm_i915_error_state *error, in i915_gem_capture_vm() argument
1087 error->active_bo_count[ndx] = i; in i915_gem_capture_vm()
1094 error->pinned_bo_count[ndx] = i - error->active_bo_count[ndx]; in i915_gem_capture_vm()
1099 pinned_bo = active_bo + error->active_bo_count[ndx]; in i915_gem_capture_vm()
1103 error->active_bo_count[ndx] = in i915_gem_capture_vm()
1105 error->active_bo_count[ndx], in i915_gem_capture_vm()
1109 error->pinned_bo_count[ndx] = in i915_gem_capture_vm()
1111 error->pinned_bo_count[ndx], in i915_gem_capture_vm()
1113 error->active_bo[ndx] = active_bo; in i915_gem_capture_vm()
1114 error->pinned_bo[ndx] = pinned_bo; in i915_gem_capture_vm()
1118 struct drm_i915_error_state *error) in i915_gem_capture_buffers() argument
1126 error->active_bo = kcalloc(cnt, sizeof(*error->active_bo), GFP_ATOMIC); in i915_gem_capture_buffers()
1127 error->pinned_bo = kcalloc(cnt, sizeof(*error->pinned_bo), GFP_ATOMIC); in i915_gem_capture_buffers()
1128 error->active_bo_count = kcalloc(cnt, sizeof(*error->active_bo_count), in i915_gem_capture_buffers()
1130 error->pinned_bo_count = kcalloc(cnt, sizeof(*error->pinned_bo_count), in i915_gem_capture_buffers()
1133 if (error->active_bo == NULL || in i915_gem_capture_buffers()
1134 error->pinned_bo == NULL || in i915_gem_capture_buffers()
1135 error->active_bo_count == NULL || in i915_gem_capture_buffers()
1136 error->pinned_bo_count == NULL) { in i915_gem_capture_buffers()
1137 kfree(error->active_bo); in i915_gem_capture_buffers()
1138 kfree(error->active_bo_count); in i915_gem_capture_buffers()
1139 kfree(error->pinned_bo); in i915_gem_capture_buffers()
1140 kfree(error->pinned_bo_count); in i915_gem_capture_buffers()
1142 error->active_bo = NULL; in i915_gem_capture_buffers()
1143 error->active_bo_count = NULL; in i915_gem_capture_buffers()
1144 error->pinned_bo = NULL; in i915_gem_capture_buffers()
1145 error->pinned_bo_count = NULL; in i915_gem_capture_buffers()
1148 i915_gem_capture_vm(dev_priv, error, vm, i++); in i915_gem_capture_buffers()
1150 error->vm_count = cnt; in i915_gem_capture_buffers()
1156 struct drm_i915_error_state *error) in i915_capture_reg_state() argument
1171 error->gtier[0] = I915_READ(GTIER); in i915_capture_reg_state()
1172 error->ier = I915_READ(VLV_IER); in i915_capture_reg_state()
1173 error->forcewake = I915_READ(FORCEWAKE_VLV); in i915_capture_reg_state()
1177 error->err_int = I915_READ(GEN7_ERR_INT); in i915_capture_reg_state()
1180 error->fault_data0 = I915_READ(GEN8_FAULT_TLB_DATA0); in i915_capture_reg_state()
1181 error->fault_data1 = I915_READ(GEN8_FAULT_TLB_DATA1); in i915_capture_reg_state()
1185 error->forcewake = I915_READ(FORCEWAKE); in i915_capture_reg_state()
1186 error->gab_ctl = I915_READ(GAB_CTL); in i915_capture_reg_state()
1187 error->gfx_mode = I915_READ(GFX_MODE); in i915_capture_reg_state()
1192 error->forcewake = I915_READ(FORCEWAKE_MT); in i915_capture_reg_state()
1195 error->derrmr = I915_READ(DERRMR); in i915_capture_reg_state()
1196 error->error = I915_READ(ERROR_GEN6); in i915_capture_reg_state()
1197 error->done_reg = I915_READ(DONE_REG); in i915_capture_reg_state()
1202 error->gam_ecochk = I915_READ(GAM_ECOCHK); in i915_capture_reg_state()
1203 error->gac_eco = I915_READ(GAC_ECO_BITS); in i915_capture_reg_state()
1208 error->ccid = I915_READ(CCID); in i915_capture_reg_state()
1211 error->ier = I915_READ(GEN8_DE_MISC_IER); in i915_capture_reg_state()
1213 error->gtier[i] = I915_READ(GEN8_GT_IER(i)); in i915_capture_reg_state()
1215 error->ier = I915_READ(DEIER); in i915_capture_reg_state()
1216 error->gtier[0] = I915_READ(GTIER); in i915_capture_reg_state()
1218 error->ier = I915_READ16(IER); in i915_capture_reg_state()
1220 error->ier = I915_READ(IER); in i915_capture_reg_state()
1222 error->eir = I915_READ(EIR); in i915_capture_reg_state()
1223 error->pgtbl_er = I915_READ(PGTBL_ER); in i915_capture_reg_state()
1225 i915_get_extra_instdone(dev, error->extra_instdone); in i915_capture_reg_state()
1229 struct drm_i915_error_state *error, in i915_error_capture_msg() argument
1237 ecode = i915_error_generate_code(dev_priv, error, &ring_id); in i915_error_capture_msg()
1239 len = scnprintf(error->error_msg, sizeof(error->error_msg), in i915_error_capture_msg()
1243 if (ring_id != -1 && error->ring[ring_id].pid != -1) in i915_error_capture_msg()
1244 len += scnprintf(error->error_msg + len, in i915_error_capture_msg()
1245 sizeof(error->error_msg) - len, in i915_error_capture_msg()
1247 error->ring[ring_id].comm, in i915_error_capture_msg()
1248 error->ring[ring_id].pid); in i915_error_capture_msg()
1250 scnprintf(error->error_msg + len, sizeof(error->error_msg) - len, in i915_error_capture_msg()
1257 struct drm_i915_error_state *error) in i915_capture_gen_state() argument
1259 error->reset_count = i915_reset_count(&dev_priv->gpu_error); in i915_capture_gen_state()
1260 error->suspend_count = dev_priv->suspend_count; in i915_capture_gen_state()
1277 struct drm_i915_error_state *error; in i915_capture_error_state() local
1281 error = kzalloc(sizeof(*error), GFP_ATOMIC); in i915_capture_error_state()
1282 if (!error) { in i915_capture_error_state()
1287 kref_init(&error->ref); in i915_capture_error_state()
1289 i915_capture_gen_state(dev_priv, error); in i915_capture_error_state()
1290 i915_capture_reg_state(dev_priv, error); in i915_capture_error_state()
1291 i915_gem_capture_buffers(dev_priv, error); in i915_capture_error_state()
1292 i915_gem_record_fences(dev, error); in i915_capture_error_state()
1293 i915_gem_record_rings(dev, error); in i915_capture_error_state()
1295 do_gettimeofday(&error->time); in i915_capture_error_state()
1297 error->overlay = intel_overlay_capture_error_state(dev); in i915_capture_error_state()
1298 error->display = intel_display_capture_error_state(dev); in i915_capture_error_state()
1300 i915_error_capture_msg(dev, error, wedged, error_msg); in i915_capture_error_state()
1301 DRM_INFO("%s\n", error->error_msg); in i915_capture_error_state()
1305 dev_priv->gpu_error.first_error = error; in i915_capture_error_state()
1306 error = NULL; in i915_capture_error_state()
1310 if (error) { in i915_capture_error_state()
1311 i915_error_state_free(&error->ref); in i915_capture_error_state()
1331 error_priv->error = dev_priv->gpu_error.first_error; in i915_error_state_get()
1332 if (error_priv->error) in i915_error_state_get()
1333 kref_get(&error_priv->error->ref); in i915_error_state_get()
1340 if (error_priv->error) in i915_error_state_put()
1341 kref_put(&error_priv->error->ref, i915_error_state_free); in i915_error_state_put()
1347 struct drm_i915_error_state *error; in i915_destroy_error_state() local
1350 error = dev_priv->gpu_error.first_error; in i915_destroy_error_state()
1354 if (error) in i915_destroy_error_state()
1355 kref_put(&error->ref, i915_error_state_free); in i915_destroy_error_state()