void mali_gp_scheduler_abort_session(struct mali_session_data *session) { struct mali_gp_job *job, *tmp; mali_gp_scheduler_lock(); MALI_DEBUG_PRINT(3, ("Mali GP scheduler: Aborting all jobs from session 0x%08x\n", session)); /* Check queue for jobs and remove */ _MALI_OSK_LIST_FOREACHENTRY(job, tmp, &job_queue, struct mali_gp_job, list) { if (mali_gp_job_get_session(job) == session) { MALI_DEBUG_PRINT(4, ("Mali GP scheduler: Removing GP job 0x%08x from queue\n", job)); _mali_osk_list_del(&(job->list)); mali_gp_job_delete(job); } } mali_gp_scheduler_unlock(); /* Abort running jobs from this session. It is safe to do this outside * the scheduler lock as there is only one GP core, and the queue has * already been emptied, as long as there are no new jobs coming in * from user space. */ mali_group_abort_session(slot.group, session); }
void mali_pp_scheduler_abort_session(struct mali_session_data *session) { struct mali_pp_job *job, *tmp; int i; mali_pp_scheduler_lock(); MALI_DEBUG_PRINT(3, ("Mali PP scheduler: Aborting all jobs from session 0x%08x\n", session)); /* Check queue for jobs and remove */ _MALI_OSK_LIST_FOREACHENTRY(job, tmp, &job_queue, struct mali_pp_job, list) { if (mali_pp_job_get_session(job) == session) { _mali_osk_list_del(&(job->list)); if ( mali_pp_job_is_currently_rendering_and_if_so_abort_new_starts(job) ) { /* The job is in the render pipeline, we can not delete it yet. */ /* It will be deleted in the mali_group_abort_session() call below */ MALI_DEBUG_PRINT(4, ("Mali PP scheduler: Keeping partially started PP job 0x%08x in queue\n", job)); continue; } MALI_DEBUG_PRINT(4, ("Mali PP scheduler: Removing PP job 0x%08x from queue\n", job)); mali_pp_job_delete(job); } } mali_pp_scheduler_unlock(); /* Abort running jobs from this session */ for (i = 0; i < num_slots; i++) { struct mali_group *group = slots[i].group; MALI_DEBUG_PRINT(5, ("PP sched abort: Looking at group 0x%08x\n", group)); if (MALI_PP_SLOT_STATE_WORKING == slots[i].state) { MALI_DEBUG_PRINT(4, ("Mali PP scheduler: Aborting session 0x%08x from group 0x%08x\n", session, group)); mali_group_abort_session(group, session); } } }
void mali_gp_scheduler_abort_session(struct mali_session_data *session) { struct mali_gp_job *job, *tmp; mali_gp_scheduler_lock(); MALI_DEBUG_PRINT(3, ("Mali GP scheduler: Aborting all jobs from session 0x%08x\n", session)); _MALI_OSK_LIST_FOREACHENTRY(job, tmp, &job_queue, struct mali_gp_job, list) { if (mali_gp_job_get_session(job) == session) { MALI_DEBUG_PRINT(4, ("Mali GP scheduler: Removing GP job 0x%08x from queue\n", job)); _mali_osk_list_del(&(job->list)); mali_gp_job_delete(job); } } mali_gp_scheduler_unlock(); mali_group_abort_session(slot.group, session); }