Skip to contentSkip to conversation

ARM: relax conditions required for enabling Contiguous Memory Allocator

PATCH New Marek Szyprowski 4 participants 6 messages Aug 20, 2012 – Aug 21, 2012 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM: relax conditions required for enabling Contiguous Memory Allocator

Contiguous Memory Allocator requires only paging and MMU enabled not particular CPU architectures, so there is no need for strict dependency on CPU type. This enables to use CMA on some older ARM v5 systems which also might need large contiguous blocks for the multimedia processing hw modules.

---
 arch/arm/Kconfig |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/Kconfig +1 -1
index e91c7cd..6ef75e2 100644
@@ -6,7 +6,7 @@ config ARM
 	select HAVE_DMA_API_DEBUG
 	select HAVE_IDE if PCI || ISA || PCMCIA
 	select HAVE_DMA_ATTRS
-	select HAVE_DMA_CONTIGUOUS if (CPU_V6 || CPU_V6K || CPU_V7)
+	select HAVE_DMA_CONTIGUOUS if MMU
 	select HAVE_MEMBLOCK
 	select RTC_LIB
 	select SYS_SUPPORTS_APM_EMULATION
Signature · 1 line
1.7.1.569.g6f426
#1 lore raw

PATCH 1/1 ARM: relax conditions required for enabling Contiguous Memory Allocator

Hi Marek,

Thanks for the patch.

Quoted 7 lines · Marek Szyprowski

Contiguous Memory Allocator requires only paging and MMU enabled not particular CPU architectures, so there is no need for strict dependency on CPU type. This enables to use CMA on some older ARM v5 systems which also might need large contiguous blocks for the multimedia processing hw modules.

Thx,
--Prabhakar

Quoted 19 lines
---
 arch/arm/Kconfig |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/Kconfig +1 -1
index e91c7cd..6ef75e2 100644
@@ -6,7 +6,7 @@ config ARM
 	select HAVE_DMA_API_DEBUG
 	select HAVE_IDE if PCI || ISA || PCMCIA
 	select HAVE_DMA_ATTRS
-	select HAVE_DMA_CONTIGUOUS if (CPU_V6 || CPU_V6K || CPU_V7)
+	select HAVE_DMA_CONTIGUOUS if MMU
 	select HAVE_MEMBLOCK
 	select RTC_LIB
 	select SYS_SUPPORTS_APM_EMULATION
#2 lore raw

PATCH 1/1 ARM: relax conditions required for enabling Contiguous Memory Allocator

In reply to Marek Szyprowski
Quoted 8 lines · Marek Szyprowski

Contiguous Memory Allocator requires only paging and MMU enabled not particular CPU architectures, so there is no need for strict dependency on CPU type. This enables to use CMA on some older ARM v5 systems which also might need large contiguous blocks for the multimedia processing hw modules.

The patch looks simple, but I want a better explanation for it. When we went through all possible cases, we decided that:

* ARMv6+ need CMA to avoid the double mapping problem.
* ARMv4/v5 cannot generally use CMA because it doesn't work together with DMABOUNCE. I don't remember if it was the only problem, but I definitely remember this was intentional.
* We want a common kernel for all ARMv6+ eventually, and a separate kernel for all ARMv4/v5 ones.

If the reasoning has changed, please try to explain the full situation. On a related topic, what happened to the idea that ARMv6+ is broken without CMA? I noticed that it's optional now.

Arnd

#3 lore raw

PATCH 1/1 ARM: relax conditions required for enabling Contiguous Memory Allocator

Quoted 10 lines · Arnd Bergmann

The patch looks simple, but I want a better explanation for it. When we went through all possible cases, we decided that:

* ARMv6+ need CMA to avoid the double mapping problem.
* ARMv4/v5 cannot generally use CMA because it doesn't work together with DMABOUNCE. I don't remember if it was the only problem, but I definitely remember this was intentional.
* We want a common kernel for all ARMv6+ eventually, and a separate kernel for all ARMv4/v5 ones.

Quoted 2 lines

If the reasoning has changed, please try to explain the full situation.

Indeed.

Quoted 3 lines

On a related topic, what happened to the idea that ARMv6+ is broken without CMA? I noticed that it's optional now.

With Marek's patch, it's always selected for MMU-based builds (it can't be disabled). Before the patch, it was always selected for V6 and later CPUs.

And the description doesn't make sense:

"Contiguous Memory Allocator requires only paging and MMU enabled not particular CPU architectures,"

what does "only paging and MMU enabled" mean? Are you trying to say that CMA only requires a kernel with MMU support?

#4 lore raw

PATCH 1/1 ARM: relax conditions required for enabling Contiguous Memory Allocator

Hello,

Quoted 16 lines · Russell King - ARM Linux
Quoted 10 lines · Arnd Bergmann

The patch looks simple, but I want a better explanation for it. When we went through all possible cases, we decided that:

* ARMv6+ need CMA to avoid the double mapping problem.
* ARMv4/v5 cannot generally use CMA because it doesn't work together with DMABOUNCE. I don't remember if it was the only problem, but I definitely remember this was intentional.
* We want a common kernel for all ARMv6+ eventually, and a separate kernel for all ARMv4/v5 ones.

Quoted 2 lines

If the reasoning has changed, please try to explain the full situation.

Indeed.

Quoted 7 lines
Quoted 3 lines

On a related topic, what happened to the idea that ARMv6+ is broken without CMA? I noticed that it's optional now.

With Marek's patch, it's always selected for MMU-based builds (it can't be disabled). Before the patch, it was always selected for V6 and later CPUs.

My patch only alters dependences of HAVE_DMA_CONTIGUOUS symbol, by changing them from CPU_V6+ to MMU. It doesn't change or select CMA for any of the systems - this is done by the CONFIG_CMA symbol from drivers/base/KConfig which depends on HAVE_DMA_CONTIGUOUS. It is up to user to enable it or not.

Quoted 7 lines

And the description doesn't make sense:

"Contiguous Memory Allocator requires only paging and MMU enabled not particular CPU architectures,"

what does "only paging and MMU enabled" mean? Are you trying to say that CMA only requires a kernel with MMU support?

On ARM architecture CMA can be enabled on any system which has MMU support, MMU is required for page migration. The integration layer in dma-mapping is generic enough to work on any ARM architecture.

Best regards

Signature · 2 lines
Marek Szyprowski
Samsung Poland R&D Center
#5 lore raw

PATCH 1/1 ARM: relax conditions required for enabling Contiguous Memory Allocator

In reply to Arnd Bergmann

Hello,

Quoted 7 lines · Arnd Bergmann
Quoted 6 lines · Marek Szyprowski

Contiguous Memory Allocator requires only paging and MMU enabled not particular CPU architectures, so there is no need for strict dependency on CPU type. This enables to use CMA on some older ARM v5 systems which also might need large contiguous blocks for the multimedia processing hw modules.

Quoted 7 lines
Quoted 2 lines

The patch looks simple, but I want a better explanation for it. When we went through all possible cases, we decided that:

* ARMv6+ need CMA to avoid the double mapping problem.

Right. CMA can be used to avoid double mapping issues, but we also should keep in mind that right now no one observed any issues with the real hw, so this discussion is still a bit hypothetical.

Quoted 3 lines

* ARMv4/v5 cannot generally use CMA because it doesn't work together with DMABOUNCE. I don't remember if it was the only problem, but I definitely remember this was intentional.

DMABOUNCE is used only by a few machines. I also tested and see no reason why it might cause problems with such machines. I've used DMABOUNCE code to test atomic allocations many times and found no problems. The only issue I might suspect is a very limited DMA zone. CMA needs 4Mib alignment of the contiguous area base and size to meet requirements of the memory management core (mainly for migration and page isolation purposes), so it might not fit into some small DMA zones.

Quoted 2 lines

* We want a common kernel for all ARMv6+ eventually, and a separate kernel for all ARMv4/v5 ones.

I see no problem here, if required why may have even a separate dma_map_ops for CMA and use it only for selected devices.

Quoted 5 lines

If the reasoning has changed, please try to explain the full situation. On a related topic, what happened to the idea that ARMv6+ is broken without CMA? I noticed that it's optional now.

Right. I removed unconditional dependency on CMA on Russell's request. CMA is still experimental and there are still some known issues with it, which we are investigating. It doesn't make sense to make the whole architecture depending on the experimental stuff. The old method of allocating and managing coherent buffers was stable and worked well enough for the drivers and platforms already present in the mainline kernel, so if one want to use stable stuff I see no reason to disable it.

Best regards

Signature · 2 lines
Marek Szyprowski
Samsung Poland R&D Center