linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Karim Eshapa <karim.eshapa@gmail.com>
To: oss@buserror.net
Cc: claudiu.manoil@nxp.com, roy.pledge@nxp.com,
	colin.king@canonical.com, linuxppc-dev@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Karim Eshapa <karim.eshapa@gmail.com>
Subject: [PATCH v2] drivers:soc:fsl:qbman:qman.c: Sleep instead of stuck hacking jiffies.
Date: Thu,  4 May 2017 06:58:37 +0200	[thread overview]
Message-ID: <1493873917-7484-1-git-send-email-karim.eshapa@gmail.com> (raw)
In-Reply-To: <1493508775.25397.26.camel@buserror.net>

Avoid stuck and hacking jiffies for a long time and using msleep()
for certatin numeber of cylces without the factor of safety
but using the the long delay considering the factor of safety
with the while loop such that after msleep for a short period
of time we check the  msg if it's OK, breaking the big loop delay.

Signed-off-by: Karim Eshapa <karim.eshapa@gmail.com>
---
 drivers/soc/fsl/qbman/qman.c | 47 ++++++++++++++++++++++----------------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/drivers/soc/fsl/qbman/qman.c b/drivers/soc/fsl/qbman/qman.c
index 6f509f6..4f99298 100644
--- a/drivers/soc/fsl/qbman/qman.c
+++ b/drivers/soc/fsl/qbman/qman.c
@@ -1067,32 +1067,33 @@ static irqreturn_t portal_isr(int irq, void *ptr)
 static int drain_mr_fqrni(struct qm_portal *p)
 {
 	const union qm_mr_entry *msg;
+	unsigned long stop;
+	unsigned int timeout = jiffies_to_msecs(1000);
 loop:
 	msg = qm_mr_current(p);
-	if (!msg) {
-		/*
-		 * if MR was full and h/w had other FQRNI entries to produce, we
-		 * need to allow it time to produce those entries once the
-		 * existing entries are consumed. A worst-case situation
-		 * (fully-loaded system) means h/w sequencers may have to do 3-4
-		 * other things before servicing the portal's MR pump, each of
-		 * which (if slow) may take ~50 qman cycles (which is ~200
-		 * processor cycles). So rounding up and then multiplying this
-		 * worst-case estimate by a factor of 10, just to be
-		 * ultra-paranoid, goes as high as 10,000 cycles. NB, we consume
-		 * one entry at a time, so h/w has an opportunity to produce new
-		 * entries well before the ring has been fully consumed, so
-		 * we're being *really* paranoid here.
-		 */
-		u64 now, then = jiffies;
-
-		do {
-			now = jiffies;
-		} while ((then + 10000) > now);
+	stop = jiffies + 10000;
+	/*
+	 * if MR was full and h/w had other FQRNI entries to produce, we
+	 * need to allow it time to produce those entries once the
+	 * existing entries are consumed. A worst-case situation
+	 * (fully-loaded system) means h/w sequencers may have to do 3-4
+	 * other things before servicing the portal's MR pump, each of
+	 * which (if slow) may take ~50 qman cycles (which is ~200
+	 * processor cycles). So rounding up and then multiplying this
+	 * worst-case estimate by a factor of 10, just to be
+	 * ultra-paranoid, goes as high as 10,000 cycles. NB, we consume
+	 * one entry at a time, so h/w has an opportunity to produce new
+	 * entries well before the ring has been fully consumed, so
+	 * we're being *really* paranoid here.
+	 */
+	do {
+		if (msg)
+			break;
+		msleep(timeout);
 		msg = qm_mr_current(p);
-		if (!msg)
-			return 0;
-	}
+	} while (time_before(jiffies, stop));
+	if (!msg)
+		return 0;
 	if ((msg->verb & QM_MR_VERB_TYPE_MASK) != QM_MR_VERB_FQRNI) {
 		/* We aren't draining anything but FQRNIs */
 		pr_err("Found verb 0x%x in MR\n", msg->verb);
-- 
2.7.4

  parent reply	other threads:[~2017-05-04  4:58 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-29 19:46 [PATCH] " Karim Eshapa
2017-04-29 20:43 ` [PATCH] drivers:soc:fsl:qbman:qman.c: unsigned long jiffies value Karim Eshapa
2017-04-29 23:32   ` Scott Wood
2017-04-30  1:09     ` Karim Eshapa
2017-05-04  4:58     ` Karim Eshapa [this message]
2017-05-04 21:07       ` [PATCH v2] drivers:soc:fsl:qbman:qman.c: Sleep instead of stuck hacking jiffies Scott Wood
2017-05-04 23:30         ` Roy Pledge
2017-05-05  5:45       ` [PATCH v3] " Karim Eshapa
2017-06-25  2:46         ` [v3] " Scott Wood
2017-06-27 16:38           ` Leo Li
2017-05-05  6:01       ` [PATCH v2] " Karim Eshapa
2017-05-05  6:33         ` Scott Wood

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=1493873917-7484-1-git-send-email-karim.eshapa@gmail.com \
    --to=karim.eshapa@gmail.com \
    --cc=claudiu.manoil@nxp.com \
    --cc=colin.king@canonical.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=oss@buserror.net \
    --cc=roy.pledge@nxp.com \
    --subject='Re: [PATCH v2] drivers:soc:fsl:qbman:qman.c: Sleep instead of stuck hacking jiffies.' \
    /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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).