diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2016-08-16 10:20:22 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-16 10:20:22 -0700 |
commit | c19e021f9905bd303aa037fceb6c6f4c3c223b3b (patch) | |
tree | 34701458003678d46480b02a466fd684456708a6 /drivers/gpu | |
parent | 442c0b0c36d59203902afc40e4c92d7e57ad43c5 (diff) | |
parent | 204483da6978a5973d97df0a3da123c2c66d785a (diff) |
Merge "msm: kgsl: Fix the ringbuffer wrap around logic"
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/msm/adreno_ringbuffer.c | 17 |
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) { |