public inbox for linux-mmc@vger.kernel.org
 help / color / mirror / Atom feed
From: Russell King <rmk+kernel@arm.linux.org.uk>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>,
	linux-mmc@vger.kernel.org, Marcin Wojtas <mw@semihalf.com>,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <kernel@pengutronix.de>
Subject: [PATCH v4 11/25] mmc: sdhci: avoid walking SG list for writes
Date: Fri, 29 Jan 2016 09:44:42 +0000	[thread overview]
Message-ID: <E1aP5be-0001pb-8I@rmk-PC.arm.linux.org.uk> (raw)
In-Reply-To: <20160129094324.GA20025@n2100.arm.linux.org.uk>

If we are writing data to the card, there is no point in walking the
scatterlist to find out if there are any unaligned entries; this is a
needless waste of CPU cycles.  Avoid this by checking for a non-read
tranfer first.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
 drivers/mmc/host/sdhci.c | 42 ++++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 774b0cf05f9d..9b56bb5546bf 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -559,37 +559,39 @@ static void sdhci_adma_table_post(struct sdhci_host *host,
 	void *align;
 	char *buffer;
 	unsigned long flags;
-	bool has_unaligned;
 
 	if (data->flags & MMC_DATA_READ)
 		direction = DMA_FROM_DEVICE;
 	else
 		direction = DMA_TO_DEVICE;
 
-	/* Do a quick scan of the SG list for any unaligned mappings */
-	has_unaligned = false;
-	for_each_sg(data->sg, sg, host->sg_count, i)
-		if (sg_dma_address(sg) & SDHCI_ADMA2_MASK) {
-			has_unaligned = true;
-			break;
-		}
+	if (data->flags & MMC_DATA_READ) {
+		bool has_unaligned = false;
 
-	if (has_unaligned && data->flags & MMC_DATA_READ) {
-		dma_sync_sg_for_cpu(mmc_dev(host->mmc), data->sg,
-			data->sg_len, direction);
+		/* Do a quick scan of the SG list for any unaligned mappings */
+		for_each_sg(data->sg, sg, host->sg_count, i)
+			if (sg_dma_address(sg) & SDHCI_ADMA2_MASK) {
+				has_unaligned = true;
+				break;
+			}
 
-		align = host->align_buffer;
+		if (has_unaligned) {
+			dma_sync_sg_for_cpu(mmc_dev(host->mmc), data->sg,
+				data->sg_len, direction);
 
-		for_each_sg(data->sg, sg, host->sg_count, i) {
-			if (sg_dma_address(sg) & SDHCI_ADMA2_MASK) {
-				size = SDHCI_ADMA2_ALIGN -
-				       (sg_dma_address(sg) & SDHCI_ADMA2_MASK);
+			align = host->align_buffer;
 
-				buffer = sdhci_kmap_atomic(sg, &flags);
-				memcpy(buffer, align, size);
-				sdhci_kunmap_atomic(buffer, &flags);
+			for_each_sg(data->sg, sg, host->sg_count, i) {
+				if (sg_dma_address(sg) & SDHCI_ADMA2_MASK) {
+					size = SDHCI_ADMA2_ALIGN -
+					       (sg_dma_address(sg) & SDHCI_ADMA2_MASK);
 
-				align += SDHCI_ADMA2_ALIGN;
+					buffer = sdhci_kmap_atomic(sg, &flags);
+					memcpy(buffer, align, size);
+					sdhci_kunmap_atomic(buffer, &flags);
+
+					align += SDHCI_ADMA2_ALIGN;
+				}
 			}
 		}
 	}
-- 
2.1.0


  parent reply	other threads:[~2016-01-29  9:44 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-29  9:43 [PATCH v4 00/25] MMC/SDHCI fixes Russell King - ARM Linux
2016-01-29  9:43 ` [PATCH v4 01/25] mmc: core: shut up "voltage-ranges unspecified" pr_info() Russell King
2016-01-29  9:43 ` [PATCH v4 02/25] mmc: core: improve mmc_of_parse_voltage() to return better status Russell King
2016-01-29  9:44 ` [PATCH v4 03/25] mmc: block: shut up "retrying because a re-tune was needed" message Russell King
2016-01-29  9:44 ` [PATCH v4 04/25] mmc: core: report tuning command execution failure reason Russell King
2016-01-29  9:44 ` [PATCH v4 05/25] mmc: sdhci: move initialisation of command error member Russell King
2016-01-29  9:44 ` [PATCH v4 06/25] mmc: sdhci: clean up command error handling Russell King
2016-01-29  9:44 ` [PATCH v4 07/25] mmc: sdhci: command response CRC " Russell King
2016-01-29  9:44 ` [PATCH v4 08/25] mmc: sdhci: avoid unnecessary mapping/unmapping of align buffer Russell King
2016-01-29  9:44 ` [PATCH v4 09/25] mmc: sdhci: allocate alignment and DMA descriptor buffer together Russell King
2016-01-29  9:44 ` [PATCH v4 10/25] mmc: sdhci: clean up coding style in sdhci_adma_table_pre() Russell King
2016-01-29  9:44 ` Russell King [this message]
2016-01-29  9:44 ` [PATCH v4 12/25] mmc: sdhci: factor out common DMA cleanup in sdhci_finish_data() Russell King
2016-01-29  9:44 ` [PATCH v4 13/25] mmc: sdhci: move sdhci_pre_dma_transfer() Russell King
2016-01-29  9:44 ` [PATCH v4 14/25] mmc: sdhci: factor out sdhci_pre_dma_transfer() from sdhci_adma_table_pre() Russell King
2016-01-29  9:45 ` [PATCH v4 15/25] mmc: sdhci: pass the cookie into sdhci_pre_dma_transfer() Russell King
2016-01-29  9:45 ` [PATCH v4 16/25] mmc: sdhci: always unmap a mapped data transfer in sdhci_post_req() Russell King
2016-01-29  9:45 ` [PATCH v4 17/25] mmc: sdhci: clean up host cookie handling Russell King
2016-01-29  9:45 ` [PATCH v4 18/25] mmc: sdhci: plug DMA mapping leak on error Russell King
2016-01-29  9:45 ` [PATCH v4 19/25] mmc: sdhci-pxav3: fix higher speed mode capabilities Russell King
2016-01-29  9:45 ` [PATCH v4 20/25] mmc: sdhci: further fix for DMA unmapping in sdhci_post_req() Russell King
2016-01-29  9:45 ` [PATCH v4 21/25] mmc: sdhci: fix data timeout (part 1) Russell King
2016-01-29  9:45 ` [PATCH v4 22/25] mmc: sdhci: fix data timeout (part 2) Russell King
2016-01-29  9:45 ` [PATCH v4 23/25] mmc: sdhci: prepare DMA address/size quirk handling consolidation Russell King
2016-01-29  9:45 ` [PATCH v4 24/25] mmc: sdhci: consolidate the DMA/ADMA size/address quicks Russell King
2016-01-29  9:45 ` [PATCH v4 25/25] mmc: sdhci: further code simplication Russell King
2016-02-04 10:55 ` [PATCH v4 00/25] MMC/SDHCI fixes Ulf Hansson
2016-02-12  9:49   ` Adrian Hunter
2016-02-12 14:23     ` Gregory CLEMENT
2016-02-16 13:08     ` Ulf Hansson

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=E1aP5be-0001pb-8I@rmk-PC.arm.linux.org.uk \
    --to=rmk+kernel@arm.linux.org.uk \
    --cc=gregory.clement@free-electrons.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-mmc@vger.kernel.org \
    --cc=mw@semihalf.com \
    --cc=shawnguo@kernel.org \
    --cc=ulf.hansson@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox