Linux ARM-MSM sub-architecture
 help / color / mirror / Atom feed
From: Alex Elder <elder@linaro.org>
To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
	pabeni@redhat.com
Cc: mka@chromium.org, evgreen@chromium.org,
	bjorn.andersson@linaro.org, quic_cpratapa@quicinc.com,
	quic_avuyyuru@quicinc.com, quic_jponduru@quicinc.com,
	quic_subashab@quicinc.com, elder@kernel.org,
	netdev@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH net-next 4/6] net: ipa: simplify gsi_channel_trans_last()
Date: Fri,  2 Sep 2022 16:02:16 -0500	[thread overview]
Message-ID: <20220902210218.745873-5-elder@linaro.org> (raw)
In-Reply-To: <20220902210218.745873-1-elder@linaro.org>

Using a little logic we can simplify gsi_channel_trans_last().

The first condition in that function looks like this:
    if (trans_info->allocated_id != trans_info->free_id)
And if that's false, we proceed to the next one:
    if (trans_info->committed_id != trans_info->allocated_id)

Failure of the first test implies:
    trans_info->allocated_id == trans_info->free_id
And therefore, the second one can be rewritten this way:
    if (trans_info->committed_id != trans_info->free_id)

Substituting free_id for allocated_id and committed_id can also be
done in the code blocks executed when these conditions yield true.
The net result is that all three blocks for TX endpoints can be
consolidated into just one.

The two blocks of code at the end of that function (used for both TX
and RX channels) can be similarly consolidated into a single block.

Signed-off-by: Alex Elder <elder@linaro.org>
---
 drivers/net/ipa/gsi.c | 33 +++++++--------------------------
 1 file changed, 7 insertions(+), 26 deletions(-)

diff --git a/drivers/net/ipa/gsi.c b/drivers/net/ipa/gsi.c
index 0983a11409f2d..841a946bc286a 100644
--- a/drivers/net/ipa/gsi.c
+++ b/drivers/net/ipa/gsi.c
@@ -718,46 +718,27 @@ static struct gsi_trans *gsi_channel_trans_last(struct gsi_channel *channel)
 	 * before we disabled transmits, so check for that.
 	 */
 	if (channel->toward_ipa) {
-		/* The last allocated transaction precedes the first free */
-		if (trans_info->allocated_id != trans_info->free_id) {
+		/* The last allocated, committed, or pending transaction
+		 * precedes the first free transaction.
+		 */
+		if (trans_info->pending_id != trans_info->free_id) {
 			trans_id = trans_info->free_id - 1;
 			trans_index = trans_id % channel->tre_count;
 			trans = &trans_info->trans[trans_index];
 			goto done;
 		}
-
-		/* Last committed transaction precedes the first allocated */
-		if (trans_info->committed_id != trans_info->allocated_id) {
-			trans_id = trans_info->allocated_id - 1;
-			trans_index = trans_id % channel->tre_count;
-			trans = &trans_info->trans[trans_index];
-			goto done;
-		}
-
-		/* Last pending transaction precedes the first committed */
-		if (trans_info->pending_id != trans_info->committed_id) {
-			trans_id = trans_info->committed_id - 1;
-			trans_index = trans_id % channel->tre_count;
-			trans = &trans_info->trans[trans_index];
-			goto done;
-		}
 	}
 
 	/* Otherwise (TX or RX) we want to wait for anything that
 	 * has completed, or has been polled but not released yet.
 	 *
-	 * The last pending transaction precedes the first committed.
+	 * The last completed or polled transaction precedes the
+	 * first pending transaction.
 	 */
-	if (trans_info->completed_id != trans_info->pending_id) {
+	if (trans_info->polled_id != trans_info->pending_id) {
 		trans_id = trans_info->pending_id - 1;
 		trans_index = trans_id % channel->tre_count;
 		trans = &trans_info->trans[trans_index];
-		goto done;
-	}
-	if (trans_info->polled_id != trans_info->completed_id) {
-		trans_id = trans_info->completed_id - 1;
-		trans_index = trans_id % channel->tre_count;
-		trans = &trans_info->trans[trans_index];
 	} else {
 		trans = NULL;
 	}
-- 
2.34.1


  parent reply	other threads:[~2022-09-02 21:02 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-02 21:02 [PATCH net-next 0/6] net: ipa: start using transaction IDs Alex Elder
2022-09-02 21:02 ` [PATCH net-next 1/6] net: ipa: rework last transaction determination Alex Elder
2022-09-02 21:02 ` [PATCH net-next 2/6] net: ipa: use IDs for last allocated transaction Alex Elder
2022-09-02 21:02 ` [PATCH net-next 3/6] net: ipa: use IDs exclusively for last transaction Alex Elder
2022-09-02 21:02 ` Alex Elder [this message]
2022-09-02 21:02 ` [PATCH net-next 5/6] net: ipa: further simplify gsi_channel_trans_last() Alex Elder
2022-09-02 21:02 ` [PATCH net-next 6/6] net: ipa: verify a few more IDs Alex Elder
2022-09-05 12:10 ` [PATCH net-next 0/6] net: ipa: start using transaction IDs patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220902210218.745873-5-elder@linaro.org \
    --to=elder@linaro.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=elder@kernel.org \
    --cc=evgreen@chromium.org \
    --cc=kuba@kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mka@chromium.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=quic_avuyyuru@quicinc.com \
    --cc=quic_cpratapa@quicinc.com \
    --cc=quic_jponduru@quicinc.com \
    --cc=quic_subashab@quicinc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox