diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/0276-drm-amdgpu-move-ring-from-IBs-into-job.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/files/0276-drm-amdgpu-move-ring-from-IBs-into-job.patch | 439 |
1 files changed, 0 insertions, 439 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/0276-drm-amdgpu-move-ring-from-IBs-into-job.patch b/meta-amdfalconx86/recipes-kernel/linux/files/0276-drm-amdgpu-move-ring-from-IBs-into-job.patch deleted file mode 100644 index a245857f..00000000 --- a/meta-amdfalconx86/recipes-kernel/linux/files/0276-drm-amdgpu-move-ring-from-IBs-into-job.patch +++ /dev/null @@ -1,439 +0,0 @@ -From 7e425890bf4b71763f8603e26c8e94438804a4cf Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Sun, 31 Jan 2016 12:29:04 +0100 -Subject: [PATCH 0276/1110] drm/amdgpu: move ring from IBs into job -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -We can't submit to multiple rings at the same time anyway. - -Signed-off-by: Christian König <christian.koenig@amd.com> -Reviewed-by: Alex Deucher <alexander.deucer@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> -Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 6 +++--- - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 35 ++++++++++++++++++------------- - drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 11 ++++------ - drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 5 +++-- - drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 8 +++---- - drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +- - drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- - drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 4 ++-- - drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 6 +++--- - drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- - drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 2 +- - drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 4 ++-- - drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- - drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- - 14 files changed, 47 insertions(+), 44 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 49d3c33..ea4e3aa 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -731,7 +731,6 @@ struct amdgpu_ib { - uint32_t length_dw; - uint64_t gpu_addr; - uint32_t *ptr; -- struct amdgpu_ring *ring; - struct amdgpu_fence *fence; - struct amdgpu_user_fence *user; - bool grabbed_vmid; -@@ -1143,10 +1142,10 @@ struct amdgpu_gfx { - unsigned ce_ram_size; - }; - --int amdgpu_ib_get(struct amdgpu_ring *ring, struct amdgpu_vm *vm, -+int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm, - unsigned size, struct amdgpu_ib *ib); - void amdgpu_ib_free(struct amdgpu_device *adev, struct amdgpu_ib *ib); --int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs, -+int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, - struct amdgpu_ib *ib, void *owner); - int amdgpu_ib_pool_init(struct amdgpu_device *adev); - void amdgpu_ib_pool_fini(struct amdgpu_device *adev); -@@ -1204,6 +1203,7 @@ struct amdgpu_cs_parser { - struct amdgpu_job { - struct amd_sched_job base; - struct amdgpu_device *adev; -+ struct amdgpu_ring *ring; - struct amdgpu_ib *ibs; - uint32_t num_ibs; - void *owner; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -index a4805aa..45ba532 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -@@ -587,26 +587,26 @@ static int amdgpu_bo_vm_update_pte(struct amdgpu_cs_parser *p, - } - - static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev, -- struct amdgpu_cs_parser *parser) -+ struct amdgpu_cs_parser *p) - { -- struct amdgpu_fpriv *fpriv = parser->filp->driver_priv; -+ struct amdgpu_fpriv *fpriv = p->filp->driver_priv; - struct amdgpu_vm *vm = &fpriv->vm; -- struct amdgpu_ring *ring; -+ struct amdgpu_ring *ring = p->job->ring; - int i, r; - - /* Only for UVD/VCE VM emulation */ -- for (i = 0; i < parser->job->num_ibs; i++) { -- ring = parser->job->ibs[i].ring; -- if (ring->funcs->parse_cs) { -- r = amdgpu_ring_parse_cs(ring, parser, i); -+ if (ring->funcs->parse_cs) { -+ for (i = 0; i < p->job->num_ibs; i++) { -+ r = amdgpu_ring_parse_cs(ring, p, i); -+ - if (r) - return r; - } - } - -- r = amdgpu_bo_vm_update_pte(parser, vm); -+ r = amdgpu_bo_vm_update_pte(p, vm); - if (!r) -- amdgpu_cs_sync_rings(parser); -+ amdgpu_cs_sync_rings(p); - - return r; - } -@@ -648,6 +648,11 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev, - if (r) - return r; - -+ if (parser->job->ring && parser->job->ring != ring) -+ return -EINVAL; -+ -+ parser->job->ring = ring; -+ - if (ring->funcs->parse_cs) { - struct amdgpu_bo_va_mapping *m; - struct amdgpu_bo *aobj = NULL; -@@ -676,7 +681,7 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev, - offset = ((uint64_t)m->it.start) * AMDGPU_GPU_PAGE_SIZE; - kptr += chunk_ib->va_start - offset; - -- r = amdgpu_ib_get(ring, NULL, chunk_ib->ib_bytes, ib); -+ r = amdgpu_ib_get(adev, NULL, chunk_ib->ib_bytes, ib); - if (r) { - DRM_ERROR("Failed to get ib !\n"); - return r; -@@ -685,7 +690,7 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev, - memcpy(ib->ptr, kptr, chunk_ib->ib_bytes); - amdgpu_bo_kunmap(aobj); - } else { -- r = amdgpu_ib_get(ring, vm, 0, ib); -+ r = amdgpu_ib_get(adev, vm, 0, ib); - if (r) { - DRM_ERROR("Failed to get ib !\n"); - return r; -@@ -725,8 +730,9 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev, - struct amdgpu_ib *ib = &parser->job->ibs[parser->job->num_ibs - 1]; - - /* UVD & VCE fw doesn't support user fences */ -- if (ib->ring->type == AMDGPU_RING_TYPE_UVD || -- ib->ring->type == AMDGPU_RING_TYPE_VCE) -+ if (parser->job->ring->type == AMDGPU_RING_TYPE_UVD || -+ parser->job->ring->type == AMDGPU_RING_TYPE_VCE) -+ - return -EINVAL; - - ib->user = &parser->job->uf; -@@ -802,7 +808,7 @@ static int amdgpu_cs_free_job(struct amdgpu_job *job) - static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, - union drm_amdgpu_cs *cs) - { -- struct amdgpu_ring * ring = p->job->ibs->ring; -+ struct amdgpu_ring *ring = p->job->ring; - struct amd_sched_fence *fence; - struct amdgpu_job *job; - -@@ -812,7 +818,6 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, - - job->base.sched = &ring->sched; - job->base.s_entity = &p->ctx->rings[ring->idx].entity; -- job->adev = p->adev; - job->owner = p->filp; - job->free_job = amdgpu_cs_free_job; - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c -index b673770..640ff53 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c -@@ -55,10 +55,9 @@ static int amdgpu_debugfs_sa_init(struct amdgpu_device *adev); - * suballocator. - * Returns 0 on success, error on failure. - */ --int amdgpu_ib_get(struct amdgpu_ring *ring, struct amdgpu_vm *vm, -+int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm, - unsigned size, struct amdgpu_ib *ib) - { -- struct amdgpu_device *adev = ring->adev; - int r; - - if (size) { -@@ -77,7 +76,6 @@ int amdgpu_ib_get(struct amdgpu_ring *ring, struct amdgpu_vm *vm, - - amdgpu_sync_create(&ib->sync); - -- ib->ring = ring; - ib->vm = vm; - - return 0; -@@ -120,11 +118,11 @@ void amdgpu_ib_free(struct amdgpu_device *adev, struct amdgpu_ib *ib) - * a CONST_IB), it will be put on the ring prior to the DE IB. Prior - * to SI there was just a DE IB. - */ --int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs, -+int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, - struct amdgpu_ib *ibs, void *owner) - { -+ struct amdgpu_device *adev = ring->adev; - struct amdgpu_ib *ib = &ibs[0]; -- struct amdgpu_ring *ring; - struct amdgpu_ctx *ctx, *old_ctx; - struct amdgpu_vm *vm; - unsigned i; -@@ -133,7 +131,6 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs, - if (num_ibs == 0) - return -EINVAL; - -- ring = ibs->ring; - ctx = ibs->ctx; - vm = ibs->vm; - -@@ -178,7 +175,7 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs, - for (i = 0; i < num_ibs; ++i) { - ib = &ibs[i]; - -- if (ib->ring != ring || ib->ctx != ctx || ib->vm != vm) { -+ if (ib->ctx != ctx || ib->vm != vm) { - ring->current_ctx = old_ctx; - amdgpu_ring_undo(ring); - return -EINVAL; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -index 91b4862..7c03d4a 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -@@ -70,7 +70,7 @@ static struct fence *amdgpu_sched_dependency(struct amd_sched_job *sched_job) - struct fence *fence = amdgpu_sync_get_fence(sync); - - if (fence == NULL && vm && !job->ibs->grabbed_vmid) { -- struct amdgpu_ring *ring = job->ibs->ring; -+ struct amdgpu_ring *ring = job->ring; - int r; - - r = amdgpu_vm_grab_id(vm, ring, sync, -@@ -98,7 +98,7 @@ static struct fence *amdgpu_sched_run_job(struct amd_sched_job *sched_job) - } - job = to_amdgpu_job(sched_job); - trace_amdgpu_sched_run_job(job); -- r = amdgpu_ib_schedule(job->adev, job->num_ibs, job->ibs, job->owner); -+ r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job->owner); - if (r) { - DRM_ERROR("Error scheduling IBs (%d)\n", r); - goto err; -@@ -142,6 +142,7 @@ int amdgpu_sched_ib_submit_kernel_helper(struct amdgpu_device *adev, - *f = fence_get(&job->base.s_fence->base); - - job->adev = adev; -+ job->ring = ring; - job->ibs = ibs; - job->num_ibs = num_ibs; - job->owner = owner; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h -index 9c15284..0254425 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h -@@ -38,10 +38,10 @@ TRACE_EVENT(amdgpu_cs, - - TP_fast_assign( - __entry->bo_list = p->bo_list; -- __entry->ring = p->ibs[i].ring->idx; -+ __entry->ring = p->job->ring->idx; - __entry->dw = p->job->ibs[i].length_dw; - __entry->fences = amdgpu_fence_count_emitted( -- p->job->ibs[i].ring); -+ p->job->ring); - ), - TP_printk("bo_list=%p, ring=%u, dw=%u, fences=%u", - __entry->bo_list, __entry->ring, __entry->dw, -@@ -65,7 +65,7 @@ TRACE_EVENT(amdgpu_cs_ioctl, - __entry->sched_job = &job->base; - __entry->ib = job->ibs; - __entry->fence = &job->base.s_fence->base; -- __entry->ring_name = job->ibs[0].ring->name; -+ __entry->ring_name = job->ring->name; - __entry->num_ibs = job->num_ibs; - ), - TP_printk("adev=%p, sched_job=%p, first ib=%p, sched fence=%p, ring name:%s, num_ibs:%u", -@@ -90,7 +90,7 @@ TRACE_EVENT(amdgpu_sched_run_job, - __entry->sched_job = &job->base; - __entry->ib = job->ibs; - __entry->fence = &job->base.s_fence->base; -- __entry->ring_name = job->ibs[0].ring->name; -+ __entry->ring_name = job->ring->name; - __entry->num_ibs = job->num_ibs; - ), - TP_printk("adev=%p, sched_job=%p, first ib=%p, sched fence=%p, ring name:%s, num_ibs:%u", -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c -index 4a32bdd..df5ecc2 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c -@@ -1030,7 +1030,7 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, - if (!ib) - return -ENOMEM; - -- r = amdgpu_ib_get(ring, NULL, num_dw * 4, ib); -+ r = amdgpu_ib_get(adev, NULL, num_dw * 4, ib); - if (r) { - kfree(ib); - return r; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c -index 520ad02..35aa5a2 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c -@@ -872,7 +872,7 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, - r = -ENOMEM; - goto err; - } -- r = amdgpu_ib_get(ring, NULL, 64, ib); -+ r = amdgpu_ib_get(adev, NULL, 64, ib); - if (r) - goto err1; - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c -index 420b610..26cc9e4 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c -@@ -378,7 +378,7 @@ int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle, - ib = kzalloc(sizeof(struct amdgpu_ib), GFP_KERNEL); - if (!ib) - return -ENOMEM; -- r = amdgpu_ib_get(ring, NULL, ib_size_dw * 4, ib); -+ r = amdgpu_ib_get(adev, NULL, ib_size_dw * 4, ib); - if (r) { - DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); - kfree(ib); -@@ -464,7 +464,7 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle, - if (!ib) - return -ENOMEM; - -- r = amdgpu_ib_get(ring, NULL, ib_size_dw * 4, ib); -+ r = amdgpu_ib_get(adev, NULL, ib_size_dw * 4, ib); - if (r) { - kfree(ib); - DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -index 3487a11..ec9c967 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -@@ -362,7 +362,7 @@ static int amdgpu_vm_clear_bo(struct amdgpu_device *adev, - if (!ib) - goto error; - -- r = amdgpu_ib_get(ring, NULL, 64, ib); -+ r = amdgpu_ib_get(adev, NULL, 64, ib); - if (r) - goto error_free; - -@@ -455,7 +455,7 @@ int amdgpu_vm_update_page_directory(struct amdgpu_device *adev, - if (!ib) - return -ENOMEM; - -- r = amdgpu_ib_get(ring, NULL, ndw * 4, ib); -+ r = amdgpu_ib_get(adev, NULL, ndw * 4, ib); - if (r) { - kfree(ib); - return r; -@@ -749,7 +749,7 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev, - if (!ib) - return -ENOMEM; - -- r = amdgpu_ib_get(ring, NULL, ndw * 4, ib); -+ r = amdgpu_ib_get(adev, NULL, ndw * 4, ib); - if (r) { - kfree(ib); - return r; -diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c -index 0608326..1309d3e 100644 ---- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c -+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c -@@ -621,7 +621,7 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring) - tmp = 0xCAFEDEAD; - adev->wb.wb[index] = cpu_to_le32(tmp); - memset(&ib, 0, sizeof(ib)); -- r = amdgpu_ib_get(ring, NULL, 256, &ib); -+ r = amdgpu_ib_get(adev, NULL, 256, &ib); - if (r) { - DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); - goto err0; -diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c -index 148311e..0a2fb19 100644 ---- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c -@@ -2631,7 +2631,7 @@ static int gfx_v7_0_ring_test_ib(struct amdgpu_ring *ring) - } - WREG32(scratch, 0xCAFEDEAD); - memset(&ib, 0, sizeof(ib)); -- r = amdgpu_ib_get(ring, NULL, 256, &ib); -+ r = amdgpu_ib_get(adev, NULL, 256, &ib); - if (r) { - DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); - goto err1; -diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -index 2b69a15..98d9186 100644 ---- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -@@ -699,7 +699,7 @@ static int gfx_v8_0_ring_test_ib(struct amdgpu_ring *ring) - } - WREG32(scratch, 0xCAFEDEAD); - memset(&ib, 0, sizeof(ib)); -- r = amdgpu_ib_get(ring, NULL, 256, &ib); -+ r = amdgpu_ib_get(adev, NULL, 256, &ib); - if (r) { - DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); - goto err1; -@@ -1171,7 +1171,7 @@ static int gfx_v8_0_do_edc_gpr_workarounds(struct amdgpu_device *adev) - - /* allocate an indirect buffer to put the commands in */ - memset(&ib, 0, sizeof(ib)); -- r = amdgpu_ib_get(ring, NULL, total_size, &ib); -+ r = amdgpu_ib_get(adev, NULL, total_size, &ib); - if (r) { - DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); - return r; -diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c -index fc53db9..32bb31a 100644 ---- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c -+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c -@@ -674,7 +674,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring) - tmp = 0xCAFEDEAD; - adev->wb.wb[index] = cpu_to_le32(tmp); - memset(&ib, 0, sizeof(ib)); -- r = amdgpu_ib_get(ring, NULL, 256, &ib); -+ r = amdgpu_ib_get(adev, NULL, 256, &ib); - if (r) { - DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); - goto err0; -diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c -index 999a169..fe18e85 100644 ---- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c -@@ -825,7 +825,7 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring) - tmp = 0xCAFEDEAD; - adev->wb.wb[index] = cpu_to_le32(tmp); - memset(&ib, 0, sizeof(ib)); -- r = amdgpu_ib_get(ring, NULL, 256, &ib); -+ r = amdgpu_ib_get(adev, NULL, 256, &ib); - if (r) { - DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); - goto err0; --- -2.7.4 - |