Lines Matching full:job

28 		"%s: job submission failed: " fmt "\n", \
303 static int submit_get_syncpt(struct tegra_drm_context *context, struct host1x_job *job, in submit_get_syncpt() argument
313 /* Syncpt ref will be dropped on job release */ in submit_get_syncpt()
320 job->syncpt = host1x_syncpt_get(sp); in submit_get_syncpt()
321 job->syncpt_incrs = args->syncpt.increments; in submit_get_syncpt()
326 static int submit_job_add_gather(struct host1x_job *job, struct tegra_drm_context *context, in submit_job_add_gather() argument
346 SUBMIT_ERR(context, "too many total words in job"); in submit_job_add_gather()
357 SUBMIT_ERR(context, "job was rejected by firewall"); in submit_job_add_gather()
361 host1x_job_add_gather(job, &bo->base, cmd->words, *offset * 4); in submit_job_add_gather()
375 struct host1x_job *job; in submit_create_job() local
388 job = host1x_job_alloc(context->channel, args->num_cmds, 0, true); in submit_create_job()
389 if (!job) { in submit_create_job()
390 SUBMIT_ERR(context, "failed to allocate memory for job"); in submit_create_job()
391 job = ERR_PTR(-ENOMEM); in submit_create_job()
395 err = submit_get_syncpt(context, job, syncpoints, args); in submit_create_job()
399 job->client = &context->client->base; in submit_create_job()
400 job->class = context->client->base.class; in submit_create_job()
401 job->serialize = true; in submit_create_job()
413 err = submit_job_add_gather(job, context, &cmd->gather_uptr, bo, in submit_create_job()
424 host1x_job_add_wait(job, cmd->wait_syncpt.id, cmd->wait_syncpt.value, in submit_create_job()
434 SUBMIT_ERR(context, "syncpoint ID in CMD_WAIT_SYNCPT_RELATIVE is not used by the job"); in submit_create_job()
439 host1x_job_add_wait(job, cmd->wait_syncpt.id, cmd->wait_syncpt.value, in submit_create_job()
449 SUBMIT_ERR(context, "job must have at least one gather"); in submit_create_job()
457 host1x_job_put(job); in submit_create_job()
458 job = ERR_PTR(err); in submit_create_job()
463 return job; in submit_create_job()
466 static void release_job(struct host1x_job *job) in release_job() argument
468 struct tegra_drm_client *client = container_of(job->client, struct tegra_drm_client, base); in release_job()
469 struct tegra_drm_submit_data *job_data = job->user_data; in release_job()
490 struct host1x_job *job; in tegra_drm_ioctl_channel_submit() local
538 SUBMIT_ERR(context, "failed to allocate memory for job data"); in tegra_drm_ioctl_channel_submit()
549 job = submit_create_job(context, bo, args, job_data, &fpriv->syncpoints); in tegra_drm_ioctl_channel_submit()
550 if (IS_ERR(job)) { in tegra_drm_ioctl_channel_submit()
551 err = PTR_ERR(job); in tegra_drm_ioctl_channel_submit()
556 err = host1x_job_pin(job, context->client->base.dev); in tegra_drm_ioctl_channel_submit()
558 SUBMIT_ERR(context, "failed to pin job: %d", err); in tegra_drm_ioctl_channel_submit()
571 job->user_data = job_data; in tegra_drm_ioctl_channel_submit()
572 job->release = release_job; in tegra_drm_ioctl_channel_submit()
573 job->timeout = 10000; in tegra_drm_ioctl_channel_submit()
576 * job_data is now part of job reference counting, so don't release in tegra_drm_ioctl_channel_submit()
581 /* Submit job to hardware. */ in tegra_drm_ioctl_channel_submit()
582 err = host1x_job_submit(job); in tegra_drm_ioctl_channel_submit()
584 SUBMIT_ERR(context, "host1x job submission failed: %d", err); in tegra_drm_ioctl_channel_submit()
589 args->syncpt.value = job->syncpt_end; in tegra_drm_ioctl_channel_submit()
592 struct dma_fence *fence = host1x_fence_create(job->syncpt, job->syncpt_end); in tegra_drm_ioctl_channel_submit()
604 host1x_job_unpin(job); in tegra_drm_ioctl_channel_submit()
606 host1x_job_put(job); in tegra_drm_ioctl_channel_submit()