Loading drivers/gpu/msm/adreno_debugfs.c +2 −2 Original line number Diff line number Diff line Loading @@ -196,12 +196,12 @@ static int ctx_print(struct seq_file *s, void *unused) seq_puts(s, "cmdqueue:\n"); mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); for (i = drawctxt->cmdqueue_head; i != drawctxt->cmdqueue_tail; i = CMDQUEUE_NEXT(i, ADRENO_CONTEXT_CMDQUEUE_SIZE)) cmdbatch_print(s, drawctxt->cmdqueue[i]); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); seq_puts(s, "events:\n"); spin_lock(&drawctxt->base.events.lock); Loading drivers/gpu/msm/adreno_dispatch.c +17 −17 Original line number Diff line number Diff line Loading @@ -364,9 +364,9 @@ static struct kgsl_cmdbatch *adreno_dispatcher_get_cmdbatch( { struct kgsl_cmdbatch *cmdbatch; mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); cmdbatch = _get_cmdbatch(drawctxt); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return cmdbatch; } Loading @@ -385,11 +385,11 @@ static inline int adreno_dispatcher_requeue_cmdbatch( struct adreno_context *drawctxt, struct kgsl_cmdbatch *cmdbatch) { unsigned int prev; mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); if (kgsl_context_detached(&drawctxt->base) || kgsl_context_invalid(&drawctxt->base)) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* get rid of this cmdbatch since the context is bad */ kgsl_cmdbatch_destroy(cmdbatch); return -EINVAL; Loading @@ -411,7 +411,7 @@ static inline int adreno_dispatcher_requeue_cmdbatch( /* Reset the command queue head to reflect the newly requeued change */ drawctxt->cmdqueue_head = prev; mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return 0; } Loading Loading @@ -792,7 +792,7 @@ static int _check_context_queue(struct adreno_context *drawctxt) { int ret; mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); /* * Wake up if there is room in the context or if the whole thing got Loading @@ -804,7 +804,7 @@ static int _check_context_queue(struct adreno_context *drawctxt) else ret = drawctxt->queued < _context_cmdqueue_size ? 1 : 0; mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return ret; } Loading Loading @@ -861,10 +861,10 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, ADRENO_CMDBATCH_DISPATCH_CMDQUEUE(cmdbatch); int ret; mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); if (kgsl_context_detached(&drawctxt->base)) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return -EINVAL; } Loading Loading @@ -921,17 +921,17 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, while (drawctxt->queued >= _context_cmdqueue_size) { trace_adreno_drawctxt_sleep(drawctxt); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); ret = wait_event_interruptible_timeout(drawctxt->wq, _check_context_queue(drawctxt), msecs_to_jiffies(_context_queue_wait)); mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); trace_adreno_drawctxt_wake(drawctxt); if (ret <= 0) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return (ret == 0) ? -ETIMEDOUT : (int) ret; } } Loading @@ -941,17 +941,17 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, */ if (kgsl_context_invalid(&drawctxt->base)) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return -EDEADLK; } if (kgsl_context_detached(&drawctxt->base)) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return -EINVAL; } ret = get_timestamp(drawctxt, cmdbatch, timestamp); if (ret) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return ret; } Loading @@ -970,7 +970,7 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, drawctxt->queued); _retire_marker(cmdbatch); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return 0; } Loading Loading @@ -1025,7 +1025,7 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, _track_context(dispatch_q, drawctxt->base.id); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* Add the context to the dispatcher pending list */ dispatcher_queue_context(adreno_dev, drawctxt); Loading drivers/gpu/msm/adreno_drawctxt.c +9 −16 Original line number Diff line number Diff line Loading @@ -62,12 +62,12 @@ void adreno_drawctxt_dump(struct kgsl_device *device, struct adreno_context *drawctxt = ADRENO_CONTEXT(context); int index, pos; char buf[120]; mutex_lock(&drawctxt->mutex); kgsl_readtimestamp(device, context, KGSL_TIMESTAMP_QUEUED, &queue); kgsl_readtimestamp(device, context, KGSL_TIMESTAMP_CONSUMED, &start); kgsl_readtimestamp(device, context, KGSL_TIMESTAMP_RETIRED, &retire); spin_lock(&drawctxt->lock); dev_err(device->dev, " context[%d]: queue=%d, submit=%d, start=%d, retire=%d\n", context->id, queue, drawctxt->submitted_timestamp, Loading Loading @@ -108,7 +108,7 @@ void adreno_drawctxt_dump(struct kgsl_device *device, dev_err(device->dev, " context[%d]: submit times: %s\n", context->id, buf); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); } /** Loading Loading @@ -233,11 +233,9 @@ void adreno_drawctxt_invalidate(struct kgsl_device *device, trace_adreno_drawctxt_invalidate(drawctxt); spin_lock(&drawctxt->lock); set_bit(KGSL_CONTEXT_PRIV_INVALID, &context->priv); /* Clear the pending queue */ mutex_lock(&drawctxt->mutex); /* * set the timestamp to the last value since the context is invalidated * and we want the pending events for this context to go away Loading @@ -258,18 +256,13 @@ void adreno_drawctxt_invalidate(struct kgsl_device *device, drawctxt->cmdqueue_head = (drawctxt->cmdqueue_head + 1) % ADRENO_CONTEXT_CMDQUEUE_SIZE; mutex_unlock(&drawctxt->mutex); mutex_lock(&device->mutex); kgsl_cancel_events_timestamp(device, &context->events, cmdbatch->timestamp); mutex_unlock(&device->mutex); kgsl_cmdbatch_destroy(cmdbatch); mutex_lock(&drawctxt->mutex); } mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* Make sure all "retired" events are processed */ kgsl_process_event_group(device, &context->events); Loading Loading @@ -365,7 +358,7 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, drawctxt->base.flags |= KGSL_CONTEXT_PER_CONTEXT_TS; drawctxt->type = (drawctxt->base.flags & KGSL_CONTEXT_TYPE_MASK) >> KGSL_CONTEXT_TYPE_SHIFT; mutex_init(&drawctxt->mutex); spin_lock_init(&drawctxt->lock); init_waitqueue_head(&drawctxt->wq); init_waitqueue_head(&drawctxt->waiting); Loading Loading @@ -434,7 +427,7 @@ int adreno_drawctxt_detach(struct kgsl_context *context) if (rb->drawctxt_active == drawctxt) adreno_drawctxt_switch(adreno_dev, rb, NULL, 0); mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); while (drawctxt->cmdqueue_head != drawctxt->cmdqueue_tail) { struct kgsl_cmdbatch *cmdbatch = Loading @@ -443,7 +436,7 @@ int adreno_drawctxt_detach(struct kgsl_context *context) drawctxt->cmdqueue_head = (drawctxt->cmdqueue_head + 1) % ADRENO_CONTEXT_CMDQUEUE_SIZE; mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* * If the context is deteached while we are waiting for Loading @@ -459,10 +452,10 @@ int adreno_drawctxt_detach(struct kgsl_context *context) */ kgsl_cmdbatch_destroy(cmdbatch); mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); } mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* * internal_timestamp is set in adreno_ringbuffer_addcmds, * which holds the device mutex. The entire context destroy Loading drivers/gpu/msm/adreno_drawctxt.h +1 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ struct adreno_context { unsigned int timestamp; unsigned int internal_timestamp; unsigned int type; struct mutex mutex; spinlock_t lock; /* Dispatcher */ struct kgsl_cmdbatch *cmdqueue[ADRENO_CONTEXT_CMDQUEUE_SIZE]; Loading Loading
drivers/gpu/msm/adreno_debugfs.c +2 −2 Original line number Diff line number Diff line Loading @@ -196,12 +196,12 @@ static int ctx_print(struct seq_file *s, void *unused) seq_puts(s, "cmdqueue:\n"); mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); for (i = drawctxt->cmdqueue_head; i != drawctxt->cmdqueue_tail; i = CMDQUEUE_NEXT(i, ADRENO_CONTEXT_CMDQUEUE_SIZE)) cmdbatch_print(s, drawctxt->cmdqueue[i]); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); seq_puts(s, "events:\n"); spin_lock(&drawctxt->base.events.lock); Loading
drivers/gpu/msm/adreno_dispatch.c +17 −17 Original line number Diff line number Diff line Loading @@ -364,9 +364,9 @@ static struct kgsl_cmdbatch *adreno_dispatcher_get_cmdbatch( { struct kgsl_cmdbatch *cmdbatch; mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); cmdbatch = _get_cmdbatch(drawctxt); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return cmdbatch; } Loading @@ -385,11 +385,11 @@ static inline int adreno_dispatcher_requeue_cmdbatch( struct adreno_context *drawctxt, struct kgsl_cmdbatch *cmdbatch) { unsigned int prev; mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); if (kgsl_context_detached(&drawctxt->base) || kgsl_context_invalid(&drawctxt->base)) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* get rid of this cmdbatch since the context is bad */ kgsl_cmdbatch_destroy(cmdbatch); return -EINVAL; Loading @@ -411,7 +411,7 @@ static inline int adreno_dispatcher_requeue_cmdbatch( /* Reset the command queue head to reflect the newly requeued change */ drawctxt->cmdqueue_head = prev; mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return 0; } Loading Loading @@ -792,7 +792,7 @@ static int _check_context_queue(struct adreno_context *drawctxt) { int ret; mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); /* * Wake up if there is room in the context or if the whole thing got Loading @@ -804,7 +804,7 @@ static int _check_context_queue(struct adreno_context *drawctxt) else ret = drawctxt->queued < _context_cmdqueue_size ? 1 : 0; mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return ret; } Loading Loading @@ -861,10 +861,10 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, ADRENO_CMDBATCH_DISPATCH_CMDQUEUE(cmdbatch); int ret; mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); if (kgsl_context_detached(&drawctxt->base)) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return -EINVAL; } Loading Loading @@ -921,17 +921,17 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, while (drawctxt->queued >= _context_cmdqueue_size) { trace_adreno_drawctxt_sleep(drawctxt); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); ret = wait_event_interruptible_timeout(drawctxt->wq, _check_context_queue(drawctxt), msecs_to_jiffies(_context_queue_wait)); mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); trace_adreno_drawctxt_wake(drawctxt); if (ret <= 0) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return (ret == 0) ? -ETIMEDOUT : (int) ret; } } Loading @@ -941,17 +941,17 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, */ if (kgsl_context_invalid(&drawctxt->base)) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return -EDEADLK; } if (kgsl_context_detached(&drawctxt->base)) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return -EINVAL; } ret = get_timestamp(drawctxt, cmdbatch, timestamp); if (ret) { mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return ret; } Loading @@ -970,7 +970,7 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, drawctxt->queued); _retire_marker(cmdbatch); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); return 0; } Loading Loading @@ -1025,7 +1025,7 @@ int adreno_dispatcher_queue_cmd(struct adreno_device *adreno_dev, _track_context(dispatch_q, drawctxt->base.id); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* Add the context to the dispatcher pending list */ dispatcher_queue_context(adreno_dev, drawctxt); Loading
drivers/gpu/msm/adreno_drawctxt.c +9 −16 Original line number Diff line number Diff line Loading @@ -62,12 +62,12 @@ void adreno_drawctxt_dump(struct kgsl_device *device, struct adreno_context *drawctxt = ADRENO_CONTEXT(context); int index, pos; char buf[120]; mutex_lock(&drawctxt->mutex); kgsl_readtimestamp(device, context, KGSL_TIMESTAMP_QUEUED, &queue); kgsl_readtimestamp(device, context, KGSL_TIMESTAMP_CONSUMED, &start); kgsl_readtimestamp(device, context, KGSL_TIMESTAMP_RETIRED, &retire); spin_lock(&drawctxt->lock); dev_err(device->dev, " context[%d]: queue=%d, submit=%d, start=%d, retire=%d\n", context->id, queue, drawctxt->submitted_timestamp, Loading Loading @@ -108,7 +108,7 @@ void adreno_drawctxt_dump(struct kgsl_device *device, dev_err(device->dev, " context[%d]: submit times: %s\n", context->id, buf); mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); } /** Loading Loading @@ -233,11 +233,9 @@ void adreno_drawctxt_invalidate(struct kgsl_device *device, trace_adreno_drawctxt_invalidate(drawctxt); spin_lock(&drawctxt->lock); set_bit(KGSL_CONTEXT_PRIV_INVALID, &context->priv); /* Clear the pending queue */ mutex_lock(&drawctxt->mutex); /* * set the timestamp to the last value since the context is invalidated * and we want the pending events for this context to go away Loading @@ -258,18 +256,13 @@ void adreno_drawctxt_invalidate(struct kgsl_device *device, drawctxt->cmdqueue_head = (drawctxt->cmdqueue_head + 1) % ADRENO_CONTEXT_CMDQUEUE_SIZE; mutex_unlock(&drawctxt->mutex); mutex_lock(&device->mutex); kgsl_cancel_events_timestamp(device, &context->events, cmdbatch->timestamp); mutex_unlock(&device->mutex); kgsl_cmdbatch_destroy(cmdbatch); mutex_lock(&drawctxt->mutex); } mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* Make sure all "retired" events are processed */ kgsl_process_event_group(device, &context->events); Loading Loading @@ -365,7 +358,7 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, drawctxt->base.flags |= KGSL_CONTEXT_PER_CONTEXT_TS; drawctxt->type = (drawctxt->base.flags & KGSL_CONTEXT_TYPE_MASK) >> KGSL_CONTEXT_TYPE_SHIFT; mutex_init(&drawctxt->mutex); spin_lock_init(&drawctxt->lock); init_waitqueue_head(&drawctxt->wq); init_waitqueue_head(&drawctxt->waiting); Loading Loading @@ -434,7 +427,7 @@ int adreno_drawctxt_detach(struct kgsl_context *context) if (rb->drawctxt_active == drawctxt) adreno_drawctxt_switch(adreno_dev, rb, NULL, 0); mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); while (drawctxt->cmdqueue_head != drawctxt->cmdqueue_tail) { struct kgsl_cmdbatch *cmdbatch = Loading @@ -443,7 +436,7 @@ int adreno_drawctxt_detach(struct kgsl_context *context) drawctxt->cmdqueue_head = (drawctxt->cmdqueue_head + 1) % ADRENO_CONTEXT_CMDQUEUE_SIZE; mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* * If the context is deteached while we are waiting for Loading @@ -459,10 +452,10 @@ int adreno_drawctxt_detach(struct kgsl_context *context) */ kgsl_cmdbatch_destroy(cmdbatch); mutex_lock(&drawctxt->mutex); spin_lock(&drawctxt->lock); } mutex_unlock(&drawctxt->mutex); spin_unlock(&drawctxt->lock); /* * internal_timestamp is set in adreno_ringbuffer_addcmds, * which holds the device mutex. The entire context destroy Loading
drivers/gpu/msm/adreno_drawctxt.h +1 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ struct adreno_context { unsigned int timestamp; unsigned int internal_timestamp; unsigned int type; struct mutex mutex; spinlock_t lock; /* Dispatcher */ struct kgsl_cmdbatch *cmdqueue[ADRENO_CONTEXT_CMDQUEUE_SIZE]; Loading