drm/i915: avoid big kmallocs on reading error state
Sometimes when user is trying to get error state out from debugfs after gpu hang, the memory is low and/or fragmented enough that kmalloc in seq_file will fail. Prevent big kmalloc by avoiding seq_file and instead convert error state to string in smaller chunks. v2: better alloc flags, better truncate, correct locking, and error handling improvements (Chris Wilson) v3: printf annotations (Daniel Vetter) Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:

committed by
Daniel Vetter

parent
039735369c
commit
edc3d8848d
@@ -1485,14 +1485,15 @@ err:
|
||||
}
|
||||
|
||||
void
|
||||
intel_overlay_print_error_state(struct seq_file *m, struct intel_overlay_error_state *error)
|
||||
intel_overlay_print_error_state(struct drm_i915_error_state_buf *m,
|
||||
struct intel_overlay_error_state *error)
|
||||
{
|
||||
seq_printf(m, "Overlay, status: 0x%08x, interrupt: 0x%08x\n",
|
||||
error->dovsta, error->isr);
|
||||
seq_printf(m, " Register file at 0x%08lx:\n",
|
||||
error->base);
|
||||
i915_error_printf(m, "Overlay, status: 0x%08x, interrupt: 0x%08x\n",
|
||||
error->dovsta, error->isr);
|
||||
i915_error_printf(m, " Register file at 0x%08lx:\n",
|
||||
error->base);
|
||||
|
||||
#define P(x) seq_printf(m, " " #x ": 0x%08x\n", error->regs.x)
|
||||
#define P(x) i915_error_printf(m, " " #x ": 0x%08x\n", error->regs.x)
|
||||
P(OBUF_0Y);
|
||||
P(OBUF_1Y);
|
||||
P(OBUF_0U);
|
||||
|
Reference in New Issue
Block a user