drm/i915: Keep a small stash of preallocated WC pages
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 22 Aug 2017 17:38:28 +0000 (18:38 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 22 Aug 2017 18:43:00 +0000 (19:43 +0100)
commit66df1014efbadbdd2a550c6c67a815db9b4d05bd
treea7fbbddd6ec610116df45bafab304bfc46e35861
parenteb371933cf4d3495d0899880b2e0e252ce9db517
drm/i915: Keep a small stash of preallocated WC pages

We use WC pages for coherent writes into the ppGTT on !llc
architectures. However, to create a WC page requires a stop_machine(),
i.e. is very slow. To compensate we currently keep a per-vm cache of
recently freed pages, but we still see the slow startup of new contexts.
We can amoritize that cost slightly by allocating WC pages in small
batches (PAGEVEC_SIZE == 14) and since creating a WC page implies a
stop_machine() there is no penalty for keeping that stash global.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170822173828.5932-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem_gtt.c