static void mali_executor_send_gp_oom_to_user(struct mali_gp_job *job);
static void mali_executor_complete_group(struct mali_group *group,
mali_bool success,
- mali_bool release_jobs,
struct mali_gp_job **gp_job_done,
struct mali_pp_job **pp_job_done);
static void mali_executor_change_state_pp_physical(struct mali_group *group,
if (MALI_FALSE == ret) {
struct mali_gp_job *gp_job = NULL;
- mali_executor_complete_group(gp_group, MALI_FALSE,
- MALI_TRUE, &gp_job, NULL);
+ mali_executor_complete_group(gp_group, MALI_FALSE, &gp_job, NULL);
MALI_DEBUG_ASSERT_POINTER(gp_job);
if (MALI_FALSE == ret) {
struct mali_pp_job *pp_job = NULL;
- mali_executor_complete_group(virtual_group, MALI_FALSE,
- MALI_TRUE, NULL, &pp_job);
+ mali_executor_complete_group(virtual_group, MALI_FALSE, NULL, &pp_job);
if (NULL != pp_job) {
/* PP job completed, make sure it is freed */
if (MALI_FALSE == ret) {
struct mali_pp_job *pp_job = NULL;
- mali_executor_complete_group(group, MALI_FALSE,
- MALI_TRUE, NULL, &pp_job);
+ mali_executor_complete_group(group, MALI_FALSE, NULL, &pp_job);
if (NULL != pp_job) {
/* PP job completed, free it */
success = (int_result != MALI_INTERRUPT_RESULT_ERROR) ?
MALI_TRUE : MALI_FALSE;
- mali_executor_complete_group(group, success,
- MALI_TRUE, &job, NULL);
+ mali_executor_complete_group(group, success, &job, NULL);
mali_executor_unlock();
success = (int_result == MALI_INTERRUPT_RESULT_SUCCESS) ?
MALI_TRUE : MALI_FALSE;
- mali_executor_complete_group(group, success,
- MALI_TRUE, NULL, &job);
+ mali_executor_complete_group(group, success, NULL, &job);
mali_executor_unlock();
mali_mmu_get_rawstat(group->mmu), status));
#endif
- mali_executor_complete_group(group, MALI_FALSE,
- MALI_TRUE, &gp_job, &pp_job);
+ mali_executor_complete_group(group, MALI_FALSE, &gp_job, &pp_job);
mali_executor_unlock();
if (EXEC_STATE_WORKING == gp_group_state) {
struct mali_gp_job *gp_job = NULL;
- mali_executor_complete_group(gp_group, MALI_FALSE,
- MALI_TRUE, &gp_job, NULL);
+ mali_executor_complete_group(gp_group, MALI_FALSE, &gp_job, NULL);
MALI_DEBUG_ASSERT_POINTER(gp_job);
&& mali_group_get_session(virtual_group) == session) {
struct mali_pp_job *pp_job = NULL;
- mali_executor_complete_group(virtual_group, MALI_FALSE,
- MALI_FALSE, NULL, &pp_job);
+ mali_executor_complete_group(virtual_group, MALI_FALSE, NULL, &pp_job);
if (NULL != pp_job) {
/* PP job completed, make sure it is freed */
if (mali_group_get_session(group) == session) {
struct mali_pp_job *pp_job = NULL;
- mali_executor_complete_group(group, MALI_FALSE,
- MALI_FALSE, NULL, &pp_job);
+ mali_executor_complete_group(group, MALI_FALSE, NULL, &pp_job);
if (NULL != pp_job) {
/* PP job completed, make sure it is freed */
/* Correct job is still running */
struct mali_gp_job *job_done = NULL;
- mali_executor_complete_group(gp_group, MALI_FALSE,
- MALI_TRUE, &job_done, NULL);
+ mali_executor_complete_group(gp_group, MALI_FALSE, &job_done, NULL);
/* The same job should have completed */
MALI_DEBUG_ASSERT(job_done == job);
{
#if defined(CONFIG_MALI450)
MALI_DEBUG_ASSERT_EXECUTOR_LOCK_HELD();
- return (EXEC_STATE_INACTIVE == virtual_group_state ||
- EXEC_STATE_IDLE == virtual_group_state) ?
+ return ((EXEC_STATE_INACTIVE == virtual_group_state ||
+ EXEC_STATE_IDLE == virtual_group_state)&&(virtual_group->state != MALI_GROUP_STATE_ACTIVATION_PENDING)) ?
MALI_TRUE : MALI_FALSE;
#else
return MALI_FALSE;
notification);
}
static struct mali_gp_job *mali_executor_complete_gp(struct mali_group *group,
- mali_bool success,
- mali_bool release_jobs)
+ mali_bool success)
{
struct mali_gp_job *job;
/* Core is now ready to go into idle list */
gp_group_state = EXEC_STATE_IDLE;
- if (release_jobs) {
- /* This will potentially queue more GP and PP jobs */
- mali_timeline_tracker_release(&job->tracker);
+ /* This will potentially queue more GP and PP jobs */
+ mali_timeline_tracker_release(&job->tracker);
- /* Signal PP job */
- mali_gp_job_signal_pp_tracker(job, success);
- }
+ /* Signal PP job */
+ mali_gp_job_signal_pp_tracker(job, success);
return job;
}
static struct mali_pp_job *mali_executor_complete_pp(struct mali_group *group,
- mali_bool success,
- mali_bool release_jobs)
+ mali_bool success)
{
struct mali_pp_job *job;
u32 sub_job;
mali_pp_job_mark_sub_job_completed(job, success);
job_is_done = mali_pp_job_is_complete(job);
- if (job_is_done && release_jobs) {
+ if (job_is_done) {
/* This will potentially queue more GP and PP jobs */
mali_timeline_tracker_release(&job->tracker);
}
static void mali_executor_complete_group(struct mali_group *group,
mali_bool success,
- mali_bool release_jobs,
struct mali_gp_job **gp_job_done,
struct mali_pp_job **pp_job_done)
{
mali_bool pp_job_is_done = MALI_TRUE;
if (NULL != gp_core) {
- gp_job = mali_executor_complete_gp(group,
- success, release_jobs);
+ gp_job = mali_executor_complete_gp(group, success);
} else {
MALI_DEBUG_ASSERT_POINTER(pp_core);
MALI_IGNORE(pp_core);
- pp_job = mali_executor_complete_pp(group,
- success, release_jobs);
+ pp_job = mali_executor_complete_pp(group, success);
pp_job_is_done = mali_pp_job_is_complete(pp_job);
}