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

Commit 351c1698 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: Release wlan cons resource"

parents c09a07b2 5a49d53d
Loading
Loading
Loading
Loading
+27 −9
Original line number Diff line number Diff line
/* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -155,6 +155,21 @@ int ipa_rm_delete_resource(enum ipa_rm_resource_name resource_name)
		result = -EINVAL;
		goto bail;
	}

	if (resource->state == IPA_RM_GRANTED) {
		/* There might pending timer work to
		 * release release the resource
		 */
		if (resource->release_work != NULL) {
			if (flush_delayed_work(&resource->release_work->work)
				== true) {
				IPA_RM_DBG("Flushed the pending work\n");
			} else {
				IPA_RM_DBG("Work was already idle\n");
			}
		}
	}

	result = ipa_rm_resource_delete(resource);
	if (result) {
		IPA_RM_ERR("ipa_rm_resource_delete() failed\n");
@@ -464,6 +479,8 @@ void delayed_release_work_func(struct work_struct *work)
bail:
	spin_unlock_irqrestore(&ipa_rm_ctx->ipa_rm_lock, flags);
	kfree(rwork);
	if (resource)
		resource->release_work = NULL;

}

@@ -478,7 +495,6 @@ int ipa_rm_request_resource_with_timer(enum ipa_rm_resource_name resource_name)
{
	unsigned long flags;
	struct ipa_rm_resource *resource;
	struct ipa_rm_delayed_release_work_type *release_work;
	int result;

	if (!IPA_RM_RESORCE_IS_CONS(resource_name)) {
@@ -502,16 +518,18 @@ int ipa_rm_request_resource_with_timer(enum ipa_rm_resource_name resource_name)
		goto bail;
	}

	release_work = kzalloc(sizeof(*release_work), GFP_ATOMIC);
	if (!release_work) {
	resource->release_work =
		kzalloc(sizeof(*resource->release_work), GFP_ATOMIC);
	if (!resource->release_work) {
		result = -ENOMEM;
		goto bail;
	}
	release_work->resource_name = resource->name;
	release_work->needed_bw = 0;
	release_work->dec_usage_count = false;
	INIT_DELAYED_WORK(&release_work->work, delayed_release_work_func);
	schedule_delayed_work(&release_work->work,
	resource->release_work->resource_name = resource->name;
	resource->release_work->needed_bw = 0;
	resource->release_work->dec_usage_count = false;
	INIT_DELAYED_WORK(&resource->release_work->work,
		delayed_release_work_func);
	schedule_delayed_work(&resource->release_work->work,
			msecs_to_jiffies(IPA_RM_RELEASE_DELAY_IN_MSEC));
	result = 0;
bail:
+15 −4
Original line number Diff line number Diff line
/* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -122,11 +122,20 @@ int ipa_rm_resource_consumer_request_work(struct ipa_rm_resource_cons *consumer,
		bool dec_client_on_err)
{
	int driver_result;
	int result = 0;

	IPA_RM_DBG_LOW("calling driver CB\n");
	driver_result = consumer->request_resource();
	IPA_RM_DBG_LOW("driver CB returned with %d\n", driver_result);
	if (driver_result == 0) {

	if (driver_result == 0 ||
		driver_result == -EPERM) {
		/*
		 * Go ahead and handle suspend of
		 * resources in case of -EPERM return,
		 * as the client driver is unloaded and
		 * Holb drop is enabled
		 */
		if (notify_completion) {
			ipa_rm_resource_consumer_handle_cb(consumer,
					IPA_RM_RESOURCE_GRANTED);
@@ -140,9 +149,11 @@ int ipa_rm_resource_consumer_request_work(struct ipa_rm_resource_cons *consumer,
		consumer->resource.needed_bw -= prod_needed_bw;
		if (dec_client_on_err)
			consumer->usage_count--;
	}
		result = driver_result;
	} else
		result = driver_result;

	return driver_result;
	return result;
}

int ipa_rm_resource_consumer_request(
+2 −1
Original line number Diff line number Diff line
/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2016,2018 The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -65,6 +65,7 @@ struct ipa_rm_resource {
	u32				needed_bw;
	enum ipa_rm_resource_state	state;
	struct ipa_rm_peers_list	*peers_list;
	struct ipa_rm_delayed_release_work_type *release_work;
};

/**