drm/i915: intel_engine_init_global_seqno() requires atomic kmap
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 20 Mar 2017 14:56:09 +0000 (14:56 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 21 Mar 2017 09:21:14 +0000 (09:21 +0000)
As intel_engine_init_global_seqno() may be called by
nop_submit_request() from inside irq context, we have to use atomic
versions of kmap/kunmap. This is rare as this requires using gen8 legacy
ringbuffer submission.

Reported-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170320145609.4898-1-chris@chris-wilson.co.uk
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
drivers/gpu/drm/i915/intel_engine_cs.c

index 4200faa520c728b635bb28bdfca32c79e2fe0b53..ef3c6200069738917e899bddf1c9967078c2f482 100644 (file)
@@ -242,12 +242,12 @@ void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno)
                void *semaphores;
 
                /* Semaphores are in noncoherent memory, flush to be safe */
-               semaphores = kmap(page);
+               semaphores = kmap_atomic(page);
                memset(semaphores + GEN8_SEMAPHORE_OFFSET(engine->id, 0),
                       0, I915_NUM_ENGINES * gen8_semaphore_seqno_size);
                drm_clflush_virt_range(semaphores + GEN8_SEMAPHORE_OFFSET(engine->id, 0),
                                       I915_NUM_ENGINES * gen8_semaphore_seqno_size);
-               kunmap(page);
+               kunmap_atomic(semaphores);
        }
 
        intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno);