• C
    drm/i915: Improve behaviour under memory pressure · 07f73f69
    Chris Wilson 提交于
    Due to the necessity of having to take the struct_mutex, the i915
    shrinker can not free the inactive lists if we fail to allocate memory
    whilst processing a batch buffer, triggering an OOM and an ENOMEM that
    is reported back to userspace. In order to fare better under such
    circumstances we need to manually retry a failed allocation after
    evicting inactive buffers.
    
    To do so involves 3 steps:
    1. Marking the backing shm pages as NORETRY.
    2. Updating the get_pages() callers to evict something on failure and then
       retry.
    3. Revamping the evict something logic to be smarter about the required
       buffer size and prefer to use volatile or clean inactive pages.
    Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
    07f73f69
i915_gem.c 126.5 KB