diff options
Diffstat (limited to 'freedreno/msm/msm_ringbuffer.c')
-rw-r--r-- | freedreno/msm/msm_ringbuffer.c | 20 |
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; |
612 | fail: | ||
613 | if (ring) | ||
614 | fd_ringbuffer_del(ring); | ||
615 | return NULL; | ||
616 | } | 614 | } |