LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled
@ 2011-01-27 3:14 David Rientjes
2011-01-27 3:14 ` [patch 2/4] x86: only compile 8237A " David Rientjes
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: David Rientjes @ 2011-01-27 3:14 UTC (permalink / raw)
To: Andrew Morton, Adam Belay, Bjorn Helgaas
Cc: Ingo Molnar, H. Peter Anvin, Thomas Gleixner, Russell King, x86,
linux-kernel
IORESOURCE_DMA cannot be assigned without utilizing the interface
provided by CONFIG_ISA_DMA_API, specifically request_dma() and
free_dma(). Thus, there's a strict dependency on the config option and
limits IORESOURCE_DMA only to architectures that support ISA-style DMA.
ia64 is not one of those architectures, so pnp_check_dma() no longer
needs to be special-cased for that architecture.
pnp_assign_resources() will now return -EINVAL if IORESOURCE_DMA is
attempted on such a kernel.
Signed-off-by: David Rientjes <rientjes@google.com>
---
drivers/pnp/base.h | 2 ++
drivers/pnp/manager.c | 7 ++++++-
drivers/pnp/resource.c | 7 ++-----
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/pnp/base.h b/drivers/pnp/base.h
--- a/drivers/pnp/base.h
+++ b/drivers/pnp/base.h
@@ -142,7 +142,9 @@ void __pnp_remove_device(struct pnp_dev *dev);
int pnp_check_port(struct pnp_dev *dev, struct resource *res);
int pnp_check_mem(struct pnp_dev *dev, struct resource *res);
int pnp_check_irq(struct pnp_dev *dev, struct resource *res);
+#ifdef CONFIG_ISA_DMA_API
int pnp_check_dma(struct pnp_dev *dev, struct resource *res);
+#endif
char *pnp_resource_type_name(struct resource *res);
void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c
--- a/drivers/pnp/manager.c
+++ b/drivers/pnp/manager.c
@@ -171,6 +171,7 @@ __add:
return 0;
}
+#ifdef CONFIG_ISA_DMA_API
static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
{
struct resource *res, local_res;
@@ -210,6 +211,7 @@ __add:
pnp_add_dma_resource(dev, res->start, res->flags);
return 0;
}
+#endif /* CONFIG_ISA_DMA_API */
void pnp_init_resources(struct pnp_dev *dev)
{
@@ -234,7 +236,8 @@ static void pnp_clean_resource_table(struct pnp_dev *dev)
static int pnp_assign_resources(struct pnp_dev *dev, int set)
{
struct pnp_option *option;
- int nport = 0, nmem = 0, nirq = 0, ndma = 0;
+ int nport = 0, nmem = 0, nirq = 0;
+ int ndma __maybe_unused = 0;
int ret = 0;
pnp_dbg(&dev->dev, "pnp_assign_resources, try dependent set %d\n", set);
@@ -256,9 +259,11 @@ static int pnp_assign_resources(struct pnp_dev *dev, int set)
case IORESOURCE_IRQ:
ret = pnp_assign_irq(dev, &option->u.irq, nirq++);
break;
+#ifdef CONFIG_ISA_DMA_API
case IORESOURCE_DMA:
ret = pnp_assign_dma(dev, &option->u.dma, ndma++);
break;
+#endif
default:
ret = -EINVAL;
break;
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c
--- a/drivers/pnp/resource.c
+++ b/drivers/pnp/resource.c
@@ -409,9 +409,9 @@ int pnp_check_irq(struct pnp_dev *dev, struct resource *res)
return 1;
}
+#ifdef CONFIG_ISA_DMA_API
int pnp_check_dma(struct pnp_dev *dev, struct resource *res)
{
-#ifndef CONFIG_IA64
int i;
struct pnp_dev *tdev;
struct resource *tres;
@@ -466,11 +466,8 @@ int pnp_check_dma(struct pnp_dev *dev, struct resource *res)
}
return 1;
-#else
- /* IA64 does not have legacy DMA */
- return 0;
-#endif
}
+#endif /* CONFIG_ISA_DMA_API */
unsigned long pnp_resource_type(struct resource *res)
{
^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch 2/4] x86: only compile 8237A if CONFIG_ISA_DMA_API is enabled
2011-01-27 3:14 [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled David Rientjes
@ 2011-01-27 3:14 ` David Rientjes
2011-01-27 3:14 ` [patch 3/4] x86: only compile floppy driver " David Rientjes
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: David Rientjes @ 2011-01-27 3:14 UTC (permalink / raw)
To: Andrew Morton, Ingo Molnar, H. Peter Anvin, Thomas Gleixner
Cc: Adam Belay, Bjorn Helgaas, Russell King, x86, linux-kernel
8237A utilizes the interface provided by CONFIG_ISA_DMA_API, specifically
claim_dma_lock() and release_dma_lock(). Thus, there's a strict
dependency on the config option and the module should only be loaded if
the kernel supports ISA-style DMA.
Signed-off-by: David Rientjes <rientjes@google.com>
---
arch/x86/kernel/Makefile | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -41,12 +41,13 @@ obj-$(CONFIG_X86_32) += sys_i386_32.o i386_ksyms_32.o
obj-$(CONFIG_X86_64) += sys_x86_64.o x8664_ksyms_64.o
obj-$(CONFIG_X86_64) += syscall_64.o vsyscall_64.o
obj-y += bootflag.o e820.o
-obj-y += pci-dma.o quirks.o i8237.o topology.o kdebugfs.o
+obj-y += pci-dma.o quirks.o topology.o kdebugfs.o
obj-y += alternative.o i8253.o pci-nommu.o hw_breakpoint.o
obj-y += tsc.o io_delay.o rtc.o
obj-y += pci-iommu_table.o
obj-y += resource.o
+obj-$(CONFIG_ISA_DMA_API) += i8237.o
obj-$(CONFIG_X86_TRAMPOLINE) += trampoline.o
obj-y += process.o
obj-y += i387.o xsave.o
^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch 3/4] x86: only compile floppy driver if CONFIG_ISA_DMA_API is enabled
2011-01-27 3:14 [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled David Rientjes
2011-01-27 3:14 ` [patch 2/4] x86: only compile 8237A " David Rientjes
@ 2011-01-27 3:14 ` David Rientjes
2011-01-27 3:14 ` [patch 4/4] x86: allow CONFIG_ISA_DMA_API to be disabled David Rientjes
2011-02-03 20:01 ` [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled David Rientjes
3 siblings, 0 replies; 7+ messages in thread
From: David Rientjes @ 2011-01-27 3:14 UTC (permalink / raw)
To: Andrew Morton, Ingo Molnar, H. Peter Anvin, Thomas Gleixner
Cc: Adam Belay, Bjorn Helgaas, Russell King, x86, linux-kernel
The generic floppy disk driver utilizies the interface provided by
CONFIG_ISA_DMA_API, specifically claim_dma_lock(), release_dma_lock(),
request_dma(), and free_dma(). Thus, there's a strict dependency on the
config option and the driver should only be loaded if the kernel supports
ISA-style DMA.
Signed-off-by: David Rientjes <rientjes@google.com>
---
arch/x86/Kconfig | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -139,7 +139,7 @@ config GENERIC_GPIO
bool
config ARCH_MAY_HAVE_PC_FDC
- def_bool y
+ def_bool ISA_DMA_API
config RWSEM_GENERIC_SPINLOCK
def_bool !X86_XADD
^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch 4/4] x86: allow CONFIG_ISA_DMA_API to be disabled
2011-01-27 3:14 [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled David Rientjes
2011-01-27 3:14 ` [patch 2/4] x86: only compile 8237A " David Rientjes
2011-01-27 3:14 ` [patch 3/4] x86: only compile floppy driver " David Rientjes
@ 2011-01-27 3:14 ` David Rientjes
2011-01-27 8:23 ` Arnd Bergmann
2011-02-03 20:01 ` [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled David Rientjes
3 siblings, 1 reply; 7+ messages in thread
From: David Rientjes @ 2011-01-27 3:14 UTC (permalink / raw)
To: Andrew Morton, Ingo Molnar, H. Peter Anvin, Thomas Gleixner
Cc: Adam Belay, Bjorn Helgaas, Russell King, x86, linux-kernel
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.
Disabling CONFIG_ISA_DMA_API is dependent on x86_64 since those machines
do not have ISA slots and benefit the most from disabling the option (and
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@google.com>
---
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
config GENERIC_ISA_DMA
- def_bool y
+ def_bool ISA_DMA_API
config GENERIC_IOMAP
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 (X86_64 && 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
+#ifdef CONFIG_ISA_DMA_API
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 */
+#ifdef CONFIG_ISA_DMA_API
extern int request_dma(unsigned int dmanr, const char *device_id);
extern void free_dma(unsigned int dmanr);
+#endif
/* From PCI */
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [patch 4/4] x86: allow CONFIG_ISA_DMA_API to be disabled
2011-01-27 3:14 ` [patch 4/4] x86: allow CONFIG_ISA_DMA_API to be disabled David Rientjes
@ 2011-01-27 8:23 ` Arnd Bergmann
2011-01-27 21:48 ` [patch v2 " David Rientjes
0 siblings, 1 reply; 7+ messages in thread
From: Arnd Bergmann @ 2011-01-27 8:23 UTC (permalink / raw)
To: David Rientjes
Cc: Andrew Morton, Ingo Molnar, H. Peter Anvin, Thomas Gleixner,
Adam Belay, Bjorn Helgaas, Russell King, x86, linux-kernel
On Thursday 27 January 2011 04:14:54 David Rientjes wrote:
>
> 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.
>
> Disabling CONFIG_ISA_DMA_API is dependent on x86_64 since those machines
> do not have ISA slots and benefit the most from disabling the option (and
> on CONFIG_EXPERT as required by H. Peter Anvin).
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.
Arnd
^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch v2 4/4] x86: allow CONFIG_ISA_DMA_API to be disabled
2011-01-27 8:23 ` Arnd Bergmann
@ 2011-01-27 21:48 ` David Rientjes
0 siblings, 0 replies; 7+ messages in thread
From: David Rientjes @ 2011-01-27 21:48 UTC (permalink / raw)
To: Arnd Bergmann, Andrew Morton, Ingo Molnar, H. Peter Anvin,
Thomas Gleixner
Cc: Adam Belay, Bjorn Helgaas, Russell King, x86, linux-kernel
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@google.com>
---
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
config GENERIC_ISA_DMA
- def_bool y
+ def_bool ISA_DMA_API
config GENERIC_IOMAP
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
+#ifdef CONFIG_ISA_DMA_API
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 */
+#ifdef CONFIG_ISA_DMA_API
extern int request_dma(unsigned int dmanr, const char *device_id);
extern void free_dma(unsigned int dmanr);
+#endif
/* From PCI */
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled
2011-01-27 3:14 [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled David Rientjes
` (2 preceding siblings ...)
2011-01-27 3:14 ` [patch 4/4] x86: allow CONFIG_ISA_DMA_API to be disabled David Rientjes
@ 2011-02-03 20:01 ` David Rientjes
3 siblings, 0 replies; 7+ messages in thread
From: David Rientjes @ 2011-02-03 20:01 UTC (permalink / raw)
To: Andrew Morton, Adam Belay, Bjorn Helgaas
Cc: Ingo Molnar, H. Peter Anvin, Thomas Gleixner, Russell King, x86,
linux-kernel
On Wed, 26 Jan 2011, David Rientjes wrote:
> IORESOURCE_DMA cannot be assigned without utilizing the interface
> provided by CONFIG_ISA_DMA_API, specifically request_dma() and
> free_dma(). Thus, there's a strict dependency on the config option and
> limits IORESOURCE_DMA only to architectures that support ISA-style DMA.
>
> ia64 is not one of those architectures, so pnp_check_dma() no longer
> needs to be special-cased for that architecture.
>
> pnp_assign_resources() will now return -EINVAL if IORESOURCE_DMA is
> attempted on such a kernel.
>
> Signed-off-by: David Rientjes <rientjes@google.com>
Are there any objections to merging this?
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-02-03 20:02 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-27 3:14 [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled David Rientjes
2011-01-27 3:14 ` [patch 2/4] x86: only compile 8237A " David Rientjes
2011-01-27 3:14 ` [patch 3/4] x86: only compile floppy driver " David Rientjes
2011-01-27 3:14 ` [patch 4/4] x86: allow CONFIG_ISA_DMA_API to be disabled David Rientjes
2011-01-27 8:23 ` Arnd Bergmann
2011-01-27 21:48 ` [patch v2 " David Rientjes
2011-02-03 20:01 ` [patch 1/4] pnp: only assign IORESOURCE_DMA if CONFIG_ISA_DMA_API is enabled David Rientjes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).