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

Commit efc16ac9 authored by Sivan Reinstein's avatar Sivan Reinstein Committed by Gerrit - the friendly Code Review server
Browse files

msm: ipa: wake client due to suspend interrupt when consumer is granted



Enable invoking of the client consumer request callback in RM
due to suspend interrupt even when the client's consumer is
already granted.
This is required in order to notify a client of DL data arriving
when it's consumer can't be released.

Change-Id: I0b36bf0e8bb21bbd0e5e4213733381d41a3cdc5f
Signed-off-by: default avatarSivan Reinstein <sivanr@codeaurora.org>
parent 2d0792aa
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -370,7 +370,7 @@ int ipa3_rm_request_resource_with_timer(enum ipa_rm_resource_name resource_name)
		goto bail;
		goto bail;
	}
	}
	result = ipa3_rm_resource_consumer_request(
	result = ipa3_rm_resource_consumer_request(
			(struct ipa3_rm_resource_cons *)resource, 0, false);
		(struct ipa3_rm_resource_cons *)resource, 0, false, true);
	if (result != 0 && result != -EINPROGRESS) {
	if (result != 0 && result != -EINPROGRESS) {
		IPA_RM_ERR("consumer request returned error %d\n", result);
		IPA_RM_ERR("consumer request returned error %d\n", result);
		result = -EPERM;
		result = -EPERM;
+9 −3
Original line number Original line Diff line number Diff line
@@ -144,7 +144,8 @@ int ipa3_rm_resource_consumer_request_work(struct ipa3_rm_resource_cons
int ipa3_rm_resource_consumer_request(
int ipa3_rm_resource_consumer_request(
		struct ipa3_rm_resource_cons *consumer,
		struct ipa3_rm_resource_cons *consumer,
		u32 prod_needed_bw,
		u32 prod_needed_bw,
		bool inc_usage_count)
		bool inc_usage_count,
		bool wake_client)
{
{
	int result = 0;
	int result = 0;
	enum ipa3_rm_resource_state prev_state;
	enum ipa3_rm_resource_state prev_state;
@@ -176,6 +177,11 @@ int ipa3_rm_resource_consumer_request(
						false);
						false);
		break;
		break;
	case IPA_RM_GRANTED:
	case IPA_RM_GRANTED:
		if (wake_client) {
			result = ipa3_rm_resource_consumer_request_work(
				consumer, prev_state, prod_needed_bw, false);
			break;
		}
		ipa3_rm_perf_profile_change(consumer->resource.name);
		ipa3_rm_perf_profile_change(consumer->resource.name);
		break;
		break;
	case IPA_RM_REQUEST_IN_PROGRESS:
	case IPA_RM_REQUEST_IN_PROGRESS:
@@ -631,7 +637,7 @@ int ipa3_rm_resource_add_dependency(struct ipa_rm_resource *resource,
		consumer_result = ipa3_rm_resource_consumer_request(
		consumer_result = ipa3_rm_resource_consumer_request(
				(struct ipa3_rm_resource_cons *)depends_on,
				(struct ipa3_rm_resource_cons *)depends_on,
				resource->max_bw,
				resource->max_bw,
				true);
				true, false);
		if (consumer_result != -EINPROGRESS) {
		if (consumer_result != -EINPROGRESS) {
			resource->state = prev_state;
			resource->state = prev_state;
			((struct ipa3_rm_resource_prod *)
			((struct ipa3_rm_resource_prod *)
@@ -793,7 +799,7 @@ int ipa3_rm_resource_producer_request(struct ipa3_rm_resource_prod *producer)
			consumer_result = ipa3_rm_resource_consumer_request(
			consumer_result = ipa3_rm_resource_consumer_request(
				(struct ipa3_rm_resource_cons *)consumer,
				(struct ipa3_rm_resource_cons *)consumer,
				producer->resource.max_bw,
				producer->resource.max_bw,
				true);
				true, false);
			if (consumer_result == -EINPROGRESS) {
			if (consumer_result == -EINPROGRESS) {
				result = -EINPROGRESS;
				result = -EINPROGRESS;
			} else {
			} else {
+2 −1
Original line number Original line Diff line number Diff line
@@ -127,7 +127,8 @@ int ipa3_rm_resource_producer_release(struct ipa3_rm_resource_prod *producer);


int ipa3_rm_resource_consumer_request(struct ipa3_rm_resource_cons *consumer,
int ipa3_rm_resource_consumer_request(struct ipa3_rm_resource_cons *consumer,
				u32 needed_bw,
				u32 needed_bw,
				bool inc_usage_count);
				bool inc_usage_count,
				bool wake_client);


int ipa3_rm_resource_consumer_release(struct ipa3_rm_resource_cons *consumer,
int ipa3_rm_resource_consumer_release(struct ipa3_rm_resource_cons *consumer,
				u32 needed_bw,
				u32 needed_bw,