void mali_pp_scheduler_terminate(void) { struct mali_group *group, *temp; /* Delete all groups owned by scheduler */ if (NULL != virtual_group) { mali_group_delete(virtual_group); } MALI_DEBUG_ASSERT(_mali_osk_list_empty(&group_list_working)); _MALI_OSK_LIST_FOREACHENTRY(group, temp, &group_list_idle, struct mali_group, pp_scheduler_list) { mali_group_delete(group); } #if defined(MALI_PP_SCHEDULER_USE_DEFERRED_JOB_DELETE) _mali_osk_lock_term(pp_scheduler_job_delete_lock); _mali_osk_wq_delete_work(pp_scheduler_wq_job_delete); #endif _mali_osk_wq_delete_work(pp_scheduler_wq_schedule); _mali_osk_wait_queue_term(pp_scheduler_working_wait_queue); _mali_osk_lock_term(pp_scheduler_lock); }
void mali_cluster_delete(struct mali_cluster *cluster) { u32 i; MALI_DEBUG_ASSERT_POINTER(cluster); /* Free all the resources we own */ for (i = 0; i < cluster->number_of_groups; i++) { mali_group_delete(cluster->groups[i]); } if (NULL != cluster->l2) { mali_l2_cache_delete(cluster->l2); } for (i = 0; i < mali_global_num_clusters; i++) { if (mali_global_clusters[i] == cluster) { mali_global_clusters[i] = NULL; mali_global_num_clusters--; break; } } _mali_osk_free(cluster); }
void mali_gp_scheduler_terminate(void) { MALI_DEBUG_ASSERT(MALI_GP_SLOT_STATE_IDLE == slot.state); MALI_DEBUG_ASSERT_POINTER(slot.group); mali_group_delete(slot.group); _mali_osk_wait_queue_term(gp_scheduler_working_wait_queue); _mali_osk_lock_term(gp_scheduler_lock); }
void mali_gp_scheduler_terminate(void) { MALI_DEBUG_ASSERT(MALI_GP_SLOT_STATE_IDLE == slot.state || MALI_GP_SLOT_STATE_DISABLED == slot.state); MALI_DEBUG_ASSERT_POINTER(slot.group); mali_group_delete(slot.group); _mali_osk_wait_queue_term(gp_scheduler_working_wait_queue); #if defined(MALI_UPPER_HALF_SCHEDULING) _mali_osk_spinlock_irq_term(gp_scheduler_lock); #else _mali_osk_spinlock_term(gp_scheduler_lock); #endif /* defined(MALI_UPPER_HALF_SCHEDULING) */ }