[RFC/RFT PATCH 0/5] mm: ARM nobootmem and few dma_mask fixes
From: Santosh Shilimkar <hidden>
Date: 2013-07-26 16:29:08
Also in:
linux-mmc, linux-scsi, lkml
Subsystem:
multimedia card (mmc), secure digital (sd) and sdio subsystem, the rest · Maintainers:
Ulf Hansson, Linus Torvalds
On Friday 26 July 2013 11:10 AM, Russell King - ARM Linux wrote:
On Fri, Jul 12, 2013 at 05:48:09PM -0400, Santosh Shilimkar wrote:quoted
The series is an attempt to move ARM port to NO_BOOTMEM. As discussed on list NO_BOOTMEM move needed updates to max*pfn meaning to be maximum PFNs but that breaks the dma_mask for few block layer drivers since ARM start of physical memory is not PFN0 unlike most of the architectures. Some more read on it is here: http://lwn.net/Articles/543408/ http://lwn.net/Articles/543424/ To address this issue, we introduce generic dma_max_pfn() helper which can be overridden from the architectures. Another intention behind move to nobootmem is also to convert ARM to switch to memblock and getting rid of bootmem allocator dependency which don't work for LPAE machines which has physical memory starting beyond 4 GB boundary. It needs changes to core kernel and also a new memblock API. More on this can be found here: https://lkml.org/lkml/2013/6/29/77 I have been trying to cook up these patches with kind help from Russell and we know series don't solve all the dma_mask bad assumptions. But at least I am hoping that it can get the ball rolling. Comments/testing help is welcome !!As this is related to some of the cleanup of dma_mask which I've been doing, I think it may make sense to roll this into one tree. Any objection to that? Can we get any acks on this stuff from Jens and Jejb etc - especially for the bits which touch block/ and for the scsi bits as these are touching other subsystems. (oddly, linux-scsi wasn't on the original mail for this series summary.)
Sorry I missed the scsi lists on the summary patch. While browsing the code I found another spot in mmc layer which needs fixing. The patch is at the end of the email with Chris and linux-mmc cc'ed here. Regards, Santosh
From 06a27a784a1fd86bf22adf1b247ac82a7c21d46b Mon Sep 17 00:00:00 2001
From: Santosh Shilimkar <redacted> Date: Fri, 19 Jul 2013 21:36:46 -0400 Subject: [PATCH] mmc: Use dma_max_pfn(dev) helper for bounce_limit calculations DMA bounce limit is the maximum direct DMA'able memory beyond which bounce buffers has to be used to perform dma operations. MMC queue layer relies on dma_mask but its calculation is based on max_*pfn which don't have uniform meaning across architectures. So make use of dma_max_pfn() which is expected to return the DMAable maximum pfn value across architectures. Cc: Russell King <redacted> Cc: Chris Ball <redacted> Signed-off-by: Santosh Shilimkar <redacted> --- drivers/mmc/card/queue.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c
index fa9632e..357bbc5 100644
--- a/drivers/mmc/card/queue.c
+++ b/drivers/mmc/card/queue.c@@ -15,6 +15,7 @@ #include <linux/freezer.h> #include <linux/kthread.h> #include <linux/scatterlist.h> +#include <linux/dma-mapping.h> #include <linux/mmc/card.h> #include <linux/mmc/host.h>
@@ -196,7 +197,7 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, struct mmc_queue_req *mqrq_prev = &mq->mqrq[1]; if (mmc_dev(host)->dma_mask && *mmc_dev(host)->dma_mask) - limit = *mmc_dev(host)->dma_mask; + limit = dma_max_pfn(mmc_dev(host)) << PAGE_SHIFT; mq->card = card; mq->queue = blk_init_queue(mmc_request_fn, lock);
--
1.7.9.5