aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'freedreno/msm/msm_ringbuffer.c')
-rw-r--r--freedreno/msm/msm_ringbuffer.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/freedreno/msm/msm_ringbuffer.c b/freedreno/msm/msm_ringbuffer.c
index 17194f4c..a87e1b9a 100644
--- a/freedreno/msm/msm_ringbuffer.c
+++ b/freedreno/msm/msm_ringbuffer.c
@@ -26,10 +26,6 @@
26 * Rob Clark <robclark@freedesktop.org> 26 * Rob Clark <robclark@freedesktop.org>
27 */ 27 */
28 28
29#ifdef HAVE_CONFIG_H
30# include <config.h>
31#endif
32
33#include <assert.h> 29#include <assert.h>
34#include <inttypes.h> 30#include <inttypes.h>
35 31
@@ -401,6 +397,7 @@ static int msm_ringbuffer_flush(struct fd_ringbuffer *ring, uint32_t *last_start
401 struct msm_ringbuffer *msm_ring = to_msm_ringbuffer(ring); 397 struct msm_ringbuffer *msm_ring = to_msm_ringbuffer(ring);
402 struct drm_msm_gem_submit req = { 398 struct drm_msm_gem_submit req = {
403 .flags = to_msm_pipe(ring->pipe)->pipe, 399 .flags = to_msm_pipe(ring->pipe)->pipe,
400 .queueid = to_msm_pipe(ring->pipe)->queue_id,
404 }; 401 };
405 uint32_t i; 402 uint32_t i;
406 int ret; 403 int ret;
@@ -496,11 +493,16 @@ static void msm_ringbuffer_emit_reloc(struct fd_ringbuffer *ring,
496 if (ring->pipe->gpu_id >= 500) { 493 if (ring->pipe->gpu_id >= 500) {
497 struct drm_msm_gem_submit_reloc *reloc_hi; 494 struct drm_msm_gem_submit_reloc *reloc_hi;
498 495
496 /* NOTE: grab reloc_idx *before* APPEND() since that could
497 * realloc() meaning that 'reloc' ptr is no longer valid:
498 */
499 uint32_t reloc_idx = reloc->reloc_idx;
500
499 idx = APPEND(cmd, relocs); 501 idx = APPEND(cmd, relocs);
500 502
501 reloc_hi = &cmd->relocs[idx]; 503 reloc_hi = &cmd->relocs[idx];
502 504
503 reloc_hi->reloc_idx = reloc->reloc_idx; 505 reloc_hi->reloc_idx = reloc_idx;
504 reloc_hi->reloc_offset = r->offset; 506 reloc_hi->reloc_offset = r->offset;
505 reloc_hi->or = r->orhi; 507 reloc_hi->or = r->orhi;
506 reloc_hi->shift = r->shift - 32; 508 reloc_hi->shift = r->shift - 32;
@@ -584,12 +586,12 @@ drm_private struct fd_ringbuffer * msm_ringbuffer_new(struct fd_pipe *pipe,
584 uint32_t size) 586 uint32_t size)
585{ 587{
586 struct msm_ringbuffer *msm_ring; 588 struct msm_ringbuffer *msm_ring;
587 struct fd_ringbuffer *ring = NULL; 589 struct fd_ringbuffer *ring;
588 590
589 msm_ring = calloc(1, sizeof(*msm_ring)); 591 msm_ring = calloc(1, sizeof(*msm_ring));
590 if (!msm_ring) { 592 if (!msm_ring) {
591 ERROR_MSG("allocation failed"); 593 ERROR_MSG("allocation failed");
592 goto fail; 594 return NULL;
593 } 595 }
594 596
595 if (size == 0) { 597 if (size == 0) {
@@ -609,8 +611,4 @@ drm_private struct fd_ringbuffer * msm_ringbuffer_new(struct fd_pipe *pipe,
609 ring_cmd_new(ring, size); 611 ring_cmd_new(ring, size);
610 612
611 return ring; 613 return ring;
612fail:
613 if (ring)
614 fd_ringbuffer_del(ring);
615 return NULL;
616} 614}