linux-stable/drivers/mmc/core
Paul Burton e85baa8868 mmc: sd: Meet alignment requirements for raw_ssr DMA
The mmc_read_ssr() function results in DMA to the raw_ssr member of
struct mmc_card, which is not guaranteed to be cache line aligned & thus
might not meet the requirements set out in Documentation/DMA-API.txt:

  Warnings:  Memory coherency operates at a granularity called the cache
  line width.  In order for memory mapped by this API to operate
  correctly, the mapped region must begin exactly on a cache line
  boundary and end exactly on one (to prevent two separately mapped
  regions from sharing a single cache line).  Since the cache line size
  may not be known at compile time, the API will not enforce this
  requirement.  Therefore, it is recommended that driver writers who
  don't take special care to determine the cache line size at run time
  only map virtual regions that begin and end on page boundaries (which
  are guaranteed also to be cache line boundaries).

On some systems where DMA is non-coherent this can lead to us losing
data that shares cache lines with the raw_ssr array.

Fix this by kmalloc'ing a temporary buffer to perform DMA into. kmalloc
will ensure the buffer is suitably aligned, allowing the DMA to be
performed without any loss of data.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Fixes: 5275a652d2 ("mmc: sd: Export SD Status via “ssr” device attribute")
Cc: <stable@vger.kernel.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
2016-12-21 08:34:30 +01:00
..
block.c MMC core: 2016-12-14 10:55:56 -08:00
block.h mmc: block: Move files to core 2016-12-12 16:30:05 +01:00
bus.c mmc: core: implement enhanced strobe support 2016-07-25 10:34:05 +02:00
bus.h mmc: rename dev_to_mmc_card() to mmc_dev_to_card() 2010-10-23 21:11:12 +08:00
core.c mmc: core: Further fix thread wake-up 2016-12-20 11:55:04 +01:00
core.h mmc: fix mmc_{un,}register_pm_notifier prototypes 2015-12-22 11:32:09 +01:00
debugfs.c mmc: debugfs: remove BUG_ON from mmc_ext_csd_open 2016-12-05 10:31:09 +01:00
host.c mmc: core: expose MMC_CAP2_NO_* to dt 2016-07-25 10:34:49 +02:00
host.h mmc: host: Add facility to support re-tuning 2015-06-01 09:06:53 +02:00
Kconfig mmc: block: Move files to core 2016-12-12 16:30:05 +01:00
Makefile mmc: block: Move files to core 2016-12-12 16:30:05 +01:00
mmc.c mmc: mmc: Relax checking for switch errors after HS200 switch 2016-12-05 14:15:46 +01:00
mmc_ops.c mmc: mmc: Introduce mmc_abort_tuning() 2016-12-05 14:16:22 +01:00
mmc_ops.h mmc: mmc: Relax checking for switch errors after HS200 switch 2016-12-05 14:15:46 +01:00
mmc_test.c mmc: block: Move files to core 2016-12-12 16:30:05 +01:00
pwrseq.c mmc: pwrseq: convert to proper platform device 2016-05-02 10:33:30 +02:00
pwrseq.h mmc: pwrseq: convert to proper platform device 2016-05-02 10:33:30 +02:00
pwrseq_emmc.c mmc: pwrseq: convert to proper platform device 2016-05-02 10:33:30 +02:00
pwrseq_simple.c mmc: pwrseq-simple: Add an optional post-power-on-delay 2016-09-26 21:31:07 +02:00
queue.c MMC core: 2016-12-14 10:55:56 -08:00
queue.h mmc: block: Move files to core 2016-12-12 16:30:05 +01:00
quirks.c mmc: core: Disable HPI for certain Hynix eMMC cards 2016-07-25 10:34:12 +02:00
sd.c mmc: sd: Meet alignment requirements for raw_ssr DMA 2016-12-21 08:34:30 +01:00
sd.h mmc: drop the speed mode of card's state 2014-05-12 18:05:53 -04:00
sd_ops.c mmc: core: remove BUG_ONs from sd 2016-12-05 10:31:10 +01:00
sd_ops.h
sdio.c mmc: core: remove BUG_ONs from sdio 2016-12-05 10:31:08 +01:00
sdio_bus.c mmc: enable MMC/SD/SDIO device to suspend/resume asynchronously 2015-12-22 11:32:16 +01:00
sdio_bus.h
sdio_cis.c mmc: core: remove BUG_ONs from sdio 2016-12-05 10:31:08 +01:00
sdio_cis.h
sdio_io.c mmc: sdio: deploy error handling instead of triggering BUG_ON 2016-09-26 21:31:15 +02:00
sdio_irq.c mmc: core: remove BUG_ONs from sdio 2016-12-05 10:31:08 +01:00
sdio_ops.c mmc: sdio: deploy error handling instead of triggering BUG_ON 2016-09-26 21:31:15 +02:00
sdio_ops.h mmc: Add mmc_is_io_op helper function 2015-10-26 16:00:01 +01:00
sdio_uart.c mmc: block: Move files to core 2016-12-12 16:30:05 +01:00
slot-gpio.c mmc: core: expose the capability of gpio card detect 2016-11-29 09:00:37 +01:00
slot-gpio.h mmc: slot-gpio: Make mmc_gpio_alloc() available for MMC core 2015-01-19 09:56:17 +01:00