Skip to content

Commit 39df919

Browse files
committed
drm/i915: Convert i915_semaphores_is_enabled over to early sanitize
Rather than recomputing whether semaphores are enabled, we can do that computation once during early initialisation as the i915.semaphores module parameter is now read-only. s/i915_semaphores_is_enabled/i915.semaphores/ v2: Add the state to the debug dmesg as well Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: http://patchwork.freedesktop.org/patch/msgid/1469005202-9659-10-git-send-email-chris@chris-wilson.co.uk Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1469017917-15134-9-git-send-email-chris@chris-wilson.co.uk
1 parent f2f0ed7 commit 39df919

File tree

7 files changed

+34
-30
lines changed

7 files changed

+34
-30
lines changed

drivers/gpu/drm/i915/i915_debugfs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3220,7 +3220,7 @@ static int i915_semaphore_status(struct seq_file *m, void *unused)
32203220
enum intel_engine_id id;
32213221
int j, ret;
32223222

3223-
if (!i915_semaphore_is_enabled(dev_priv)) {
3223+
if (!i915.semaphores) {
32243224
seq_puts(m, "Semaphores are disabled\n");
32253225
return 0;
32263226
}

drivers/gpu/drm/i915/i915_drv.c

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -228,27 +228,6 @@ static void intel_detect_pch(struct drm_device *dev)
228228
pci_dev_put(pch);
229229
}
230230

231-
bool i915_semaphore_is_enabled(struct drm_i915_private *dev_priv)
232-
{
233-
if (INTEL_GEN(dev_priv) < 6)
234-
return false;
235-
236-
if (i915.semaphores >= 0)
237-
return i915.semaphores;
238-
239-
/* TODO: make semaphores and Execlists play nicely together */
240-
if (i915.enable_execlists)
241-
return false;
242-
243-
#ifdef CONFIG_INTEL_IOMMU
244-
/* Enable semaphores on SNB when IO remapping is off */
245-
if (IS_GEN6(dev_priv) && intel_iommu_gfx_mapped)
246-
return false;
247-
#endif
248-
249-
return true;
250-
}
251-
252231
static int i915_getparam(struct drm_device *dev, void *data,
253232
struct drm_file *file_priv)
254233
{
@@ -324,7 +303,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
324303
value = 1;
325304
break;
326305
case I915_PARAM_HAS_SEMAPHORES:
327-
value = i915_semaphore_is_enabled(dev_priv);
306+
value = i915.semaphores;
328307
break;
329308
case I915_PARAM_HAS_PRIME_VMAP_FLUSH:
330309
value = 1;
@@ -999,6 +978,9 @@ static void intel_sanitize_options(struct drm_i915_private *dev_priv)
999978
i915.enable_ppgtt =
1000979
intel_sanitize_enable_ppgtt(dev_priv, i915.enable_ppgtt);
1001980
DRM_DEBUG_DRIVER("ppgtt mode: %i\n", i915.enable_ppgtt);
981+
982+
i915.semaphores = intel_sanitize_semaphores(dev_priv, i915.semaphores);
983+
DRM_DEBUG_DRIVER("use GPU sempahores? %s\n", yesno(i915.semaphores));
1002984
}
1003985

1004986
/**

drivers/gpu/drm/i915/i915_drv.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2813,6 +2813,8 @@ extern int i915_resume_switcheroo(struct drm_device *dev);
28132813
int intel_sanitize_enable_ppgtt(struct drm_i915_private *dev_priv,
28142814
int enable_ppgtt);
28152815

2816+
bool intel_sanitize_semaphores(struct drm_i915_private *dev_priv, int value);
2817+
28162818
/* i915_drv.c */
28172819
void __printf(3, 4)
28182820
__i915_printk(struct drm_i915_private *dev_priv, const char *level,
@@ -3641,7 +3643,6 @@ extern void intel_set_rps(struct drm_i915_private *dev_priv, u8 val);
36413643
extern void intel_set_memory_cxsr(struct drm_i915_private *dev_priv,
36423644
bool enable);
36433645

3644-
extern bool i915_semaphore_is_enabled(struct drm_i915_private *dev_priv);
36453646
int i915_reg_read_ioctl(struct drm_device *dev, void *data,
36463647
struct drm_file *file);
36473648

drivers/gpu/drm/i915/i915_gem.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2856,7 +2856,7 @@ __i915_gem_object_sync(struct drm_i915_gem_object *obj,
28562856
if (i915_gem_request_completed(from_req))
28572857
return 0;
28582858

2859-
if (!i915_semaphore_is_enabled(to_i915(obj->base.dev))) {
2859+
if (!i915.semaphores) {
28602860
struct drm_i915_private *i915 = to_i915(obj->base.dev);
28612861
ret = __i915_wait_request(from_req,
28622862
i915->mm.interruptible,
@@ -4537,6 +4537,27 @@ i915_gem_init_hw(struct drm_device *dev)
45374537
return ret;
45384538
}
45394539

4540+
bool intel_sanitize_semaphores(struct drm_i915_private *dev_priv, int value)
4541+
{
4542+
if (INTEL_INFO(dev_priv)->gen < 6)
4543+
return false;
4544+
4545+
/* TODO: make semaphores and Execlists play nicely together */
4546+
if (i915.enable_execlists)
4547+
return false;
4548+
4549+
if (value >= 0)
4550+
return value;
4551+
4552+
#ifdef CONFIG_INTEL_IOMMU
4553+
/* Enable semaphores on SNB when IO remapping is off */
4554+
if (INTEL_INFO(dev_priv)->gen == 6 && intel_iommu_gfx_mapped)
4555+
return false;
4556+
#endif
4557+
4558+
return true;
4559+
}
4560+
45404561
int i915_gem_init(struct drm_device *dev)
45414562
{
45424563
struct drm_i915_private *dev_priv = to_i915(dev);

drivers/gpu/drm/i915/i915_gem_context.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ mi_set_context(struct drm_i915_gem_request *req, u32 hw_flags)
556556
u32 flags = hw_flags | MI_MM_SPACE_GTT;
557557
const int num_rings =
558558
/* Use an extended w/a on ivb+ if signalling from other rings */
559-
i915_semaphore_is_enabled(dev_priv) ?
559+
i915.semaphores ?
560560
hweight32(INTEL_INFO(dev_priv)->ring_mask) - 1 :
561561
0;
562562
int len, ret;

drivers/gpu/drm/i915/i915_gpu_error.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -863,7 +863,7 @@ static void gen8_record_semaphore_state(struct drm_i915_private *dev_priv,
863863
struct intel_engine_cs *to;
864864
enum intel_engine_id id;
865865

866-
if (!i915_semaphore_is_enabled(dev_priv))
866+
if (!i915.semaphores)
867867
return;
868868

869869
if (!error->semaphore_obj)

drivers/gpu/drm/i915/intel_ringbuffer.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2679,7 +2679,7 @@ static void intel_ring_init_semaphores(struct drm_i915_private *dev_priv,
26792679
struct drm_i915_gem_object *obj;
26802680
int ret, i;
26812681

2682-
if (!i915_semaphore_is_enabled(dev_priv))
2682+
if (!i915.semaphores)
26832683
return;
26842684

26852685
if (INTEL_GEN(dev_priv) >= 8 && !dev_priv->semaphore_obj) {
@@ -2700,7 +2700,7 @@ static void intel_ring_init_semaphores(struct drm_i915_private *dev_priv,
27002700
}
27012701
}
27022702

2703-
if (!i915_semaphore_is_enabled(dev_priv))
2703+
if (!i915.semaphores)
27042704
return;
27052705

27062706
if (INTEL_GEN(dev_priv) >= 8) {
@@ -2838,7 +2838,7 @@ int intel_init_render_ring_buffer(struct intel_engine_cs *engine)
28382838
engine->init_context = intel_rcs_ctx_init;
28392839
engine->add_request = gen8_render_add_request;
28402840
engine->flush = gen8_render_ring_flush;
2841-
if (i915_semaphore_is_enabled(dev_priv))
2841+
if (i915.semaphores)
28422842
engine->semaphore.signal = gen8_rcs_signal;
28432843
} else if (INTEL_GEN(dev_priv) >= 6) {
28442844
engine->init_context = intel_rcs_ctx_init;

0 commit comments

Comments
 (0)