linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Russell King - ARM Linux <linux@arm.linux.org.uk>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
	Marcin Wojtas <mw@semihalf.com>,
	Gregory CLEMENT <gregory.clement@free-electrons.com>,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <kernel@pengutronix.de>,
	linux-mmc@vger.kernel.org
Subject: Re: [PATCH v2 08/24] mmc: sdhci: avoid unnecessary mapping/unmapping of align buffer
Date: Mon, 4 Jan 2016 11:56:47 +0000	[thread overview]
Message-ID: <20160104115647.GC19062@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <568A5C88.6030309@intel.com>

On Mon, Jan 04, 2016 at 01:50:32PM +0200, Adrian Hunter wrote:
> On 02/01/16 14:29, Russell King - ARM Linux wrote:
> > On Tue, Dec 29, 2015 at 03:44:38PM +0200, Adrian Hunter wrote:
> >> On 21/12/15 13:41, Russell King wrote:
> >>> Unnecessarily mapping and unmapping the align buffer for SD cards is
> >>> expensive: performance measurements on iMX6 show that this gives a hit
> >>> of 10% on hdparm buffered disk reads.
> >>>
> >>> MMC/SD card IO comes from the mm/vfs which gives us page based IO, so
> >>> for this case, the align buffer is not going to be used.  However, we
> >>> still map and unmap this buffer.
> >>>
> >>> Eliminate this by switching the align buffer to be a DMA coherent
> >>> buffer, which needs no DMA maintenance to access the buffer.
> >>
> >> Did you consider putting the align buffer in the same allocation
> >> as the adma_table?
> > 
> > It's not clear whether host->adma_table_sz would be appropriately
> > aligned.
> > 
> >>> @@ -3003,6 +2972,10 @@ int sdhci_add_host(struct sdhci_host *host)
> >>>  						      host->adma_table_sz,
> >>>  						      &host->adma_addr,
> >>>  						      GFP_KERNEL);
> >>> +		host->align_buffer = dma_alloc_coherent(mmc_dev(mmc),
> >>> +							host->align_buffer_sz,
> >>> +							&host->align_addr,
> >>> +							GFP_KERNEL);
> >>>  		host->align_buffer = kmalloc(host->align_buffer_sz, GFP_KERNEL);
> >>
> >> kmalloc line is still there
> > 
> > Good catch, thanks.
> > 
> >>> +
> >>> +		/* dma_alloc_coherent returns page aligned and sized buffers */
> >>> +		BUG_ON(host->align_addr & host->align_mask);
> >>
> >> It would be nicer not to have any BUG_ON()
> > 
> > This is a situation that should _never_ occur (if it does, then the
> > dma_alloc_coherent() implementation is violating the API requirements,
> > which are to return a page-sized page-aligned buffer.)  I guess it
> > could be a WARN_ON(), but if it fails we're likely to cause data
> > corruption.  So, a WARN_ON() and failing the probe seems more
> > appropriate - but then that means yet more messy cleanup in an already
> > messy part of the driver.
> 
> Isn't there already a cleanup path? i.e.
> 
> 		} else if (host->adma_addr & host->align_mask) {
> 			pr_warn("%s: unable to allocate aligned ADMA descriptor\n",
> 				mmc_hostname(mmc));
> 			host->flags &= ~SDHCI_USE_ADMA;
> 			dma_free_coherent(mmc_dev(mmc), host->adma_table_sz,
> 					  host->adma_table, host->adma_addr);
> 			kfree(host->align_buffer);
> 			host->adma_table = NULL;
> 			host->align_buffer = NULL;
> 		}

It means duplicating this, because the resulting warning would not be
suitable for the alignment buffer.  I'm no fan of misleading printk()s
or duplicating cleanup, especially when the situation should never
occur.

In any case, with the two allocations combined, the BUG_ON() gets
removed again.

-- 
RMK's Patch system: http://www.arm.linux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.

  reply	other threads:[~2016-01-04 11:57 UTC|newest]

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

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=20160104115647.GC19062@n2100.arm.linux.org.uk \
    --to=linux@arm.linux.org.uk \
    --cc=adrian.hunter@intel.com \
    --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;
as well as URLs for NNTP newsgroup(s).