summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 8db885e3..fd28dec1 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -1688,17 +1688,14 @@ static int gk20a_channel_add_job(struct channel_gk20a *c,
1688 if (!skip_buffer_refcounting) { 1688 if (!skip_buffer_refcounting) {
1689 err = gk20a_vm_get_buffers(vm, &mapped_buffers, 1689 err = gk20a_vm_get_buffers(vm, &mapped_buffers,
1690 &num_mapped_buffers); 1690 &num_mapped_buffers);
1691 if (err) { 1691 if (err)
1692 gk20a_vm_put(vm); 1692 goto err_put_vm;
1693 return err;
1694 }
1695 } 1693 }
1696 1694
1697 job = kzalloc(sizeof(*job), GFP_KERNEL); 1695 job = kzalloc(sizeof(*job), GFP_KERNEL);
1698 if (!job) { 1696 if (!job) {
1699 gk20a_vm_put_buffers(vm, mapped_buffers, num_mapped_buffers); 1697 err = -ENOMEM;
1700 gk20a_vm_put(vm); 1698 goto err_put_buffers;
1701 return -ENOMEM;
1702 } 1699 }
1703 1700
1704 /* put() is done in gk20a_channel_update() when the job is done */ 1701 /* put() is done in gk20a_channel_update() when the job is done */
@@ -1718,10 +1715,20 @@ static int gk20a_channel_add_job(struct channel_gk20a *c,
1718 list_add_tail(&job->list, &c->jobs); 1715 list_add_tail(&job->list, &c->jobs);
1719 mutex_unlock(&c->jobs_lock); 1716 mutex_unlock(&c->jobs_lock);
1720 } else { 1717 } else {
1721 return -ETIMEDOUT; 1718 err = -ETIMEDOUT;
1719 goto err_free_job;
1722 } 1720 }
1723 1721
1724 return 0; 1722 return 0;
1723
1724err_free_job:
1725 kfree(job);
1726err_put_buffers:
1727 gk20a_vm_put_buffers(vm, mapped_buffers, num_mapped_buffers);
1728err_put_vm:
1729 gk20a_vm_put(vm);
1730
1731 return err;
1725} 1732}
1726 1733
1727void gk20a_channel_update(struct channel_gk20a *c, int nr_completed) 1734void gk20a_channel_update(struct channel_gk20a *c, int nr_completed)