Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a877e0f9 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ipa: fix reference count in rm"

parents 72c005ef 7d8d8d6b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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 {
+3 −1
Original line number Diff line number Diff line
@@ -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,
+10 −5
Original line number Diff line number Diff line
@@ -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,6 +136,7 @@ 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;
		if (dec_client_on_err)
			consumer->usage_count--;
	}

@@ -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);
+2 −1
Original line number Diff line number Diff line
@@ -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,