Merge "msm: ipa: fix reference count in rm"
This commit is contained in:
commit
07b2776c8c
4 changed files with 20 additions and 9 deletions
|
@ -820,7 +820,8 @@ static void ipa_rm_wq_resume_handler(struct work_struct *work)
|
|||
}
|
||||
ipa_rm_resource_consumer_request_work(
|
||||
(struct ipa_rm_resource_cons *)resource,
|
||||
ipa_rm_work->prev_state, ipa_rm_work->needed_bw, true);
|
||||
ipa_rm_work->prev_state, ipa_rm_work->needed_bw, true,
|
||||
ipa_rm_work->inc_usage_count);
|
||||
spin_unlock_irqrestore(&ipa_rm_ctx->ipa_rm_lock, flags);
|
||||
bail:
|
||||
kfree(ipa_rm_work);
|
||||
|
@ -916,7 +917,8 @@ int ipa_rm_wq_send_suspend_cmd(enum ipa_rm_resource_name resource_name,
|
|||
|
||||
int ipa_rm_wq_send_resume_cmd(enum ipa_rm_resource_name resource_name,
|
||||
enum ipa_rm_resource_state prev_state,
|
||||
u32 needed_bw)
|
||||
u32 needed_bw,
|
||||
bool inc_usage_count)
|
||||
{
|
||||
int result = -ENOMEM;
|
||||
struct ipa_rm_wq_suspend_resume_work_type *work = kzalloc(sizeof(*work),
|
||||
|
@ -926,6 +928,7 @@ int ipa_rm_wq_send_resume_cmd(enum ipa_rm_resource_name resource_name,
|
|||
work->resource_name = resource_name;
|
||||
work->prev_state = prev_state;
|
||||
work->needed_bw = needed_bw;
|
||||
work->inc_usage_count = inc_usage_count;
|
||||
result = queue_work(ipa_rm_ctx->ipa_rm_wq,
|
||||
(struct work_struct *)work);
|
||||
} else {
|
||||
|
|
|
@ -118,6 +118,7 @@ struct ipa_rm_wq_suspend_resume_work_type {
|
|||
enum ipa_rm_resource_name resource_name;
|
||||
enum ipa_rm_resource_state prev_state;
|
||||
u32 needed_bw;
|
||||
bool inc_usage_count;
|
||||
|
||||
};
|
||||
|
||||
|
@ -128,7 +129,8 @@ int ipa_rm_wq_send_cmd(enum ipa_rm_wq_cmd wq_cmd,
|
|||
|
||||
int ipa_rm_wq_send_resume_cmd(enum ipa_rm_resource_name resource_name,
|
||||
enum ipa_rm_resource_state prev_state,
|
||||
u32 needed_bw);
|
||||
u32 needed_bw,
|
||||
bool inc_usage_count);
|
||||
|
||||
int ipa_rm_wq_send_suspend_cmd(enum ipa_rm_resource_name resource_name,
|
||||
enum ipa_rm_resource_state prev_state,
|
||||
|
|
|
@ -116,7 +116,8 @@ bail:
|
|||
int ipa_rm_resource_consumer_request_work(struct ipa_rm_resource_cons *consumer,
|
||||
enum ipa_rm_resource_state prev_state,
|
||||
u32 prod_needed_bw,
|
||||
bool notify_completion)
|
||||
bool notify_completion,
|
||||
bool dec_client_on_err)
|
||||
{
|
||||
int driver_result;
|
||||
|
||||
|
@ -135,7 +136,8 @@ int ipa_rm_resource_consumer_request_work(struct ipa_rm_resource_cons *consumer,
|
|||
} else if (driver_result != -EINPROGRESS) {
|
||||
consumer->resource.state = prev_state;
|
||||
consumer->resource.needed_bw -= prod_needed_bw;
|
||||
consumer->usage_count--;
|
||||
if (dec_client_on_err)
|
||||
consumer->usage_count--;
|
||||
}
|
||||
|
||||
return driver_result;
|
||||
|
@ -170,19 +172,22 @@ int ipa_rm_resource_consumer_request(
|
|||
ipa_rm_resource_str(consumer->resource.name));
|
||||
ipa_rm_wq_send_resume_cmd(consumer->resource.name,
|
||||
prev_state,
|
||||
prod_needed_bw);
|
||||
prod_needed_bw,
|
||||
inc_usage_count);
|
||||
result = -EINPROGRESS;
|
||||
break;
|
||||
}
|
||||
result = ipa_rm_resource_consumer_request_work(consumer,
|
||||
prev_state,
|
||||
prod_needed_bw,
|
||||
false);
|
||||
false,
|
||||
inc_usage_count);
|
||||
break;
|
||||
case IPA_RM_GRANTED:
|
||||
if (wake_client) {
|
||||
result = ipa_rm_resource_consumer_request_work(
|
||||
consumer, prev_state, prod_needed_bw, false);
|
||||
consumer, prev_state, prod_needed_bw, false,
|
||||
inc_usage_count);
|
||||
break;
|
||||
}
|
||||
ipa_rm_perf_profile_change(consumer->resource.name);
|
||||
|
|
|
@ -155,7 +155,8 @@ int ipa_rm_resource_producer_print_stat(
|
|||
int ipa_rm_resource_consumer_request_work(struct ipa_rm_resource_cons *consumer,
|
||||
enum ipa_rm_resource_state prev_state,
|
||||
u32 needed_bw,
|
||||
bool notify_completion);
|
||||
bool notify_completion,
|
||||
bool dec_client_on_err);
|
||||
|
||||
int ipa_rm_resource_consumer_release_work(
|
||||
struct ipa_rm_resource_cons *consumer,
|
||||
|
|
Loading…
Add table
Reference in a new issue