All of lore.kernel.org
 help / color / mirror / Atom feed
From: George Hilliard <thirtythreeforty@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-mips@linux-mips.org, linux-kernel@vger.kernel.org,
	George Hilliard <thirtythreeforty@gmail.com>
Subject: [PATCH v2 06/11] staging: mt7621-mmc: Initialize completions a single time during probe
Date: Mon, 18 Mar 2019 20:20:07 -0600	[thread overview]
Message-ID: <20190319022012.11051-7-thirtythreeforty@gmail.com> (raw)
In-Reply-To: <20190319022012.11051-1-thirtythreeforty@gmail.com>

The module was initializing completions whenever it was going to wait on
them, and not when the completion was allocated.  This is incorrect
according to the completion docs:

    Calling init_completion() on the same completion object twice is
    most likely a bug [...]

Re-initialization is also unnecessary because the module never uses
complete_all().  Fix this by only ever initializing the completion a
single time.

Signed-off-by: George Hilliard <thirtythreeforty@gmail.com>
---
 drivers/staging/mt7621-mmc/sd.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/mt7621-mmc/sd.c b/drivers/staging/mt7621-mmc/sd.c
index 89fbc0a1dec7..c272aa780719 100644
--- a/drivers/staging/mt7621-mmc/sd.c
+++ b/drivers/staging/mt7621-mmc/sd.c
@@ -467,7 +467,9 @@ static unsigned int msdc_command_start(struct msdc_host   *host,
 	host->cmd     = cmd;
 	host->cmd_rsp = resp;
 
-	init_completion(&host->cmd_done);
+	// The completion should have been consumed by the previous command
+	// response handler, because the mmc requests should be serialized
+	BUG_ON(completion_done(&host->cmd_done));
 
 	sdr_set_bits(host->base + MSDC_INTEN, wints);
 	sdc_send_cmd(rawcmd, cmd->arg);
@@ -489,7 +491,6 @@ static unsigned int msdc_command_resp(struct msdc_host   *host,
 		    MSDC_INT_ACMD19_DONE;
 
 	BUG_ON(in_interrupt());
-	//init_completion(&host->cmd_done);
 	//sdr_set_bits(host->base + MSDC_INTEN, wints);
 
 	spin_unlock(&host->lock);
@@ -673,7 +674,10 @@ static int msdc_do_request(struct mmc_host *mmc, struct mmc_request *mrq)
 		//msdc_clr_fifo(host);  /* no need */
 
 		msdc_dma_on();  /* enable DMA mode first!! */
-		init_completion(&host->xfer_done);
+
+		// The completion should have been consumed by the previous xfer
+		// response handler, because the mmc requests should be serialized
+		BUG_ON(completion_done(&host->xfer_done));
 
 		/* start the command first*/
 		if (msdc_command_start(host, cmd, CMD_TIMEOUT) != 0)
@@ -692,7 +696,6 @@ static int msdc_do_request(struct mmc_host *mmc, struct mmc_request *mrq)
 		/* for read, the data coming too fast, then CRC error
 		 *  start DMA no business with CRC.
 		 */
-		//init_completion(&host->xfer_done);
 		msdc_dma_start(host);
 
 		spin_unlock(&host->lock);
@@ -1684,6 +1687,8 @@ static int msdc_drv_probe(struct platform_device *pdev)
 	}
 	msdc_init_gpd_bd(host, &host->dma);
 
+	init_completion(&host->cmd_done);
+	init_completion(&host->xfer_done);
 	INIT_DELAYED_WORK(&host->card_delaywork, msdc_tasklet_card);
 	spin_lock_init(&host->lock);
 	msdc_init_hw(host);
-- 
2.21.0


  parent reply	other threads:[~2019-03-19  2:21 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190319022012.11051-1-thirtythreeforty@gmail.com>
2019-03-19  2:20 ` [PATCH v2 01/11] staging: mt7621-mmc: fix unused variable compiler warning George Hilliard
2019-03-19  2:20 ` [PATCH v2 02/11] staging: mt7621-mmc: Remove obsolete comments and variables George Hilliard
2019-03-19  2:20 ` [PATCH v2 03/11] staging: mt7621-mmc: Fix warning when reloading module with debug msgs enabled George Hilliard
2019-03-20  7:19   ` Greg Kroah-Hartman
2019-03-19  2:20 ` [PATCH v2 04/11] staging: mt7621-mmc: Use pinctrl subsystem to select SDXC pin mode George Hilliard
2019-03-19  2:20 ` [PATCH v2 05/11] staging: mt7621-mmc: Bill the caller for I/O time George Hilliard
2019-03-19  2:20 ` George Hilliard [this message]
2019-03-20  7:22   ` [PATCH v2 06/11] staging: mt7621-mmc: Initialize completions a single time during probe Greg Kroah-Hartman
2019-03-19  2:20 ` [PATCH v2 07/11] staging: mt7621-mmc: Check for nonzero number of scatterlist entries George Hilliard
2019-03-20  7:22   ` Greg Kroah-Hartman
2019-03-19  2:20 ` [PATCH v2 08/11] staging: mt7621-mmc: Remove redundant host->mmc->f_max write George Hilliard
2019-03-19  2:20 ` [PATCH v2 09/11] staging: mt7621-mmc: Immediately notify mmc layer of card change detection George Hilliard
2019-03-19  2:20 ` [PATCH v2 10/11] staging: mt7621-mmc: Fix BRUST -> BURST typo George Hilliard
2019-03-19  2:20 ` [PATCH v2 11/11] staging: mt7621-mmc: Only unmap_sg if mapped George Hilliard
2019-03-20  7:26 ` your mail Greg Kroah-Hartman

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=20190319022012.11051-7-thirtythreeforty@gmail.com \
    --to=thirtythreeforty@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.