Lines Matching defs:job
249 struct hl_cs_job *job = container_of(ref, struct hl_cs_job, refcount);
251 kfree(job);
254 static void hl_cs_job_put(struct hl_cs_job *job)
256 kref_put(&job->refcount, cs_job_do_release);
281 static bool is_cb_patched(struct hl_device *hdev, struct hl_cs_job *job)
284 return (job->queue_type == QUEUE_TYPE_EXT);
291 * @job : pointer to the job that holds the command submission info
298 static int cs_parser(struct hl_fpriv *hpriv, struct hl_cs_job *job)
304 parser.ctx_id = job->cs->ctx->asid;
305 parser.cs_sequence = job->cs->sequence;
306 parser.job_id = job->id;
308 parser.hw_queue_id = job->hw_queue_id;
309 parser.job_userptr_list = &job->userptr_list;
311 parser.user_cb = job->user_cb;
312 parser.user_cb_size = job->user_cb_size;
313 parser.queue_type = job->queue_type;
314 parser.is_kernel_allocated_cb = job->is_kernel_allocated_cb;
315 job->patched_cb = NULL;
316 parser.completion = cs_needs_completion(job->cs);
320 if (is_cb_patched(hdev, job)) {
322 job->patched_cb = parser.patched_cb;
323 job->job_cb_size = parser.patched_cb_size;
324 job->contains_dma_pkt = parser.contains_dma_pkt;
325 atomic_inc(&job->patched_cb->cs_cnt);
333 atomic_dec(&job->user_cb->cs_cnt);
334 hl_cb_put(job->user_cb);
335 job->user_cb = NULL;
337 job->job_cb_size = job->user_cb_size;
343 static void hl_complete_job(struct hl_device *hdev, struct hl_cs_job *job)
345 struct hl_cs *cs = job->cs;
347 if (is_cb_patched(hdev, job)) {
348 hl_userptr_delete_list(hdev, &job->userptr_list);
354 if (job->patched_cb) {
355 atomic_dec(&job->patched_cb->cs_cnt);
356 hl_cb_put(job->patched_cb);
365 if (job->is_kernel_allocated_cb &&
366 (job->queue_type == QUEUE_TYPE_HW || job->queue_type == QUEUE_TYPE_INT)) {
367 atomic_dec(&job->user_cb->cs_cnt);
368 hl_cb_put(job->user_cb);
376 list_del(&job->cs_node);
379 hl_debugfs_remove_job(hdev, job);
394 (job->queue_type == QUEUE_TYPE_EXT || job->queue_type == QUEUE_TYPE_HW)) {
397 * so no need to extract it from job
400 cs->completion_timestamp = job->timestamp;
405 hl_cs_job_put(job);
680 struct hl_cs_job *job, *tmp;
694 list_for_each_entry_safe(job, tmp, &cs->job_list, cs_node)
695 hl_complete_job(hdev, job);
1010 struct hl_cs_job *job, *tmp;
1014 list_for_each_entry_safe(job, tmp, &cs->job_list, cs_node)
1015 hl_complete_job(hdev, job);
1147 struct hl_cs_job *job = container_of(work, struct hl_cs_job,
1149 struct hl_cs *cs = job->cs;
1152 /* job is no longer needed */
1153 hl_complete_job(hdev, job);
1160 struct hl_cs_job *job, *tmp;
1162 list_for_each_entry_safe(job, tmp, &cs->job_list, cs_node)
1163 hl_complete_job(hdev, job);
1282 struct hl_cs_job *job;
1284 job = kzalloc(sizeof(*job), GFP_ATOMIC);
1285 if (!job)
1286 job = kzalloc(sizeof(*job), GFP_KERNEL);
1288 if (!job)
1291 kref_init(&job->refcount);
1292 job->queue_type = queue_type;
1293 job->is_kernel_allocated_cb = is_kernel_allocated_cb;
1295 if (is_cb_patched(hdev, job))
1296 INIT_LIST_HEAD(&job->userptr_list);
1298 if (job->queue_type == QUEUE_TYPE_EXT)
1299 INIT_WORK(&job->finish_work, job_wq_completion);
1301 return job;
1479 struct hl_cs_job *job;
1566 job = hl_cs_allocate_job(hdev, queue_type,
1568 if (!job) {
1571 dev_err(hdev->dev, "Failed to allocate a new job\n");
1579 job->id = i + 1;
1580 job->cs = cs;
1581 job->user_cb = cb;
1582 job->user_cb_size = chunk->cb_size;
1583 job->hw_queue_id = chunk->queue_index;
1585 cs->jobs_in_queue_cnt[job->hw_queue_id]++;
1588 list_add_tail(&job->cs_node, &cs->job_list);
1597 (job->queue_type == QUEUE_TYPE_EXT ||
1598 job->queue_type == QUEUE_TYPE_HW))
1601 hl_debugfs_add_job(hdev, job);
1603 rc = cs_parser(hpriv, job);
1609 cs->ctx->asid, cs->sequence, job->id, rc);
1928 struct hl_cs_job *job;
1934 job = hl_cs_allocate_job(hdev, q_type, true);
1935 if (!job) {
1938 dev_err(hdev->dev, "Failed to allocate a new job\n");
1951 kfree(job);
1955 job->id = 0;
1956 job->cs = cs;
1957 job->user_cb = cb;
1958 atomic_inc(&job->user_cb->cs_cnt);
1959 job->user_cb_size = cb_size;
1960 job->hw_queue_id = q_idx;
1964 job->encaps_sig_wait_offset = encaps_signal_offset;
1971 job->patched_cb = job->user_cb;
1972 job->job_cb_size = job->user_cb_size;
1978 cs->jobs_in_queue_cnt[job->hw_queue_id]++;
1981 list_add_tail(&job->cs_node, &cs->job_list);
1983 hl_debugfs_add_job(hdev, job);