Message ID | 1372410662-3748-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Fri, Jun 28, 2013 at 02:40:59PM +0530, Aneesh Kumar K.V wrote: > From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> > > We want to use CMA for allocating hash page table and real mode area for > PPC64. Hence move DMA contiguous related changes into a seperate config > so that ppc64 can enable CMA without requiring DMA contiguous. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Acked-by: Paul Mackerras <paulus@samba.org> When you send out the next version, please cc kvm-ppc@vger.kernel.org, kvm@vger.kernel.org and Alexander Graf <agraf@suse.de>. Paul.
On Fri, Jun 28 2013, Aneesh Kumar K.V wrote: > From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> > > We want to use CMA for allocating hash page table and real mode area for > PPC64. Hence move DMA contiguous related changes into a seperate config > so that ppc64 can enable CMA without requiring DMA contiguous. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Acked-by: Michal Nazarewicz <mina86@mina86.com> > diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig > index 07abd9d..74b7c98 100644 > --- a/drivers/base/Kconfig > +++ b/drivers/base/Kconfig > @@ -202,11 +202,10 @@ config DMA_SHARED_BUFFER > APIs extension; the file's descriptor can then be passed on to other > driver. > > -config CMA > - bool "Contiguous Memory Allocator" > - depends on HAVE_DMA_CONTIGUOUS && HAVE_MEMBLOCK > - select MIGRATION > - select MEMORY_ISOLATION > +config DMA_CMA > + bool "DMA Contiguous Memory Allocator" > + depends on HAVE_DMA_CONTIGUOUS > + select CMA Just to be on the safe side, I'd add depends on HAVE_MEMBLOCK or change this so that it does not select CMA but depends on CMA. > help > This enables the Contiguous Memory Allocator which allows drivers > to allocate big physically-contiguous blocks of memory for use with > @@ -215,17 +214,7 @@ config CMA > For more information see <include/linux/dma-contiguous.h>. > If unsure, say "n". > > -if CMA > - > -config CMA_DEBUG > - bool "CMA debug messages (DEVELOPMENT)" > - depends on DEBUG_KERNEL > - help > - Turns on debug messages in CMA. This produces KERN_DEBUG > - messages for every CMA call as well as various messages while > - processing calls such as dma_alloc_from_contiguous(). > - This option does not affect warning and error messages. > - > +if DMA_CMA > comment "Default contiguous memory area size:" > > config CMA_SIZE_MBYTES > diff --git a/include/linux/dma-contiguous.h b/include/linux/dma-contiguous.h > index 01b5c84..00141d3 100644 > --- a/include/linux/dma-contiguous.h > +++ b/include/linux/dma-contiguous.h > @@ -57,7 +57,7 @@ struct cma; > struct page; > struct device; > > -#ifdef CONFIG_CMA > +#ifdef CONFIG_DMA_CMA > > /* > * There is always at least global CMA area and a few optional device > diff --git a/mm/Kconfig b/mm/Kconfig > index e742d06..26a5f81 100644 > --- a/mm/Kconfig > +++ b/mm/Kconfig > @@ -477,3 +477,27 @@ config FRONTSWAP > and swap data is stored as normal on the matching swap device. > > If unsure, say Y to enable frontswap. > + > +config CMA > + bool "Contiguous Memory Allocator" > + depends on HAVE_MEMBLOCK > + select MIGRATION > + select MEMORY_ISOLATION > + help > + This enables the Contiguous Memory Allocator which allows other > + subsystems to allocate big physically-contiguous blocks of memory. > + CMA reserves a region of memory and allows only movable pages to > + be allocated from it. This way, the kernel can use the memory for > + pagecache and when a subsystem requests for contiguous area, the > + allocated pages are migrated away to serve the contiguous request. > + > + If unsure, say "n". > + > +config CMA_DEBUG > + bool "CMA debug messages (DEVELOPMENT)" > + depends on DEBUG_KERNEL && CMA > + help > + Turns on debug messages in CMA. This produces KERN_DEBUG > + messages for every CMA call as well as various messages while > + processing calls such as dma_alloc_from_contiguous(). > + This option does not affect warning and error messages. > -- > 1.8.1.2 >
Michal Nazarewicz <mina86@mina86.com> writes: > On Fri, Jun 28 2013, Aneesh Kumar K.V wrote: >> From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> >> >> We want to use CMA for allocating hash page table and real mode area for >> PPC64. Hence move DMA contiguous related changes into a seperate config >> so that ppc64 can enable CMA without requiring DMA contiguous. >> >> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> > > Acked-by: Michal Nazarewicz <mina86@mina86.com> > >> diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig >> index 07abd9d..74b7c98 100644 >> --- a/drivers/base/Kconfig >> +++ b/drivers/base/Kconfig >> @@ -202,11 +202,10 @@ config DMA_SHARED_BUFFER >> APIs extension; the file's descriptor can then be passed on to other >> driver. >> >> -config CMA >> - bool "Contiguous Memory Allocator" >> - depends on HAVE_DMA_CONTIGUOUS && HAVE_MEMBLOCK >> - select MIGRATION >> - select MEMORY_ISOLATION >> +config DMA_CMA >> + bool "DMA Contiguous Memory Allocator" >> + depends on HAVE_DMA_CONTIGUOUS >> + select CMA > > Just to be on the safe side, I'd add > > depends on HAVE_MEMBLOCK > > or change this so that it does not select CMA but depends on CMA. updated this to +config DMA_CMA + bool "DMA Contiguous Memory Allocator" + depends on HAVE_DMA_CONTIGUOUS && CMA > >> help >> This enables the Contiguous Memory Allocator which allows drivers >> to allocate big physically-contiguous blocks of memory for use with >> @@ -215,17 +214,7 @@ config CMA >> For more information see <include/linux/dma-contiguous.h>. >> If unsure, say "n". >> >> -if CMA >> - >> -config CMA_DEBUG >> - bool "CMA debug messages (DEVELOPMENT)" >> - depends on DEBUG_KERNEL >> - help >> - Turns on debug messages in CMA. This produces KERN_DEBUG >> - messages for every CMA call as well as various messages while >> - processing calls such as dma_alloc_from_contiguous(). >> - This option does not affect warning and error messages. >> - Thanks -aneesh
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index abbe319..098268f 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig @@ -71,7 +71,7 @@ CONFIG_MAC80211=m CONFIG_MAC80211_RC_PID=y CONFIG_MAC80211_RC_DEFAULT_PID=y CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_CMA=y +CONFIG_DMA_CMA=y CONFIG_CONNECTOR=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig index f7ba3161..34ae8f2 100644 --- a/arch/arm/configs/tegra_defconfig +++ b/arch/arm/configs/tegra_defconfig @@ -79,7 +79,7 @@ CONFIG_RFKILL_GPIO=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y # CONFIG_FIRMWARE_IN_KERNEL is not set -CONFIG_CMA=y +CONFIG_DMA_CMA=y CONFIG_MTD=y CONFIG_MTD_CHAR=y CONFIG_MTD_M25P80=y diff --git a/arch/arm/include/asm/dma-contiguous.h b/arch/arm/include/asm/dma-contiguous.h index 3ed37b4..e072bb2 100644 --- a/arch/arm/include/asm/dma-contiguous.h +++ b/arch/arm/include/asm/dma-contiguous.h @@ -2,7 +2,7 @@ #define ASMARM_DMA_CONTIGUOUS_H #ifdef __KERNEL__ -#ifdef CONFIG_CMA +#ifdef CONFIG_DMA_CMA #include <linux/types.h> #include <asm-generic/dma-contiguous.h> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index ef3e0f3..1fb40dc 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -358,7 +358,7 @@ static int __init atomic_pool_init(void) if (!pages) goto no_pages; - if (IS_ENABLED(CONFIG_CMA)) + if (IS_ENABLED(CONFIG_DMA_CMA)) ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page, atomic_pool_init); else @@ -670,7 +670,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, addr = __alloc_simple_buffer(dev, size, gfp, &page); else if (!(gfp & __GFP_WAIT)) addr = __alloc_from_pool(size, &page); - else if (!IS_ENABLED(CONFIG_CMA)) + else if (!IS_ENABLED(CONFIG_DMA_CMA)) addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller); else addr = __alloc_from_contiguous(dev, size, prot, &page, caller); @@ -759,7 +759,7 @@ static void __arm_dma_free(struct device *dev, size_t size, void *cpu_addr, __dma_free_buffer(page, size); } else if (__free_from_pool(cpu_addr, size)) { return; - } else if (!IS_ENABLED(CONFIG_CMA)) { + } else if (!IS_ENABLED(CONFIG_DMA_CMA)) { __dma_free_remap(cpu_addr, size); __dma_free_buffer(page, size); } else { diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig index 07abd9d..74b7c98 100644 --- a/drivers/base/Kconfig +++ b/drivers/base/Kconfig @@ -202,11 +202,10 @@ config DMA_SHARED_BUFFER APIs extension; the file's descriptor can then be passed on to other driver. -config CMA - bool "Contiguous Memory Allocator" - depends on HAVE_DMA_CONTIGUOUS && HAVE_MEMBLOCK - select MIGRATION - select MEMORY_ISOLATION +config DMA_CMA + bool "DMA Contiguous Memory Allocator" + depends on HAVE_DMA_CONTIGUOUS + select CMA help This enables the Contiguous Memory Allocator which allows drivers to allocate big physically-contiguous blocks of memory for use with @@ -215,17 +214,7 @@ config CMA For more information see <include/linux/dma-contiguous.h>. If unsure, say "n". -if CMA - -config CMA_DEBUG - bool "CMA debug messages (DEVELOPMENT)" - depends on DEBUG_KERNEL - help - Turns on debug messages in CMA. This produces KERN_DEBUG - messages for every CMA call as well as various messages while - processing calls such as dma_alloc_from_contiguous(). - This option does not affect warning and error messages. - +if DMA_CMA comment "Default contiguous memory area size:" config CMA_SIZE_MBYTES diff --git a/drivers/base/Makefile b/drivers/base/Makefile index 4e22ce3..5d93bb5 100644 --- a/drivers/base/Makefile +++ b/drivers/base/Makefile @@ -6,7 +6,7 @@ obj-y := core.o bus.o dd.o syscore.o \ attribute_container.o transport_class.o \ topology.o obj-$(CONFIG_DEVTMPFS) += devtmpfs.o -obj-$(CONFIG_CMA) += dma-contiguous.o +obj-$(CONFIG_DMA_CMA) += dma-contiguous.o obj-y += power/ obj-$(CONFIG_HAS_DMA) += dma-mapping.o obj-$(CONFIG_HAVE_GENERIC_DMA_COHERENT) += dma-coherent.o diff --git a/include/linux/dma-contiguous.h b/include/linux/dma-contiguous.h index 01b5c84..00141d3 100644 --- a/include/linux/dma-contiguous.h +++ b/include/linux/dma-contiguous.h @@ -57,7 +57,7 @@ struct cma; struct page; struct device; -#ifdef CONFIG_CMA +#ifdef CONFIG_DMA_CMA /* * There is always at least global CMA area and a few optional device diff --git a/mm/Kconfig b/mm/Kconfig index e742d06..26a5f81 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -477,3 +477,27 @@ config FRONTSWAP and swap data is stored as normal on the matching swap device. If unsure, say Y to enable frontswap. + +config CMA + bool "Contiguous Memory Allocator" + depends on HAVE_MEMBLOCK + select MIGRATION + select MEMORY_ISOLATION + help + This enables the Contiguous Memory Allocator which allows other + subsystems to allocate big physically-contiguous blocks of memory. + CMA reserves a region of memory and allows only movable pages to + be allocated from it. This way, the kernel can use the memory for + pagecache and when a subsystem requests for contiguous area, the + allocated pages are migrated away to serve the contiguous request. + + If unsure, say "n". + +config CMA_DEBUG + bool "CMA debug messages (DEVELOPMENT)" + depends on DEBUG_KERNEL && CMA + help + Turns on debug messages in CMA. This produces KERN_DEBUG + messages for every CMA call as well as various messages while + processing calls such as dma_alloc_from_contiguous(). + This option does not affect warning and error messages.