projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
f747026
)
drm/i915: Skip the execlists CSB scan and rewrite if the ring is untouched
author
Chris Wilson
<chris@chris-wilson.co.uk>
Tue, 24 Jan 2017 11:00:06 +0000
(11:00 +0000)
committer
Chris Wilson
<chris@chris-wilson.co.uk>
Tue, 24 Jan 2017 15:56:18 +0000
(15:56 +0000)
If the CSB head/tail pointers are unchanged, we can skip the update of
the CSB register afterwards.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link:
http://patchwork.freedesktop.org/patch/msgid/20170124110009.28947-5-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_lrc.c
patch
|
blob
|
history
diff --git
a/drivers/gpu/drm/i915/intel_lrc.c
b/drivers/gpu/drm/i915/intel_lrc.c
index f729568e5e544ea7783ea845b6c49014e2013af7..99ab2d70be37584e8583bdd8eadbf5cef757fb49 100644
(file)
--- a/
drivers/gpu/drm/i915/intel_lrc.c
+++ b/
drivers/gpu/drm/i915/intel_lrc.c
@@
-574,9
+574,12
@@
static void intel_lrc_irq_handler(unsigned long data)
csb = readl(csb_mmio);
head = GEN8_CSB_READ_PTR(csb);
tail = GEN8_CSB_WRITE_PTR(csb);
+ if (head == tail)
+ break;
+
if (tail < head)
tail += GEN8_CSB_ENTRIES;
-
while (head < tail)
{
+
do
{
unsigned int idx = ++head % GEN8_CSB_ENTRIES;
unsigned int status = readl(buf + 2 * idx);
@@
-601,7
+604,7
@@
static void intel_lrc_irq_handler(unsigned long data)
GEM_BUG_ON(port[0].count == 0 &&
!(status & GEN8_CTX_STATUS_ACTIVE_IDLE));
- }
+ }
while (head < tail);
writel(_MASKED_FIELD(GEN8_CSB_READ_PTR_MASK,
GEN8_CSB_WRITE_PTR(csb) << 8),