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

Commit 87ce2eaa authored by Arun Kumar Neelakantam's avatar Arun Kumar Neelakantam Committed by Gerrit - the friendly Code Review server
Browse files

soc: qcom: qmi_interface: Remove ineffective mutex lock from txn struct



The same QMI transaction data is synchronized using two mutex locks.

Remove ineffective transaction mutex lock because it is always
covered by QMI txn_lock with same purpose.

CRs-Fixed: 2470638
Change-Id: If53e006436c77d572b2d69507e1593e3d57e1cd4
Signed-off-by: default avatarArun Kumar Neelakantam <aneela@codeaurora.org>
parent ae4f7281
Loading
Loading
Loading
Loading
+2 −17
Original line number Diff line number Diff line
@@ -311,7 +311,6 @@ int qmi_txn_init(struct qmi_handle *qmi, struct qmi_txn *txn,

	memset(txn, 0, sizeof(*txn));

	mutex_init(&txn->lock);
	init_completion(&txn->completion);
	txn->qmi = qmi;
	txn->ei = ei;
@@ -347,17 +346,12 @@ int qmi_txn_wait(struct qmi_txn *txn, unsigned long timeout)

	ret = wait_for_completion_timeout(&txn->completion, timeout);

	mutex_lock(&txn->lock);
	if (txn->result == -ENETRESET) {
		mutex_unlock(&txn->lock);
		return txn->result;
	}
	mutex_unlock(&txn->lock);

	mutex_lock(&qmi->txn_lock);
	mutex_lock(&txn->lock);
	idr_remove(&qmi->txns, txn->id);
	mutex_unlock(&txn->lock);
	mutex_unlock(&qmi->txn_lock);

	if (ret == 0)
@@ -376,9 +370,7 @@ void qmi_txn_cancel(struct qmi_txn *txn)
	struct qmi_handle *qmi = txn->qmi;

	mutex_lock(&qmi->txn_lock);
	mutex_lock(&txn->lock);
	idr_remove(&qmi->txns, txn->id);
	mutex_unlock(&txn->lock);
	mutex_unlock(&qmi->txn_lock);
}
EXPORT_SYMBOL(qmi_txn_cancel);
@@ -508,10 +500,6 @@ static void qmi_handle_message(struct qmi_handle *qmi,
			mutex_unlock(&qmi->txn_lock);
			return;
		}

		mutex_lock(&txn->lock);
		mutex_unlock(&qmi->txn_lock);

		if (txn->dest && txn->ei) {
			ret = qmi_decode_message(buf, len, txn->ei, txn->dest);
			if (ret < 0)
@@ -522,8 +510,7 @@ static void qmi_handle_message(struct qmi_handle *qmi,
		} else {
			qmi_invoke_handler(qmi, sq, txn, buf, len);
		}

		mutex_unlock(&txn->lock);
		mutex_unlock(&qmi->txn_lock);
	} else {
		/* Create a txn based on the txn_id of the incoming message */
		memset(&tmp_txn, 0, sizeof(tmp_txn));
@@ -736,11 +723,9 @@ void qmi_handle_release(struct qmi_handle *qmi)

	mutex_lock(&qmi->txn_lock);
	idr_for_each_entry(&qmi->txns, txn, txn_id) {
		mutex_lock(&txn->lock);
		idr_remove(&qmi->txns, txn->id);
		txn->result = -ENETRESET;
		complete(&txn->completion);
		mutex_unlock(&txn->lock);
	}
	mutex_unlock(&qmi->txn_lock);
	idr_destroy(&qmi->txns);
+0 −2
Original line number Diff line number Diff line
@@ -158,7 +158,6 @@ struct qmi_ops {
 * struct qmi_txn - transaction context
 * @qmi:	QMI handle this transaction is associated with
 * @id:		transaction id
 * @lock:	for synchronization between handler and waiter of messages
 * @completion:	completion object as the transaction receives a response
 * @result:	result code for the completed transaction
 * @ei:		description of the QMI encoded response (optional)
@@ -169,7 +168,6 @@ struct qmi_txn {

	u16 id;

	struct mutex lock;
	struct completion completion;
	int result;