[linux-yocto] [PATCH 07/14] spi: bcm2835: BUG: fix wrong use of PAGE_MASK
Weifeng Voon
weifeng.voon at intel.com
Thu Jun 16 01:25:44 PDT 2016
From: Martin Sperl <kernel at martin.sperl.org>
There is a bug in the alignment checking of transfers,
that results in DMA not being used for un-aligned
transfers that do not cross page-boundries, which is valid.
This is due to a missconception of the meaning PAGE_MASK
when implementing that check originally - (PAGE_SIZE - 1)
should have been used instead.
Also fixes a copy/paste error.
Reported-by: <robert at axium.co.nz>
Signed-off-by: Martin Sperl <kernel at martin.sperl.org>
Signed-off-by: Mark Brown <broonie at kernel.org>
Cc: stable at vger.kernel.org
(cherry picked from commit 2a3fffd45822070309bcf0b1e1dae624d633824a)
Signed-off-by: Weifeng Voon <weifeng.voon at intel.com>
---
drivers/spi/spi-bcm2835.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
index e7874a6..3e8eeb2 100644
--- a/drivers/spi/spi-bcm2835.c
+++ b/drivers/spi/spi-bcm2835.c
@@ -386,14 +386,14 @@ static bool bcm2835_spi_can_dma(struct spi_master *master,
/* otherwise we only allow transfers within the same page
* to avoid wasting time on dma_mapping when it is not practical
*/
- if (((size_t)tfr->tx_buf & PAGE_MASK) + tfr->len > PAGE_SIZE) {
+ if (((size_t)tfr->tx_buf & (PAGE_SIZE - 1)) + tfr->len > PAGE_SIZE) {
dev_warn_once(&spi->dev,
"Unaligned spi tx-transfer bridging page\n");
return false;
}
- if (((size_t)tfr->rx_buf & PAGE_MASK) + tfr->len > PAGE_SIZE) {
+ if (((size_t)tfr->rx_buf & (PAGE_SIZE - 1)) + tfr->len > PAGE_SIZE) {
dev_warn_once(&spi->dev,
- "Unaligned spi tx-transfer bridging page\n");
+ "Unaligned spi rx-transfer bridging page\n");
return false;
}
--
1.9.1
More information about the linux-yocto
mailing list