summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThierry Reding <treding@nvidia.com>2013-11-08 13:25:52 +0100
committerThierry Reding <treding@nvidia.com>2014-01-10 10:15:23 +0100
commit8733f544fd385869fe79b1f658fedf393ae9d798 (patch)
treec4b6bcb91f94777fb39ad6080c959532f02ad3ec
parent4e04e43faef1e601a4e5386ea096ae2b71267bce (diff)
WIP: gpu: host1x: Replace a variable length array
Explicitly allocate the array with the correct length instead of using a variable length array. The variable length array is probably safe in this case, but sparse complains about it. Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/gpu/host1x/job.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/gpu/host1x/job.c b/drivers/gpu/host1x/job.c
index 1146e3bba6e1..85be2f7b95f0 100644
--- a/drivers/gpu/host1x/job.c
+++ b/drivers/gpu/host1x/job.c
@@ -507,12 +507,16 @@ static inline int copy_gathers(struct host1x_job *job, struct device *dev)
int host1x_job_pin(struct host1x_job *job, struct device *dev)
{
- int err;
- unsigned int i, j;
struct host1x *host = dev_get_drvdata(dev->parent);
- DECLARE_BITMAP(waitchk_mask, host1x_syncpt_nb_pts(host));
+ unsigned int num = host1x_syncpt_nb_pts(host);
+ unsigned long *waitchk_mask;
+ unsigned int i, j;
+ int err;
+
+ waitchk_mask = kcalloc(sizeof(*waitchk_mask), num, GFP_KERNEL);
+ if (!waitchk_mask)
+ return -ENOMEM;
- bitmap_zero(waitchk_mask, host1x_syncpt_nb_pts(host));
for (i = 0; i < job->num_waitchk; i++) {
u32 syncpt_id = job->waitchk[i].syncpt_id;
if (syncpt_id < host1x_syncpt_nb_pts(host))
@@ -523,6 +527,8 @@ int host1x_job_pin(struct host1x_job *job, struct device *dev)
for_each_set_bit(i, waitchk_mask, host1x_syncpt_nb_pts(host))
host1x_syncpt_load(host->syncpt + i);
+ kfree(waitchk_mask);
+
/* pin memory */
err = pin_job(job);
if (!err)