]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
gpu: nvgpu: Remove redundant locked variable
authorArto Merilainen <amerilainen@nvidia.com>
Tue, 8 Apr 2014 11:28:10 +0000 (14:28 +0300)
committerTerje Bergstrom <tbergstrom@nvidia.com>
Wed, 9 Apr 2014 04:59:15 +0000 (21:59 -0700)
Queue locked variable holds entirely redundant information about the
queue status and having the variable causes a race between lock() and
unlock() functions. This patch removes the locked variable.

Bug 1495617

Change-Id: I05682bfe7a23acc77c2bfe405938ace7d2b3d081
Signed-off-by: Arto Merilainen <amerilainen@nvidia.com>
Reviewed-on: http://git-master/r/393431
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Prashant Malani <pmalani@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
drivers/gpu/nvgpu/gk20a/pmu_gk20a.h

index c4bfe527c32f3aaacddf8048711c7e80ceba1dd6..e9e0c26f44497fa3604a9b3e8d6ec86995f9be28 100644 (file)
@@ -1270,15 +1270,10 @@ static int pmu_queue_lock(struct pmu_gk20a *pmu,
 
        if (PMU_IS_SW_COMMAND_QUEUE(queue->id)) {
                mutex_lock(&queue->mutex);
-               queue->locked = true;
                return 0;
        }
 
-       err = pmu_mutex_acquire(pmu, queue->mutex_id,
-                       &queue->mutex_lock);
-       if (err == 0)
-               queue->locked = true;
-
+       err = pmu_mutex_acquire(pmu, queue->mutex_id, &queue->mutex_lock);
        return err;
 }
 
@@ -1292,18 +1287,11 @@ static int pmu_queue_unlock(struct pmu_gk20a *pmu,
 
        if (PMU_IS_SW_COMMAND_QUEUE(queue->id)) {
                mutex_unlock(&queue->mutex);
-               queue->locked = false;
                return 0;
        }
 
-       if (queue->locked) {
-               err = pmu_mutex_release(pmu, queue->mutex_id,
-                               &queue->mutex_lock);
-               if (err == 0)
-                       queue->locked = false;
-       }
-
-       return 0;
+       err = pmu_mutex_release(pmu, queue->mutex_id, &queue->mutex_lock);
+       return err;
 }
 
 /* called by pmu_read_message, no lock */
@@ -1327,8 +1315,6 @@ static bool pmu_queue_has_room(struct pmu_gk20a *pmu,
        u32 head, tail, free;
        bool rewind = false;
 
-       BUG_ON(!queue->locked);
-
        size = ALIGN(size, QUEUE_ALIGNMENT);
 
        pmu_queue_head(pmu, queue, &head, QUEUE_GET);
index c1b8ff1f61b882c8465fc1b4f4232075dd524dc4..de519bf67b62d82c41fd1c0242ed14ae2bcda5af 100644 (file)
@@ -862,7 +862,6 @@ struct pmu_queue {
        /* open-flag */
        u32 oflag;
        bool opened; /* opened implies locked */
-       bool locked; /* check free space after setting locked but before setting opened */
 };