diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-03-20 10:56:09 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-03-21 05:21:14 -0400 |
commit | 24caf6559393f68eeefa39faf8c47c0d51a63cee (patch) | |
tree | e4e3888f69617bba3c521af218f56e2844369d61 /drivers/gpu/drm/i915/intel_engine_cs.c | |
parent | 467221bc60c1b500b2f7dc1df77f1a88c725cd4a (diff) |
drm/i915: intel_engine_init_global_seqno() requires atomic kmap
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>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_engine_cs.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_engine_cs.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c index 4200faa520c7..ef3c62000697 100644 --- a/drivers/gpu/drm/i915/intel_engine_cs.c +++ b/drivers/gpu/drm/i915/intel_engine_cs.c | |||
@@ -242,12 +242,12 @@ void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno) | |||
242 | void *semaphores; | 242 | void *semaphores; |
243 | 243 | ||
244 | /* Semaphores are in noncoherent memory, flush to be safe */ | 244 | /* Semaphores are in noncoherent memory, flush to be safe */ |
245 | semaphores = kmap(page); | 245 | semaphores = kmap_atomic(page); |
246 | memset(semaphores + GEN8_SEMAPHORE_OFFSET(engine->id, 0), | 246 | memset(semaphores + GEN8_SEMAPHORE_OFFSET(engine->id, 0), |
247 | 0, I915_NUM_ENGINES * gen8_semaphore_seqno_size); | 247 | 0, I915_NUM_ENGINES * gen8_semaphore_seqno_size); |
248 | drm_clflush_virt_range(semaphores + GEN8_SEMAPHORE_OFFSET(engine->id, 0), | 248 | drm_clflush_virt_range(semaphores + GEN8_SEMAPHORE_OFFSET(engine->id, 0), |
249 | I915_NUM_ENGINES * gen8_semaphore_seqno_size); | 249 | I915_NUM_ENGINES * gen8_semaphore_seqno_size); |
250 | kunmap(page); | 250 | kunmap_atomic(semaphores); |
251 | } | 251 | } |
252 | 252 | ||
253 | intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno); | 253 | intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno); |