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(
|
ipa_rm_resource_consumer_request_work(
|
||||||
(struct ipa_rm_resource_cons *)resource,
|
(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);
|
spin_unlock_irqrestore(&ipa_rm_ctx->ipa_rm_lock, flags);
|
||||||
bail:
|
bail:
|
||||||
kfree(ipa_rm_work);
|
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,
|
int ipa_rm_wq_send_resume_cmd(enum ipa_rm_resource_name resource_name,
|
||||||
enum ipa_rm_resource_state prev_state,
|
enum ipa_rm_resource_state prev_state,
|
||||||
u32 needed_bw)
|
u32 needed_bw,
|
||||||
|
bool inc_usage_count)
|
||||||
{
|
{
|
||||||
int result = -ENOMEM;
|
int result = -ENOMEM;
|
||||||
struct ipa_rm_wq_suspend_resume_work_type *work = kzalloc(sizeof(*work),
|
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->resource_name = resource_name;
|
||||||
work->prev_state = prev_state;
|
work->prev_state = prev_state;
|
||||||
work->needed_bw = needed_bw;
|
work->needed_bw = needed_bw;
|
||||||
|
work->inc_usage_count = inc_usage_count;
|
||||||
result = queue_work(ipa_rm_ctx->ipa_rm_wq,
|
result = queue_work(ipa_rm_ctx->ipa_rm_wq,
|
||||||
(struct work_struct *)work);
|
(struct work_struct *)work);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -118,6 +118,7 @@ struct ipa_rm_wq_suspend_resume_work_type {
|
||||||
enum ipa_rm_resource_name resource_name;
|
enum ipa_rm_resource_name resource_name;
|
||||||
enum ipa_rm_resource_state prev_state;
|
enum ipa_rm_resource_state prev_state;
|
||||||
u32 needed_bw;
|
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,
|
int ipa_rm_wq_send_resume_cmd(enum ipa_rm_resource_name resource_name,
|
||||||
enum ipa_rm_resource_state prev_state,
|
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,
|
int ipa_rm_wq_send_suspend_cmd(enum ipa_rm_resource_name resource_name,
|
||||||
enum ipa_rm_resource_state prev_state,
|
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,
|
int ipa_rm_resource_consumer_request_work(struct ipa_rm_resource_cons *consumer,
|
||||||
enum ipa_rm_resource_state prev_state,
|
enum ipa_rm_resource_state prev_state,
|
||||||
u32 prod_needed_bw,
|
u32 prod_needed_bw,
|
||||||
bool notify_completion)
|
bool notify_completion,
|
||||||
|
bool dec_client_on_err)
|
||||||
{
|
{
|
||||||
int driver_result;
|
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) {
|
} else if (driver_result != -EINPROGRESS) {
|
||||||
consumer->resource.state = prev_state;
|
consumer->resource.state = prev_state;
|
||||||
consumer->resource.needed_bw -= prod_needed_bw;
|
consumer->resource.needed_bw -= prod_needed_bw;
|
||||||
consumer->usage_count--;
|
if (dec_client_on_err)
|
||||||
|
consumer->usage_count--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return driver_result;
|
return driver_result;
|
||||||
|
@ -170,19 +172,22 @@ int ipa_rm_resource_consumer_request(
|
||||||
ipa_rm_resource_str(consumer->resource.name));
|
ipa_rm_resource_str(consumer->resource.name));
|
||||||
ipa_rm_wq_send_resume_cmd(consumer->resource.name,
|
ipa_rm_wq_send_resume_cmd(consumer->resource.name,
|
||||||
prev_state,
|
prev_state,
|
||||||
prod_needed_bw);
|
prod_needed_bw,
|
||||||
|
inc_usage_count);
|
||||||
result = -EINPROGRESS;
|
result = -EINPROGRESS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
result = ipa_rm_resource_consumer_request_work(consumer,
|
result = ipa_rm_resource_consumer_request_work(consumer,
|
||||||
prev_state,
|
prev_state,
|
||||||
prod_needed_bw,
|
prod_needed_bw,
|
||||||
false);
|
false,
|
||||||
|
inc_usage_count);
|
||||||
break;
|
break;
|
||||||
case IPA_RM_GRANTED:
|
case IPA_RM_GRANTED:
|
||||||
if (wake_client) {
|
if (wake_client) {
|
||||||
result = ipa_rm_resource_consumer_request_work(
|
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;
|
break;
|
||||||
}
|
}
|
||||||
ipa_rm_perf_profile_change(consumer->resource.name);
|
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,
|
int ipa_rm_resource_consumer_request_work(struct ipa_rm_resource_cons *consumer,
|
||||||
enum ipa_rm_resource_state prev_state,
|
enum ipa_rm_resource_state prev_state,
|
||||||
u32 needed_bw,
|
u32 needed_bw,
|
||||||
bool notify_completion);
|
bool notify_completion,
|
||||||
|
bool dec_client_on_err);
|
||||||
|
|
||||||
int ipa_rm_resource_consumer_release_work(
|
int ipa_rm_resource_consumer_release_work(
|
||||||
struct ipa_rm_resource_cons *consumer,
|
struct ipa_rm_resource_cons *consumer,
|
||||||
|
|
Loading…
Add table
Reference in a new issue