power: perform_hint_action: return an error code
So far the caller never knows if setting the hint actually worked. This leads to a potential disconnect between the actual setting and the UI because set_power_profile simply assumes perform_hint_action worked. Return an error code or 0, so the callers can check for success. Change-Id: I180a367e9d8581a63dfa703046b37bc5cae8c6cb Signed-off-by: Corinna Vinschen <xda@vinschen.de>
This commit is contained in:
committed by
Michael Bestas
parent
3b9e68c9a7
commit
da09e1ea1e
28
utils.c
28
utils.c
@@ -262,19 +262,26 @@ void release_request(int lock_handle) {
|
||||
if (qcopt_handle && perf_lock_rel) perf_lock_rel(lock_handle);
|
||||
}
|
||||
|
||||
void perform_hint_action(int hint_id, int resource_values[], int num_resources) {
|
||||
if (qcopt_handle) {
|
||||
if (perf_lock_acq) {
|
||||
int perform_hint_action(int hint_id, int resource_values[], int num_resources) {
|
||||
if (qcopt_handle && perf_lock_acq) {
|
||||
/* Acquire an indefinite lock for the requested resources. */
|
||||
int lock_handle = perf_lock_acq(0, 0, resource_values, num_resources);
|
||||
|
||||
if (lock_handle == -1) {
|
||||
ALOGE("Failed to acquire lock.");
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Add this handle to our internal hint-list. */
|
||||
struct hint_data* new_hint = (struct hint_data*)malloc(sizeof(struct hint_data));
|
||||
|
||||
if (new_hint) {
|
||||
if (!new_hint) {
|
||||
/* Can't keep track of this lock. Release it. */
|
||||
if (perf_lock_rel) perf_lock_rel(lock_handle);
|
||||
ALOGE("Failed to process hint.");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (!active_hint_list_head.compare) {
|
||||
active_hint_list_head.compare = (int (*)(void*, void*))hint_compare;
|
||||
active_hint_list_head.dump = (void (*)(void*))hint_dump;
|
||||
@@ -287,18 +294,11 @@ void perform_hint_action(int hint_id, int resource_values[], int num_resources)
|
||||
free(new_hint);
|
||||
/* Can't keep track of this lock. Release it. */
|
||||
if (perf_lock_rel) perf_lock_rel(lock_handle);
|
||||
|
||||
ALOGE("Failed to process hint.");
|
||||
}
|
||||
} else {
|
||||
/* Can't keep track of this lock. Release it. */
|
||||
if (perf_lock_rel) perf_lock_rel(lock_handle);
|
||||
|
||||
ALOGE("Failed to process hint.");
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void undo_hint_action(int hint_id) {
|
||||
|
||||
2
utils.h
2
utils.h
@@ -40,7 +40,7 @@ int get_scaling_governor_check_cores(char governor[], int size, int core_num);
|
||||
int is_interactive_governor(char*);
|
||||
int is_schedutil_governor(char*);
|
||||
|
||||
void perform_hint_action(int hint_id, int resource_values[], int num_resources);
|
||||
int perform_hint_action(int hint_id, int resource_values[], int num_resources);
|
||||
void undo_hint_action(int hint_id);
|
||||
void undo_initial_hint_action();
|
||||
void release_request(int lock_handle);
|
||||
|
||||
Reference in New Issue
Block a user