summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-08-16 10:20:22 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-16 10:20:22 -0700
commitc19e021f9905bd303aa037fceb6c6f4c3c223b3b (patch)
tree34701458003678d46480b02a466fd684456708a6 /drivers/gpu
parent442c0b0c36d59203902afc40e4c92d7e57ad43c5 (diff)
parent204483da6978a5973d97df0a3da123c2c66d785a (diff)
Merge "msm: kgsl: Fix the ringbuffer wrap around logic"
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/msm/adreno_ringbuffer.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/gpu/msm/adreno_ringbuffer.c b/drivers/gpu/msm/adreno_ringbuffer.c
index 0160939e97f9..5ffb0b2513f3 100644
--- a/drivers/gpu/msm/adreno_ringbuffer.c
+++ b/drivers/gpu/msm/adreno_ringbuffer.c
@@ -158,11 +158,18 @@ unsigned int *adreno_ringbuffer_allocspace(struct adreno_ringbuffer *rb,
return RB_HOSTPTR(rb, ret);
}
- cmds = RB_HOSTPTR(rb, rb->_wptr);
- *cmds = cp_packet(adreno_dev, CP_NOP,
- KGSL_RB_DWORDS - rb->_wptr - 1);
-
- rb->_wptr = 0;
+ /*
+ * There isn't enough space toward the end of ringbuffer. So
+ * look for space from the beginning of ringbuffer upto the
+ * read pointer.
+ */
+ if (dwords < rptr) {
+ cmds = RB_HOSTPTR(rb, rb->_wptr);
+ *cmds = cp_packet(adreno_dev, CP_NOP,
+ KGSL_RB_DWORDS - rb->_wptr - 1);
+ rb->_wptr = dwords;
+ return RB_HOSTPTR(rb, 0);
+ }
}
if (rb->_wptr + dwords < rptr) {