On 02.01.2013 09:40, Mark Zhang wrote:
On 12/21/2012 07:39 PM, Terje Bergstrom wrote:
Add support for host1x client modules, and host1x channels to submit work to the clients. The work is submitted in GEM CMA buffers, so this patch adds support for them.
Signed-off-by: Terje Bergstrom tbergstrom@nvidia.com
[...]
+/*
- Begin a cdma submit
- */
+int host1x_cdma_begin(struct host1x_cdma *cdma, struct host1x_job *job) +{
- struct host1x *host1x = cdma_to_host1x(cdma);
- mutex_lock(&cdma->lock);
- if (job->timeout) {
/* init state on first submit with timeout value */
if (!cdma->timeout.initialized) {
int err;
err = host1x->cdma_op.timeout_init(cdma,
job->syncpt_id);
if (err) {
mutex_unlock(&cdma->lock);
return err;
}
}
- }
- if (!cdma->running)
host1x->cdma_op.start(cdma);
- cdma->slots_free = 0;
- cdma->slots_used = 0;
- cdma->first_get = host1x->cdma_pb_op.putptr(&cdma->push_buffer);
- trace_host1x_cdma_begin(job->ch->dev->name);
Seems missing "mutex_unlock(&cdma->lock);" here.
That's intentional. Writing a job to channel is atomic, so lock is taken from host1x_cdma_begin() until host1x_cdma_end().
Terje