• C
    drm/i915: Cache the error string · 0e39037b
    Chris Wilson 提交于
    Currently, we convert the error state into a string every time we read
    from sysfs (and sysfs reads in page size (4KiB) chunks). We do try to
    window the string and only capture the portion that is being read, but
    that means that we must always convert up to the window to find the
    start. For a very large error state bordering on EXEC_OBJECT_CAPTURE
    abuse, this is noticeable as it degrades to O(N^2)!
    
    As we do not have a convenient hook for sysfs open(), and we would like
    to keep the lazy conversion into a string, do the conversion of the
    whole string on the first read and keep the string until the error state
    is freed.
    
    v2: Don't double advance simple_read_from_buffer
    v3: Due to extreme pain of lack of vrealloc, use a scatterlist
    v4: Keep the forward iterator loosely cached
    v5: Stylistic improvements to reduce patch size
    Reported-by: NJason Ekstrand <jason@jlekstrand.net>
    Testcase: igt/gem_exec_capture/many*
    Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
    Cc: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20181123132325.26541-1-chris@chris-wilson.co.uk
    0e39037b
i915_gpu_error.c 51.3 KB