On Wed, 26 Aug 2020 at 14:29, Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > > On 32b, highmem uses a finite set of indirect PTE (i.e. vmap) to provide > virtual mappings of the high pages. As these are finite, map_new_virtual() > must wait for some other kmap() to finish when it runs out. If we map a > large number of objects, there is no method for it to tell us to release > the mappings, and we deadlock. > > However, if we make an explicit vmap of the page, that uses a larger > vmalloc arena, and also has the ability to tell us to release unwanted > mappings. Most importantly, it will fail and propagate an error instead > of waiting forever. > > Fixes: fb8621d3bee8 ("drm/i915: Avoid allocating a vmap arena for a single page") #x86-32 > References: e87666b52f00 ("drm/i915/shrinker: Hook up vmap allocation failure notifier") > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Harald Arnesen <harald@xxxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> # v4.7+ Reviewed-by: Matthew Auld <matthew.auld@xxxxxxxxx>