On ti, 2016-09-20 at 09:29 +0100, Chris Wilson wrote: > @@ -175,6 +176,110 @@ static void i915_error_puts(struct drm_i915_error_state_buf *e, > #define err_printf(e, ...) i915_error_printf(e, __VA_ARGS__) > #define err_puts(e, s) i915_error_puts(e, s) > > +#ifdef CONFIG_DRM_I915_COMPRESS_ERROR > + > +static bool compress_init(struct z_stream_s *zstream) > +{ > + memset(zstream, 0, sizeof(*zstream)); > + > + zstream->workspace = > + kmalloc(zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL), > + GFP_ATOMIC | __GFP_NOWARN); > + if (!zstream->workspace) > + return NULL; return false; > +static int compress_page(struct z_stream_s *zstream, > + void *src, > + struct drm_i915_error_object *dst) > +{ > + zstream->next_in = src; > + zstream->avail_in = PAGE_SIZE; > + > + do { > + if (zstream->avail_out == 0) { > + unsigned long page; > + > + page = __get_free_page(GFP_ATOMIC | __GFP_NOWARN); > + if (!page) > + return -ENOMEM; > + > + dst->pages[dst->page_count++] = (void *)page; > + > + zstream->next_out = (void *)page; > + zstream->avail_out = PAGE_SIZE; > + } > + > + if (zlib_deflate(zstream, Z_SYNC_FLUSH) != Z_OK) > + return -EIO; > + > + /* Fallback to uncompressed if we increase size? */ > + if (0 && zstream->total_out > zstream->total_in) > + return -E2BIG; We could still end up decreasing in the future, so this check should really be outside of this function at the end of compression. > @@ -327,13 +450,23 @@ static void print_error_obj(struct drm_i915_error_state_buf *m, > lower_32_bits(obj->gtt_offset)); > } > > - for (page = offset = 0; page < obj->page_count; page++) { > - for (elt = 0; elt < PAGE_SIZE/4; elt++) { > - err_printf(m, "%08x : %08x\n", offset, > - obj->pages[page][elt]); > - offset += 4; > + err_compression_marker(m); > + for (page = 0; page < obj->page_count; page++) { > + int i, len; > + > + len = PAGE_SIZE; > + if (page == obj->page_count - 1) > + len -= obj->unused; > + len = (len + 3) / 4; Magic-ish. ascii85_length() or so. > + num_pages = DIV_ROUND_UP(10 * num_pages, 8); /* worstcase zlib growth */ Could be a function added to kernel zlib. Above addressed; Reviewed-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> Regards, Joonas -- Joonas Lahtinen Open Source Technology Center Intel Corporation _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx