[patch v2 4/4] x86: allow CONFIG_ISA_DMA_API to be disabled

From: David Rientjes
Date: Thu Jan 27 2011 - 16:48:42 EST

On Thu, 27 Jan 2011, Arnd Bergmann wrote:

> But the x86_64 machines can also run 32 bit kernel, and I would expect
> that they don't need ISA DMA in that configuration either.
> I think it would make sense to let the CONFIG_EXPERT user disable
> DMA for 32 bit as well.

Hmm, ok, I originally thought that allowing it to be disabled for 32-bit
would cause people to regret it later when using pnp, for instance, and
finding they need to require ISA-style DMA support for their devices. I
agree, though, that allowing CONFIG_EXPERT to disable it even for 32-bit
sounds appropriate since they ultimately know what devices they're
limiting their kernel from using. Thanks!

x86: allow CONFIG_ISA_DMA_API to be disabled

Not all 64-bit systems require ISA-style DMA, so allow it to be
configurable. x86 utilizes the generic ISA DMA allocator from
kernel/dma.c, so require it only when CONFIG_ISA_DMA_API is enabled.

64-bit systems may compile a 32-bit kernel, so allow disabling it for
i386 as well.

Disabling CONFIG_ISA_DMA_API is dependent on CONFIG_EXPERT as required by
H. Peter Anvin.

When disabled, this also avoids declaring claim_dma_lock(),
release_dma_lock(), request_dma(), and free_dma() since those interfaces
will no longer be provided.

Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx>
arch/x86/Kconfig | 10 +++++++---
arch/x86/include/asm/dma.h | 6 +++++-
2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -119,7 +119,7 @@ config NEED_SG_DMA_LENGTH
def_bool y

- def_bool y
+ def_bool ISA_DMA_API

def_bool y
@@ -2000,9 +2000,13 @@ source "drivers/pci/pcie/Kconfig"

source "drivers/pci/Kconfig"

-# x86_64 have no ISA slots, but do have ISA-style DMA.
+# x86_64 have no ISA slots, but can have ISA-style DMA.
config ISA_DMA_API
- def_bool y
+ bool "ISA-style DMA support" if EXPERT
+ default y
+ help
+ Enables ISA-style DMA support for devices requiring such controllers.
+ If unsure, say Y.

if X86_32

diff --git a/arch/x86/include/asm/dma.h b/arch/x86/include/asm/dma.h
--- a/arch/x86/include/asm/dma.h
+++ b/arch/x86/include/asm/dma.h
@@ -151,6 +151,7 @@
#define DMA_AUTOINIT 0x10

extern spinlock_t dma_spin_lock;

static inline unsigned long claim_dma_lock(void)
@@ -164,6 +165,7 @@ static inline void release_dma_lock(unsigned long flags)
spin_unlock_irqrestore(&dma_spin_lock, flags);
+#endif /* CONFIG_ISA_DMA_API */

/* enable/disable a specific DMA channel */
static inline void enable_dma(unsigned int dmanr)
@@ -303,9 +305,11 @@ static inline int get_dma_residue(unsigned int dmanr)

-/* These are in kernel/dma.c: */
+/* These are in kernel/dma.c because x86 uses CONFIG_GENERIC_ISA_DMA */
extern int request_dma(unsigned int dmanr, const char *device_id);
extern void free_dma(unsigned int dmanr);

/* From PCI */

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/