LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* dma-debug cleanups, including removing the arch hook
@ 2018-04-24 14:02 Christoph Hellwig
2018-04-24 14:02 ` [PATCH 1/3] dma-debug: move initialization to common code Christoph Hellwig
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Christoph Hellwig @ 2018-04-24 14:02 UTC (permalink / raw)
To: iommu
Cc: linux-arch, Michal Simek, Greentime Hu, Vincent Chen,
linux-alpha, linux-snps-arc, linux-arm-kernel, linux-c6x-dev,
linux-hexagon, linux-m68k, nios2-dev, openrisc, linux-parisc,
linux-sh, sparclinux, linux-xtensa, linux-kernel
Hi all,
this series has a few dma-debug cleanups, most notably removing the need
for architectures to explicitly initialize dma-debug.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/3] dma-debug: move initialization to common code
2018-04-24 14:02 dma-debug cleanups, including removing the arch hook Christoph Hellwig
@ 2018-04-24 14:02 ` Christoph Hellwig
2018-05-08 9:46 ` Robin Murphy
2018-05-08 10:22 ` Marek Szyprowski
2018-04-24 14:02 ` [PATCH 2/3] dma-debug: simplify counting of preallocated requests Christoph Hellwig
` (3 subsequent siblings)
4 siblings, 2 replies; 12+ messages in thread
From: Christoph Hellwig @ 2018-04-24 14:02 UTC (permalink / raw)
To: iommu
Cc: linux-arch, Michal Simek, Greentime Hu, Vincent Chen,
linux-alpha, linux-snps-arc, linux-arm-kernel, linux-c6x-dev,
linux-hexagon, linux-m68k, nios2-dev, openrisc, linux-parisc,
linux-sh, sparclinux, linux-xtensa, linux-kernel
Most mainstream architectures are using 65536 entries, so lets stick to
that. If someone is really desperate to override it that can still be
done through <asm/dma-mapping.h>, but I'd rather see a really good
rationale for that.
dma_debug_init is now called as a core_initcall, which for many
architectures means much earlier, and provides dma-debug functionality
earlier in the boot process. This should be safe as it only relies
on the memory allocator already being available.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
arch/arm/mm/dma-mapping-nommu.c | 9 ---------
arch/arm/mm/dma-mapping.c | 9 ---------
arch/arm64/mm/dma-mapping.c | 10 ----------
arch/c6x/kernel/dma.c | 11 -----------
arch/ia64/kernel/dma-mapping.c | 10 ----------
arch/microblaze/kernel/dma.c | 11 -----------
arch/mips/mm/dma-default.c | 10 ----------
arch/openrisc/kernel/dma.c | 11 -----------
arch/powerpc/kernel/dma.c | 3 ---
arch/s390/pci/pci_dma.c | 9 ---------
arch/sh/mm/consistent.c | 9 ---------
arch/sparc/kernel/Makefile | 2 --
arch/sparc/kernel/dma.c | 13 -------------
arch/x86/kernel/pci-dma.c | 4 ----
arch/xtensa/kernel/pci-dma.c | 9 ---------
include/linux/dma-debug.h | 6 ------
lib/dma-debug.c | 21 ++++++++++++++-------
17 files changed, 14 insertions(+), 143 deletions(-)
delete mode 100644 arch/sparc/kernel/dma.c
diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c
index 619f24a42d09..f448a0663b10 100644
--- a/arch/arm/mm/dma-mapping-nommu.c
+++ b/arch/arm/mm/dma-mapping-nommu.c
@@ -241,12 +241,3 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
void arch_teardown_dma_ops(struct device *dev)
{
}
-
-#define PREALLOC_DMA_DEBUG_ENTRIES 4096
-
-static int __init dma_debug_do_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
- return 0;
-}
-core_initcall(dma_debug_do_init);
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 8c398fedbbb6..c26bf83f44ca 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1165,15 +1165,6 @@ int arm_dma_supported(struct device *dev, u64 mask)
return __dma_supported(dev, mask, false);
}
-#define PREALLOC_DMA_DEBUG_ENTRIES 4096
-
-static int __init dma_debug_do_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
- return 0;
-}
-core_initcall(dma_debug_do_init);
-
#ifdef CONFIG_ARM_DMA_USE_IOMMU
static int __dma_info_to_prot(enum dma_data_direction dir, unsigned long attrs)
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index a96ec0181818..db01f2709842 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -508,16 +508,6 @@ static int __init arm64_dma_init(void)
}
arch_initcall(arm64_dma_init);
-#define PREALLOC_DMA_DEBUG_ENTRIES 4096
-
-static int __init dma_debug_do_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
- return 0;
-}
-fs_initcall(dma_debug_do_init);
-
-
#ifdef CONFIG_IOMMU_DMA
#include <linux/dma-iommu.h>
#include <linux/platform_device.h>
diff --git a/arch/c6x/kernel/dma.c b/arch/c6x/kernel/dma.c
index 9fff8be75f58..31e1a9ec3a9c 100644
--- a/arch/c6x/kernel/dma.c
+++ b/arch/c6x/kernel/dma.c
@@ -136,14 +136,3 @@ const struct dma_map_ops c6x_dma_ops = {
.sync_sg_for_cpu = c6x_dma_sync_sg_for_cpu,
};
EXPORT_SYMBOL(c6x_dma_ops);
-
-/* Number of entries preallocated for DMA-API debugging */
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
-
-static int __init dma_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
-
- return 0;
-}
-fs_initcall(dma_init);
diff --git a/arch/ia64/kernel/dma-mapping.c b/arch/ia64/kernel/dma-mapping.c
index f2d57e66fd86..7a471d8d67d4 100644
--- a/arch/ia64/kernel/dma-mapping.c
+++ b/arch/ia64/kernel/dma-mapping.c
@@ -9,16 +9,6 @@ int iommu_detected __read_mostly;
const struct dma_map_ops *dma_ops;
EXPORT_SYMBOL(dma_ops);
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
-
-static int __init dma_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
-
- return 0;
-}
-fs_initcall(dma_init);
-
const struct dma_map_ops *dma_get_ops(struct device *dev)
{
return dma_ops;
diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c
index c91e8cef98dd..3145e7dc8ab1 100644
--- a/arch/microblaze/kernel/dma.c
+++ b/arch/microblaze/kernel/dma.c
@@ -184,14 +184,3 @@ const struct dma_map_ops dma_nommu_ops = {
.sync_sg_for_device = dma_nommu_sync_sg_for_device,
};
EXPORT_SYMBOL(dma_nommu_ops);
-
-/* Number of entries preallocated for DMA-API debugging */
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
-
-static int __init dma_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
-
- return 0;
-}
-fs_initcall(dma_init);
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index dcafa43613b6..f9fef0028ca2 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -402,13 +402,3 @@ static const struct dma_map_ops mips_default_dma_map_ops = {
const struct dma_map_ops *mips_dma_map_ops = &mips_default_dma_map_ops;
EXPORT_SYMBOL(mips_dma_map_ops);
-
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
-
-static int __init mips_dma_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
-
- return 0;
-}
-fs_initcall(mips_dma_init);
diff --git a/arch/openrisc/kernel/dma.c b/arch/openrisc/kernel/dma.c
index a945f00011b4..ec7fd45704d2 100644
--- a/arch/openrisc/kernel/dma.c
+++ b/arch/openrisc/kernel/dma.c
@@ -247,14 +247,3 @@ const struct dma_map_ops or1k_dma_map_ops = {
.sync_single_for_device = or1k_sync_single_for_device,
};
EXPORT_SYMBOL(or1k_dma_map_ops);
-
-/* Number of entries preallocated for DMA-API debugging */
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
-
-static int __init dma_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
-
- return 0;
-}
-fs_initcall(dma_init);
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
index da20569de9d4..138157deeadf 100644
--- a/arch/powerpc/kernel/dma.c
+++ b/arch/powerpc/kernel/dma.c
@@ -309,8 +309,6 @@ int dma_set_coherent_mask(struct device *dev, u64 mask)
}
EXPORT_SYMBOL(dma_set_coherent_mask);
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
-
int dma_set_mask(struct device *dev, u64 dma_mask)
{
if (ppc_md.dma_set_mask)
@@ -361,7 +359,6 @@ EXPORT_SYMBOL_GPL(dma_get_required_mask);
static int __init dma_init(void)
{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
#ifdef CONFIG_PCI
dma_debug_add_bus(&pci_bus_type);
#endif
diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
index 2d15d84c20ed..5dee7a922589 100644
--- a/arch/s390/pci/pci_dma.c
+++ b/arch/s390/pci/pci_dma.c
@@ -668,15 +668,6 @@ void zpci_dma_exit(void)
kmem_cache_destroy(dma_region_table_cache);
}
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
-
-static int __init dma_debug_do_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
- return 0;
-}
-fs_initcall(dma_debug_do_init);
-
const struct dma_map_ops s390_pci_dma_ops = {
.alloc = s390_dma_alloc,
.free = s390_dma_free,
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
index 8ce98691d822..35ea3099a3b6 100644
--- a/arch/sh/mm/consistent.c
+++ b/arch/sh/mm/consistent.c
@@ -20,18 +20,9 @@
#include <asm/cacheflush.h>
#include <asm/addrspace.h>
-#define PREALLOC_DMA_DEBUG_ENTRIES 4096
-
const struct dma_map_ops *dma_ops;
EXPORT_SYMBOL(dma_ops);
-static int __init dma_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
- return 0;
-}
-fs_initcall(dma_init);
-
void *dma_generic_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp,
unsigned long attrs)
diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile
index 76cb57750dda..84cfc5a428d6 100644
--- a/arch/sparc/kernel/Makefile
+++ b/arch/sparc/kernel/Makefile
@@ -74,8 +74,6 @@ obj-$(CONFIG_SPARC64) += pcr.o
obj-$(CONFIG_SPARC64) += nmi.o
obj-$(CONFIG_SPARC64_SMP) += cpumap.o
-obj-y += dma.o
-
obj-$(CONFIG_PCIC_PCI) += pcic.o
obj-$(CONFIG_LEON_PCI) += leon_pci.o
obj-$(CONFIG_SPARC_GRPCI2)+= leon_pci_grpci2.o
diff --git a/arch/sparc/kernel/dma.c b/arch/sparc/kernel/dma.c
deleted file mode 100644
index f73e7597c971..000000000000
--- a/arch/sparc/kernel/dma.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include <linux/kernel.h>
-#include <linux/dma-mapping.h>
-#include <linux/dma-debug.h>
-
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 15)
-
-static int __init dma_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
- return 0;
-}
-fs_initcall(dma_init);
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
index 77625b60a510..bcbaa2e8031e 100644
--- a/arch/x86/kernel/pci-dma.c
+++ b/arch/x86/kernel/pci-dma.c
@@ -55,9 +55,6 @@ struct device x86_dma_fallback_dev = {
};
EXPORT_SYMBOL(x86_dma_fallback_dev);
-/* Number of entries preallocated for DMA-API debugging */
-#define PREALLOC_DMA_DEBUG_ENTRIES 65536
-
void __init pci_iommu_alloc(void)
{
struct iommu_table_entry *p;
@@ -189,7 +186,6 @@ EXPORT_SYMBOL(arch_dma_supported);
static int __init pci_iommu_init(void)
{
struct iommu_table_entry *p;
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
#ifdef CONFIG_PCI
dma_debug_add_bus(&pci_bus_type);
diff --git a/arch/xtensa/kernel/pci-dma.c b/arch/xtensa/kernel/pci-dma.c
index 732631ce250f..392b4a80ebc2 100644
--- a/arch/xtensa/kernel/pci-dma.c
+++ b/arch/xtensa/kernel/pci-dma.c
@@ -261,12 +261,3 @@ const struct dma_map_ops xtensa_dma_map_ops = {
.mapping_error = xtensa_dma_mapping_error,
};
EXPORT_SYMBOL(xtensa_dma_map_ops);
-
-#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
-
-static int __init xtensa_dma_init(void)
-{
- dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
- return 0;
-}
-fs_initcall(xtensa_dma_init);
diff --git a/include/linux/dma-debug.h b/include/linux/dma-debug.h
index c7d844f09c3a..a785f2507159 100644
--- a/include/linux/dma-debug.h
+++ b/include/linux/dma-debug.h
@@ -30,8 +30,6 @@ struct bus_type;
extern void dma_debug_add_bus(struct bus_type *bus);
-extern void dma_debug_init(u32 num_entries);
-
extern int dma_debug_resize_entries(u32 num_entries);
extern void debug_dma_map_page(struct device *dev, struct page *page,
@@ -100,10 +98,6 @@ static inline void dma_debug_add_bus(struct bus_type *bus)
{
}
-static inline void dma_debug_init(u32 num_entries)
-{
-}
-
static inline int dma_debug_resize_entries(u32 num_entries)
{
return 0;
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 7f5cdc1e6b29..712a897174e4 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -41,6 +41,11 @@
#define HASH_FN_SHIFT 13
#define HASH_FN_MASK (HASH_SIZE - 1)
+/* allow architectures to override this if absolutely required */
+#ifndef PREALLOC_DMA_DEBUG_ENTRIES
+#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
+#endif
+
enum {
dma_debug_single,
dma_debug_page,
@@ -1004,18 +1009,16 @@ void dma_debug_add_bus(struct bus_type *bus)
bus_register_notifier(bus, nb);
}
-/*
- * Let the architectures decide how many entries should be preallocated.
- */
-void dma_debug_init(u32 num_entries)
+static int dma_debug_init(void)
{
+ u32 num_entries;
int i;
/* Do not use dma_debug_initialized here, since we really want to be
* called to set dma_debug_initialized
*/
if (global_disable)
- return;
+ return 0;
for (i = 0; i < HASH_SIZE; ++i) {
INIT_LIST_HEAD(&dma_entry_hash[i].list);
@@ -1026,17 +1029,19 @@ void dma_debug_init(u32 num_entries)
pr_err("DMA-API: error creating debugfs entries - disabling\n");
global_disable = true;
- return;
+ return 0;
}
if (req_entries)
num_entries = req_entries;
+ else
+ num_entries = PREALLOC_DMA_DEBUG_ENTRIES;
if (prealloc_memory(num_entries) != 0) {
pr_err("DMA-API: debugging out of memory error - disabled\n");
global_disable = true;
- return;
+ return 0;
}
nr_total_entries = num_free_entries;
@@ -1044,7 +1049,9 @@ void dma_debug_init(u32 num_entries)
dma_debug_initialized = true;
pr_info("DMA-API: debugging enabled by kernel config\n");
+ return 0;
}
+core_initcall(dma_debug_init);
static __init int dma_debug_cmdline(char *str)
{
--
2.17.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] dma-debug: simplify counting of preallocated requests
2018-04-24 14:02 dma-debug cleanups, including removing the arch hook Christoph Hellwig
2018-04-24 14:02 ` [PATCH 1/3] dma-debug: move initialization to common code Christoph Hellwig
@ 2018-04-24 14:02 ` Christoph Hellwig
2018-05-08 9:50 ` Robin Murphy
2018-04-24 14:02 ` [PATCH 3/3] dma-debug: unexport dma_debug_resize_entries and debug_dma_dump_mappings Christoph Hellwig
` (2 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Christoph Hellwig @ 2018-04-24 14:02 UTC (permalink / raw)
To: iommu
Cc: linux-arch, Michal Simek, Greentime Hu, Vincent Chen,
linux-alpha, linux-snps-arc, linux-arm-kernel, linux-c6x-dev,
linux-hexagon, linux-m68k, nios2-dev, openrisc, linux-parisc,
linux-sh, sparclinux, linux-xtensa, linux-kernel
Just keep a single variable with a descriptive name instead of two
with confusing names.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/dma-debug.c | 20 ++++----------------
1 file changed, 4 insertions(+), 16 deletions(-)
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 712a897174e4..075253cb613b 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -132,7 +132,7 @@ static u32 min_free_entries;
static u32 nr_total_entries;
/* number of preallocated entries requested by kernel cmdline */
-static u32 req_entries;
+static u32 nr_prealloc_entries = PREALLOC_DMA_DEBUG_ENTRIES;
/* debugfs dentry's for the stuff above */
static struct dentry *dma_debug_dent __read_mostly;
@@ -1011,7 +1011,6 @@ void dma_debug_add_bus(struct bus_type *bus)
static int dma_debug_init(void)
{
- u32 num_entries;
int i;
/* Do not use dma_debug_initialized here, since we really want to be
@@ -1032,12 +1031,7 @@ static int dma_debug_init(void)
return 0;
}
- if (req_entries)
- num_entries = req_entries;
- else
- num_entries = PREALLOC_DMA_DEBUG_ENTRIES;
-
- if (prealloc_memory(num_entries) != 0) {
+ if (prealloc_memory(nr_prealloc_entries) != 0) {
pr_err("DMA-API: debugging out of memory error - disabled\n");
global_disable = true;
@@ -1068,16 +1062,10 @@ static __init int dma_debug_cmdline(char *str)
static __init int dma_debug_entries_cmdline(char *str)
{
- int res;
-
if (!str)
return -EINVAL;
-
- res = get_option(&str, &req_entries);
-
- if (!res)
- req_entries = 0;
-
+ if (!get_option(&str, &nr_prealloc_entries))
+ nr_prealloc_entries = PREALLOC_DMA_DEBUG_ENTRIES;
return 0;
}
--
2.17.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] dma-debug: unexport dma_debug_resize_entries and debug_dma_dump_mappings
2018-04-24 14:02 dma-debug cleanups, including removing the arch hook Christoph Hellwig
2018-04-24 14:02 ` [PATCH 1/3] dma-debug: move initialization to common code Christoph Hellwig
2018-04-24 14:02 ` [PATCH 2/3] dma-debug: simplify counting of preallocated requests Christoph Hellwig
@ 2018-04-24 14:02 ` Christoph Hellwig
2018-05-08 10:05 ` Robin Murphy
2018-04-27 15:53 ` [PATCH 4/3] dma-debug: remove CONFIG_HAVE_DMA_API_DEBUG Christoph Hellwig
2018-05-07 10:29 ` dma-debug cleanups, including removing the arch hook Christoph Hellwig
4 siblings, 1 reply; 12+ messages in thread
From: Christoph Hellwig @ 2018-04-24 14:02 UTC (permalink / raw)
To: iommu
Cc: linux-arch, Michal Simek, Greentime Hu, Vincent Chen,
linux-alpha, linux-snps-arc, linux-arm-kernel, linux-c6x-dev,
linux-hexagon, linux-m68k, nios2-dev, openrisc, linux-parisc,
linux-sh, sparclinux, linux-xtensa, linux-kernel
Only used by the AMD GART driver, which must be built in.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/dma-debug.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 075253cb613b..6a1ebaa83623 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -444,7 +444,6 @@ void debug_dma_dump_mappings(struct device *dev)
spin_unlock_irqrestore(&bucket->lock, flags);
}
}
-EXPORT_SYMBOL(debug_dma_dump_mappings);
/*
* For each mapping (initial cacheline in the case of
@@ -753,7 +752,6 @@ int dma_debug_resize_entries(u32 num_entries)
return ret;
}
-EXPORT_SYMBOL(dma_debug_resize_entries);
/*
* DMA-API debugging init code
--
2.17.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/3] dma-debug: remove CONFIG_HAVE_DMA_API_DEBUG
2018-04-24 14:02 dma-debug cleanups, including removing the arch hook Christoph Hellwig
` (2 preceding siblings ...)
2018-04-24 14:02 ` [PATCH 3/3] dma-debug: unexport dma_debug_resize_entries and debug_dma_dump_mappings Christoph Hellwig
@ 2018-04-27 15:53 ` Christoph Hellwig
2018-05-08 9:54 ` Robin Murphy
2018-05-07 10:29 ` dma-debug cleanups, including removing the arch hook Christoph Hellwig
4 siblings, 1 reply; 12+ messages in thread
From: Christoph Hellwig @ 2018-04-27 15:53 UTC (permalink / raw)
To: iommu
Cc: linux-arch, linux-xtensa, Michal Simek, Vincent Chen,
linux-c6x-dev, linux-parisc, linux-sh, linux-hexagon,
linux-kernel, linux-m68k, openrisc, Greentime Hu, linux-alpha,
sparclinux, nios2-dev, linux-snps-arc, linux-arm-kernel
There is no arch specific code required for dma-debug, so there is no
need to opt into the support either.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
.../io/dma-api-debug/arch-support.txt | 31 -------------------
arch/Kconfig | 3 --
arch/arm/Kconfig | 1 -
arch/arm64/Kconfig | 1 -
arch/c6x/Kconfig | 1 -
arch/ia64/Kconfig | 1 -
arch/microblaze/Kconfig | 1 -
arch/mips/Kconfig | 1 -
arch/powerpc/Kconfig | 1 -
arch/riscv/Kconfig | 1 -
arch/s390/Kconfig | 1 -
arch/sh/Kconfig | 1 -
arch/sparc/Kconfig | 1 -
arch/x86/Kconfig | 1 -
arch/xtensa/Kconfig | 1 -
lib/Kconfig.debug | 1 -
16 files changed, 48 deletions(-)
delete mode 100644 Documentation/features/io/dma-api-debug/arch-support.txt
diff --git a/Documentation/features/io/dma-api-debug/arch-support.txt b/Documentation/features/io/dma-api-debug/arch-support.txt
deleted file mode 100644
index e438ed675623..000000000000
--- a/Documentation/features/io/dma-api-debug/arch-support.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Feature name: dma-api-debug
-# Kconfig: HAVE_DMA_API_DEBUG
-# description: arch supports DMA debug facilities
-#
- -----------------------
- | arch |status|
- -----------------------
- | alpha: | TODO |
- | arc: | TODO |
- | arm: | ok |
- | arm64: | ok |
- | c6x: | ok |
- | h8300: | TODO |
- | hexagon: | TODO |
- | ia64: | ok |
- | m68k: | TODO |
- | microblaze: | ok |
- | mips: | ok |
- | nios2: | TODO |
- | openrisc: | TODO |
- | parisc: | TODO |
- | powerpc: | ok |
- | s390: | ok |
- | sh: | ok |
- | sparc: | ok |
- | um: | TODO |
- | unicore32: | TODO |
- | x86: | ok |
- | xtensa: | ok |
- -----------------------
diff --git a/arch/Kconfig b/arch/Kconfig
index 8e0d665c8d53..f07a1a99e5db 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -278,9 +278,6 @@ config HAVE_CLK
The <linux/clk.h> calls support software clock gating and
thus are a key power management tool on many systems.
-config HAVE_DMA_API_DEBUG
- bool
-
config HAVE_HW_BREAKPOINT
bool
depends on PERF_EVENTS
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 676977bdfe33..c43f5bb55ac8 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -60,7 +60,6 @@ config ARM
select HAVE_CONTEXT_TRACKING
select HAVE_C_RECORDMCOUNT
select HAVE_DEBUG_KMEMLEAK
- select HAVE_DMA_API_DEBUG
select HAVE_DMA_CONTIGUOUS if MMU
select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL) && !CPU_ENDIAN_BE32 && MMU
select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index db51b6445744..b25ed7834f6c 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -105,7 +105,6 @@ config ARM64
select HAVE_CONTEXT_TRACKING
select HAVE_DEBUG_BUGVERBOSE
select HAVE_DEBUG_KMEMLEAK
- select HAVE_DMA_API_DEBUG
select HAVE_DMA_CONTIGUOUS
select HAVE_DYNAMIC_FTRACE
select HAVE_EFFICIENT_UNALIGNED_ACCESS
diff --git a/arch/c6x/Kconfig b/arch/c6x/Kconfig
index c6b4dd1418b4..8c088b96e372 100644
--- a/arch/c6x/Kconfig
+++ b/arch/c6x/Kconfig
@@ -10,7 +10,6 @@ config C6X
select GENERIC_ATOMIC64
select GENERIC_IRQ_SHOW
select HAVE_ARCH_TRACEHOOK
- select HAVE_DMA_API_DEBUG
select HAVE_MEMBLOCK
select SPARSE_IRQ
select IRQ_DOMAIN
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 9485b5490eca..2067289fad4a 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -29,7 +29,6 @@ config IA64
select HAVE_FUNCTION_TRACER
select TTY
select HAVE_ARCH_TRACEHOOK
- select HAVE_DMA_API_DEBUG
select HAVE_MEMBLOCK
select HAVE_MEMBLOCK_NODE_MAP
select HAVE_VIRT_CPU_ACCOUNTING
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig
index 3817a3e2146c..d14782100088 100644
--- a/arch/microblaze/Kconfig
+++ b/arch/microblaze/Kconfig
@@ -19,7 +19,6 @@ config MICROBLAZE
select HAVE_ARCH_HASH
select HAVE_ARCH_KGDB
select HAVE_DEBUG_KMEMLEAK
- select HAVE_DMA_API_DEBUG
select HAVE_DYNAMIC_FTRACE
select HAVE_FTRACE_MCOUNT_RECORD
select HAVE_FUNCTION_GRAPH_TRACER
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 0f619b8c0e9e..2dcdc13cd65d 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -42,7 +42,6 @@ config MIPS
select HAVE_C_RECORDMCOUNT
select HAVE_DEBUG_KMEMLEAK
select HAVE_DEBUG_STACKOVERFLOW
- select HAVE_DMA_API_DEBUG
select HAVE_DMA_CONTIGUOUS
select HAVE_DYNAMIC_FTRACE
select HAVE_EXIT_THREAD
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 1887f8f86a77..268fd46fc3c7 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -181,7 +181,6 @@ config PPC
select HAVE_CONTEXT_TRACKING if PPC64
select HAVE_DEBUG_KMEMLEAK
select HAVE_DEBUG_STACKOVERFLOW
- select HAVE_DMA_API_DEBUG
select HAVE_DYNAMIC_FTRACE
select HAVE_DYNAMIC_FTRACE_WITH_REGS if MPROFILE_KERNEL
select HAVE_EBPF_JIT if PPC64
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 17212ba54ee3..95e2da34aaad 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -23,7 +23,6 @@ config RISCV
select GENERIC_ATOMIC64 if !64BIT || !RISCV_ISA_A
select HAVE_MEMBLOCK
select HAVE_MEMBLOCK_NODE_MAP
- select HAVE_DMA_API_DEBUG
select HAVE_DMA_CONTIGUOUS
select HAVE_GENERIC_DMA_COHERENT
select IRQ_DOMAIN
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index b794a2ab6d15..6a64287ec1da 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -130,7 +130,6 @@ config S390
select HAVE_CMPXCHG_LOCAL
select HAVE_COPY_THREAD_TLS
select HAVE_DEBUG_KMEMLEAK
- select HAVE_DMA_API_DEBUG
select HAVE_DMA_CONTIGUOUS
select DMA_DIRECT_OPS
select HAVE_DYNAMIC_FTRACE
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 9417f70e008e..7d521926041e 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -13,7 +13,6 @@ config SUPERH
select HAVE_OPROFILE
select HAVE_GENERIC_DMA_COHERENT
select HAVE_ARCH_TRACEHOOK
- select HAVE_DMA_API_DEBUG
select HAVE_PERF_EVENTS
select HAVE_DEBUG_BUGVERBOSE
select ARCH_HAVE_CUSTOM_GPIO_H
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index c1cfc17eb504..435dbc033afe 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -25,7 +25,6 @@ config SPARC
select RTC_CLASS
select RTC_DRV_M48T59
select RTC_SYSTOHC
- select HAVE_DMA_API_DEBUG
select HAVE_ARCH_JUMP_LABEL if SPARC64
select GENERIC_IRQ_SHOW
select ARCH_WANT_IPC_PARSE_VERSION
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index aad35c568681..3eeca48a146b 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -135,7 +135,6 @@ config X86
select HAVE_C_RECORDMCOUNT
select HAVE_DEBUG_KMEMLEAK
select HAVE_DEBUG_STACKOVERFLOW
- select HAVE_DMA_API_DEBUG
select HAVE_DMA_CONTIGUOUS
select HAVE_DYNAMIC_FTRACE
select HAVE_DYNAMIC_FTRACE_WITH_REGS
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
index c921e8bccdc8..17df332269b2 100644
--- a/arch/xtensa/Kconfig
+++ b/arch/xtensa/Kconfig
@@ -19,7 +19,6 @@ config XTENSA
select HAVE_ARCH_KASAN if MMU
select HAVE_CC_STACKPROTECTOR
select HAVE_DEBUG_KMEMLEAK
- select HAVE_DMA_API_DEBUG
select HAVE_DMA_CONTIGUOUS
select HAVE_EXIT_THREAD
select HAVE_FUNCTION_TRACER
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 685ed2dd4384..d5175eb7b917 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1634,7 +1634,6 @@ config PROVIDE_OHCI1394_DMA_INIT
config DMA_API_DEBUG
bool "Enable debugging of DMA-API usage"
- depends on HAVE_DMA_API_DEBUG
select NEED_DMA_MAP_STATE
help
Enable this option to debug the use of the DMA API by device drivers.
--
2.17.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: dma-debug cleanups, including removing the arch hook
2018-04-24 14:02 dma-debug cleanups, including removing the arch hook Christoph Hellwig
` (3 preceding siblings ...)
2018-04-27 15:53 ` [PATCH 4/3] dma-debug: remove CONFIG_HAVE_DMA_API_DEBUG Christoph Hellwig
@ 2018-05-07 10:29 ` Christoph Hellwig
4 siblings, 0 replies; 12+ messages in thread
From: Christoph Hellwig @ 2018-05-07 10:29 UTC (permalink / raw)
To: iommu
Cc: linux-arch, linux-xtensa, Michal Simek, Vincent Chen,
linux-c6x-dev, linux-parisc, linux-sh, linux-hexagon,
linux-kernel, linux-m68k, openrisc, Greentime Hu, linux-alpha,
sparclinux, nios2-dev, linux-snps-arc, linux-arm-kernel
Any comments? I'd like to move forward with this rather sooner
than later, so any reviews welcome!
On Tue, Apr 24, 2018 at 04:02:32PM +0200, Christoph Hellwig wrote:
> Hi all,
>
> this series has a few dma-debug cleanups, most notably removing the need
> for architectures to explicitly initialize dma-debug.
> _______________________________________________
> iommu mailing list
> iommu@lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/iommu
---end quoted text---
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] dma-debug: move initialization to common code
2018-04-24 14:02 ` [PATCH 1/3] dma-debug: move initialization to common code Christoph Hellwig
@ 2018-05-08 9:46 ` Robin Murphy
2018-05-08 10:22 ` Marek Szyprowski
1 sibling, 0 replies; 12+ messages in thread
From: Robin Murphy @ 2018-05-08 9:46 UTC (permalink / raw)
To: Christoph Hellwig, iommu
Cc: linux-arch, linux-xtensa, Michal Simek, Vincent Chen,
linux-c6x-dev, linux-parisc, linux-sh, linux-hexagon,
linux-kernel, linux-m68k, openrisc, Greentime Hu, linux-alpha,
sparclinux, nios2-dev, linux-snps-arc, linux-arm-kernel
On 24/04/18 15:02, Christoph Hellwig wrote:
> Most mainstream architectures are using 65536 entries, so lets stick to
> that. If someone is really desperate to override it that can still be
> done through <asm/dma-mapping.h>, but I'd rather see a really good
> rationale for that.
>
> dma_debug_init is now called as a core_initcall, which for many
> architectures means much earlier, and provides dma-debug functionality
> earlier in the boot process. This should be safe as it only relies
> on the memory allocator already being available.
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> arch/arm/mm/dma-mapping-nommu.c | 9 ---------
> arch/arm/mm/dma-mapping.c | 9 ---------
> arch/arm64/mm/dma-mapping.c | 10 ----------
> arch/c6x/kernel/dma.c | 11 -----------
> arch/ia64/kernel/dma-mapping.c | 10 ----------
> arch/microblaze/kernel/dma.c | 11 -----------
> arch/mips/mm/dma-default.c | 10 ----------
> arch/openrisc/kernel/dma.c | 11 -----------
> arch/powerpc/kernel/dma.c | 3 ---
> arch/s390/pci/pci_dma.c | 9 ---------
> arch/sh/mm/consistent.c | 9 ---------
> arch/sparc/kernel/Makefile | 2 --
> arch/sparc/kernel/dma.c | 13 -------------
> arch/x86/kernel/pci-dma.c | 4 ----
> arch/xtensa/kernel/pci-dma.c | 9 ---------
> include/linux/dma-debug.h | 6 ------
> lib/dma-debug.c | 21 ++++++++++++++-------
> 17 files changed, 14 insertions(+), 143 deletions(-)
> delete mode 100644 arch/sparc/kernel/dma.c
>
> diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c
> index 619f24a42d09..f448a0663b10 100644
> --- a/arch/arm/mm/dma-mapping-nommu.c
> +++ b/arch/arm/mm/dma-mapping-nommu.c
> @@ -241,12 +241,3 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
> void arch_teardown_dma_ops(struct device *dev)
> {
> }
> -
> -#define PREALLOC_DMA_DEBUG_ENTRIES 4096
> -
> -static int __init dma_debug_do_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -core_initcall(dma_debug_do_init);
> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> index 8c398fedbbb6..c26bf83f44ca 100644
> --- a/arch/arm/mm/dma-mapping.c
> +++ b/arch/arm/mm/dma-mapping.c
> @@ -1165,15 +1165,6 @@ int arm_dma_supported(struct device *dev, u64 mask)
> return __dma_supported(dev, mask, false);
> }
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES 4096
> -
> -static int __init dma_debug_do_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -core_initcall(dma_debug_do_init);
> -
> #ifdef CONFIG_ARM_DMA_USE_IOMMU
>
> static int __dma_info_to_prot(enum dma_data_direction dir, unsigned long attrs)
> diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
> index a96ec0181818..db01f2709842 100644
> --- a/arch/arm64/mm/dma-mapping.c
> +++ b/arch/arm64/mm/dma-mapping.c
> @@ -508,16 +508,6 @@ static int __init arm64_dma_init(void)
> }
> arch_initcall(arm64_dma_init);
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES 4096
> -
> -static int __init dma_debug_do_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(dma_debug_do_init);
> -
> -
> #ifdef CONFIG_IOMMU_DMA
> #include <linux/dma-iommu.h>
> #include <linux/platform_device.h>
> diff --git a/arch/c6x/kernel/dma.c b/arch/c6x/kernel/dma.c
> index 9fff8be75f58..31e1a9ec3a9c 100644
> --- a/arch/c6x/kernel/dma.c
> +++ b/arch/c6x/kernel/dma.c
> @@ -136,14 +136,3 @@ const struct dma_map_ops c6x_dma_ops = {
> .sync_sg_for_cpu = c6x_dma_sync_sg_for_cpu,
> };
> EXPORT_SYMBOL(c6x_dma_ops);
> -
> -/* Number of entries preallocated for DMA-API debugging */
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(dma_init);
> diff --git a/arch/ia64/kernel/dma-mapping.c b/arch/ia64/kernel/dma-mapping.c
> index f2d57e66fd86..7a471d8d67d4 100644
> --- a/arch/ia64/kernel/dma-mapping.c
> +++ b/arch/ia64/kernel/dma-mapping.c
> @@ -9,16 +9,6 @@ int iommu_detected __read_mostly;
> const struct dma_map_ops *dma_ops;
> EXPORT_SYMBOL(dma_ops);
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(dma_init);
> -
> const struct dma_map_ops *dma_get_ops(struct device *dev)
> {
> return dma_ops;
> diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c
> index c91e8cef98dd..3145e7dc8ab1 100644
> --- a/arch/microblaze/kernel/dma.c
> +++ b/arch/microblaze/kernel/dma.c
> @@ -184,14 +184,3 @@ const struct dma_map_ops dma_nommu_ops = {
> .sync_sg_for_device = dma_nommu_sync_sg_for_device,
> };
> EXPORT_SYMBOL(dma_nommu_ops);
> -
> -/* Number of entries preallocated for DMA-API debugging */
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(dma_init);
> diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
> index dcafa43613b6..f9fef0028ca2 100644
> --- a/arch/mips/mm/dma-default.c
> +++ b/arch/mips/mm/dma-default.c
> @@ -402,13 +402,3 @@ static const struct dma_map_ops mips_default_dma_map_ops = {
>
> const struct dma_map_ops *mips_dma_map_ops = &mips_default_dma_map_ops;
> EXPORT_SYMBOL(mips_dma_map_ops);
> -
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init mips_dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(mips_dma_init);
> diff --git a/arch/openrisc/kernel/dma.c b/arch/openrisc/kernel/dma.c
> index a945f00011b4..ec7fd45704d2 100644
> --- a/arch/openrisc/kernel/dma.c
> +++ b/arch/openrisc/kernel/dma.c
> @@ -247,14 +247,3 @@ const struct dma_map_ops or1k_dma_map_ops = {
> .sync_single_for_device = or1k_sync_single_for_device,
> };
> EXPORT_SYMBOL(or1k_dma_map_ops);
> -
> -/* Number of entries preallocated for DMA-API debugging */
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(dma_init);
> diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
> index da20569de9d4..138157deeadf 100644
> --- a/arch/powerpc/kernel/dma.c
> +++ b/arch/powerpc/kernel/dma.c
> @@ -309,8 +309,6 @@ int dma_set_coherent_mask(struct device *dev, u64 mask)
> }
> EXPORT_SYMBOL(dma_set_coherent_mask);
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> int dma_set_mask(struct device *dev, u64 dma_mask)
> {
> if (ppc_md.dma_set_mask)
> @@ -361,7 +359,6 @@ EXPORT_SYMBOL_GPL(dma_get_required_mask);
>
> static int __init dma_init(void)
> {
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> #ifdef CONFIG_PCI
> dma_debug_add_bus(&pci_bus_type);
> #endif
> diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
> index 2d15d84c20ed..5dee7a922589 100644
> --- a/arch/s390/pci/pci_dma.c
> +++ b/arch/s390/pci/pci_dma.c
> @@ -668,15 +668,6 @@ void zpci_dma_exit(void)
> kmem_cache_destroy(dma_region_table_cache);
> }
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_debug_do_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(dma_debug_do_init);
> -
> const struct dma_map_ops s390_pci_dma_ops = {
> .alloc = s390_dma_alloc,
> .free = s390_dma_free,
> diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
> index 8ce98691d822..35ea3099a3b6 100644
> --- a/arch/sh/mm/consistent.c
> +++ b/arch/sh/mm/consistent.c
> @@ -20,18 +20,9 @@
> #include <asm/cacheflush.h>
> #include <asm/addrspace.h>
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES 4096
> -
> const struct dma_map_ops *dma_ops;
> EXPORT_SYMBOL(dma_ops);
>
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(dma_init);
> -
> void *dma_generic_alloc_coherent(struct device *dev, size_t size,
> dma_addr_t *dma_handle, gfp_t gfp,
> unsigned long attrs)
> diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile
> index 76cb57750dda..84cfc5a428d6 100644
> --- a/arch/sparc/kernel/Makefile
> +++ b/arch/sparc/kernel/Makefile
> @@ -74,8 +74,6 @@ obj-$(CONFIG_SPARC64) += pcr.o
> obj-$(CONFIG_SPARC64) += nmi.o
> obj-$(CONFIG_SPARC64_SMP) += cpumap.o
>
> -obj-y += dma.o
> -
> obj-$(CONFIG_PCIC_PCI) += pcic.o
> obj-$(CONFIG_LEON_PCI) += leon_pci.o
> obj-$(CONFIG_SPARC_GRPCI2)+= leon_pci_grpci2.o
> diff --git a/arch/sparc/kernel/dma.c b/arch/sparc/kernel/dma.c
> deleted file mode 100644
> index f73e7597c971..000000000000
> --- a/arch/sparc/kernel/dma.c
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <linux/kernel.h>
> -#include <linux/dma-mapping.h>
> -#include <linux/dma-debug.h>
> -
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 15)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(dma_init);
> diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
> index 77625b60a510..bcbaa2e8031e 100644
> --- a/arch/x86/kernel/pci-dma.c
> +++ b/arch/x86/kernel/pci-dma.c
> @@ -55,9 +55,6 @@ struct device x86_dma_fallback_dev = {
> };
> EXPORT_SYMBOL(x86_dma_fallback_dev);
>
> -/* Number of entries preallocated for DMA-API debugging */
> -#define PREALLOC_DMA_DEBUG_ENTRIES 65536
> -
> void __init pci_iommu_alloc(void)
> {
> struct iommu_table_entry *p;
> @@ -189,7 +186,6 @@ EXPORT_SYMBOL(arch_dma_supported);
> static int __init pci_iommu_init(void)
> {
> struct iommu_table_entry *p;
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
>
> #ifdef CONFIG_PCI
> dma_debug_add_bus(&pci_bus_type);
> diff --git a/arch/xtensa/kernel/pci-dma.c b/arch/xtensa/kernel/pci-dma.c
> index 732631ce250f..392b4a80ebc2 100644
> --- a/arch/xtensa/kernel/pci-dma.c
> +++ b/arch/xtensa/kernel/pci-dma.c
> @@ -261,12 +261,3 @@ const struct dma_map_ops xtensa_dma_map_ops = {
> .mapping_error = xtensa_dma_mapping_error,
> };
> EXPORT_SYMBOL(xtensa_dma_map_ops);
> -
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init xtensa_dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(xtensa_dma_init);
> diff --git a/include/linux/dma-debug.h b/include/linux/dma-debug.h
> index c7d844f09c3a..a785f2507159 100644
> --- a/include/linux/dma-debug.h
> +++ b/include/linux/dma-debug.h
> @@ -30,8 +30,6 @@ struct bus_type;
>
> extern void dma_debug_add_bus(struct bus_type *bus);
>
> -extern void dma_debug_init(u32 num_entries);
> -
> extern int dma_debug_resize_entries(u32 num_entries);
>
> extern void debug_dma_map_page(struct device *dev, struct page *page,
> @@ -100,10 +98,6 @@ static inline void dma_debug_add_bus(struct bus_type *bus)
> {
> }
>
> -static inline void dma_debug_init(u32 num_entries)
> -{
> -}
> -
> static inline int dma_debug_resize_entries(u32 num_entries)
> {
> return 0;
> diff --git a/lib/dma-debug.c b/lib/dma-debug.c
> index 7f5cdc1e6b29..712a897174e4 100644
> --- a/lib/dma-debug.c
> +++ b/lib/dma-debug.c
> @@ -41,6 +41,11 @@
> #define HASH_FN_SHIFT 13
> #define HASH_FN_MASK (HASH_SIZE - 1)
>
> +/* allow architectures to override this if absolutely required */
> +#ifndef PREALLOC_DMA_DEBUG_ENTRIES
> +#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> +#endif
> +
> enum {
> dma_debug_single,
> dma_debug_page,
> @@ -1004,18 +1009,16 @@ void dma_debug_add_bus(struct bus_type *bus)
> bus_register_notifier(bus, nb);
> }
>
> -/*
> - * Let the architectures decide how many entries should be preallocated.
> - */
> -void dma_debug_init(u32 num_entries)
> +static int dma_debug_init(void)
> {
> + u32 num_entries;
> int i;
>
> /* Do not use dma_debug_initialized here, since we really want to be
> * called to set dma_debug_initialized
> */
> if (global_disable)
> - return;
> + return 0;
>
> for (i = 0; i < HASH_SIZE; ++i) {
> INIT_LIST_HEAD(&dma_entry_hash[i].list);
> @@ -1026,17 +1029,19 @@ void dma_debug_init(u32 num_entries)
> pr_err("DMA-API: error creating debugfs entries - disabling\n");
> global_disable = true;
>
> - return;
> + return 0;
> }
>
> if (req_entries)
> num_entries = req_entries;
> + else
> + num_entries = PREALLOC_DMA_DEBUG_ENTRIES;
>
> if (prealloc_memory(num_entries) != 0) {
> pr_err("DMA-API: debugging out of memory error - disabled\n");
> global_disable = true;
>
> - return;
> + return 0;
> }
>
> nr_total_entries = num_free_entries;
> @@ -1044,7 +1049,9 @@ void dma_debug_init(u32 num_entries)
> dma_debug_initialized = true;
>
> pr_info("DMA-API: debugging enabled by kernel config\n");
> + return 0;
> }
> +core_initcall(dma_debug_init);
>
> static __init int dma_debug_cmdline(char *str)
> {
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] dma-debug: simplify counting of preallocated requests
2018-04-24 14:02 ` [PATCH 2/3] dma-debug: simplify counting of preallocated requests Christoph Hellwig
@ 2018-05-08 9:50 ` Robin Murphy
0 siblings, 0 replies; 12+ messages in thread
From: Robin Murphy @ 2018-05-08 9:50 UTC (permalink / raw)
To: Christoph Hellwig, iommu
Cc: linux-arch, linux-xtensa, Michal Simek, Vincent Chen,
linux-c6x-dev, linux-parisc, linux-sh, linux-hexagon,
linux-kernel, linux-m68k, openrisc, Greentime Hu, linux-alpha,
sparclinux, nios2-dev, linux-snps-arc, linux-arm-kernel
On 24/04/18 15:02, Christoph Hellwig wrote:
> Just keep a single variable with a descriptive name instead of two
> with confusing names.
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> lib/dma-debug.c | 20 ++++----------------
> 1 file changed, 4 insertions(+), 16 deletions(-)
>
> diff --git a/lib/dma-debug.c b/lib/dma-debug.c
> index 712a897174e4..075253cb613b 100644
> --- a/lib/dma-debug.c
> +++ b/lib/dma-debug.c
> @@ -132,7 +132,7 @@ static u32 min_free_entries;
> static u32 nr_total_entries;
>
> /* number of preallocated entries requested by kernel cmdline */
> -static u32 req_entries;
> +static u32 nr_prealloc_entries = PREALLOC_DMA_DEBUG_ENTRIES;
>
> /* debugfs dentry's for the stuff above */
> static struct dentry *dma_debug_dent __read_mostly;
> @@ -1011,7 +1011,6 @@ void dma_debug_add_bus(struct bus_type *bus)
>
> static int dma_debug_init(void)
> {
> - u32 num_entries;
> int i;
>
> /* Do not use dma_debug_initialized here, since we really want to be
> @@ -1032,12 +1031,7 @@ static int dma_debug_init(void)
> return 0;
> }
>
> - if (req_entries)
> - num_entries = req_entries;
> - else
> - num_entries = PREALLOC_DMA_DEBUG_ENTRIES;
> -
> - if (prealloc_memory(num_entries) != 0) {
> + if (prealloc_memory(nr_prealloc_entries) != 0) {
> pr_err("DMA-API: debugging out of memory error - disabled\n");
> global_disable = true;
>
> @@ -1068,16 +1062,10 @@ static __init int dma_debug_cmdline(char *str)
>
> static __init int dma_debug_entries_cmdline(char *str)
> {
> - int res;
> -
> if (!str)
> return -EINVAL;
> -
> - res = get_option(&str, &req_entries);
> -
> - if (!res)
> - req_entries = 0;
> -
> + if (!get_option(&str, &nr_prealloc_entries))
> + nr_prealloc_entries = PREALLOC_DMA_DEBUG_ENTRIES;
> return 0;
> }
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/3] dma-debug: remove CONFIG_HAVE_DMA_API_DEBUG
2018-04-27 15:53 ` [PATCH 4/3] dma-debug: remove CONFIG_HAVE_DMA_API_DEBUG Christoph Hellwig
@ 2018-05-08 9:54 ` Robin Murphy
0 siblings, 0 replies; 12+ messages in thread
From: Robin Murphy @ 2018-05-08 9:54 UTC (permalink / raw)
To: Christoph Hellwig, iommu
Cc: linux-arch, linux-xtensa, Michal Simek, linux-snps-arc,
linux-c6x-dev, linux-parisc, linux-sh, linux-hexagon,
linux-kernel, linux-m68k, openrisc, Greentime Hu, linux-alpha,
sparclinux, nios2-dev, Vincent Chen, linux-arm-kernel
On 27/04/18 16:53, Christoph Hellwig wrote:
> There is no arch specific code required for dma-debug, so there is no
> need to opt into the support either.
Makes sense, and a purely negative diffstat is always pleasing :)
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> .../io/dma-api-debug/arch-support.txt | 31 -------------------
> arch/Kconfig | 3 --
> arch/arm/Kconfig | 1 -
> arch/arm64/Kconfig | 1 -
> arch/c6x/Kconfig | 1 -
> arch/ia64/Kconfig | 1 -
> arch/microblaze/Kconfig | 1 -
> arch/mips/Kconfig | 1 -
> arch/powerpc/Kconfig | 1 -
> arch/riscv/Kconfig | 1 -
> arch/s390/Kconfig | 1 -
> arch/sh/Kconfig | 1 -
> arch/sparc/Kconfig | 1 -
> arch/x86/Kconfig | 1 -
> arch/xtensa/Kconfig | 1 -
> lib/Kconfig.debug | 1 -
> 16 files changed, 48 deletions(-)
> delete mode 100644 Documentation/features/io/dma-api-debug/arch-support.txt
>
> diff --git a/Documentation/features/io/dma-api-debug/arch-support.txt b/Documentation/features/io/dma-api-debug/arch-support.txt
> deleted file mode 100644
> index e438ed675623..000000000000
> --- a/Documentation/features/io/dma-api-debug/arch-support.txt
> +++ /dev/null
> @@ -1,31 +0,0 @@
> -#
> -# Feature name: dma-api-debug
> -# Kconfig: HAVE_DMA_API_DEBUG
> -# description: arch supports DMA debug facilities
> -#
> - -----------------------
> - | arch |status|
> - -----------------------
> - | alpha: | TODO |
> - | arc: | TODO |
> - | arm: | ok |
> - | arm64: | ok |
> - | c6x: | ok |
> - | h8300: | TODO |
> - | hexagon: | TODO |
> - | ia64: | ok |
> - | m68k: | TODO |
> - | microblaze: | ok |
> - | mips: | ok |
> - | nios2: | TODO |
> - | openrisc: | TODO |
> - | parisc: | TODO |
> - | powerpc: | ok |
> - | s390: | ok |
> - | sh: | ok |
> - | sparc: | ok |
> - | um: | TODO |
> - | unicore32: | TODO |
> - | x86: | ok |
> - | xtensa: | ok |
> - -----------------------
> diff --git a/arch/Kconfig b/arch/Kconfig
> index 8e0d665c8d53..f07a1a99e5db 100644
> --- a/arch/Kconfig
> +++ b/arch/Kconfig
> @@ -278,9 +278,6 @@ config HAVE_CLK
> The <linux/clk.h> calls support software clock gating and
> thus are a key power management tool on many systems.
>
> -config HAVE_DMA_API_DEBUG
> - bool
> -
> config HAVE_HW_BREAKPOINT
> bool
> depends on PERF_EVENTS
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 676977bdfe33..c43f5bb55ac8 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -60,7 +60,6 @@ config ARM
> select HAVE_CONTEXT_TRACKING
> select HAVE_C_RECORDMCOUNT
> select HAVE_DEBUG_KMEMLEAK
> - select HAVE_DMA_API_DEBUG
> select HAVE_DMA_CONTIGUOUS if MMU
> select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL) && !CPU_ENDIAN_BE32 && MMU
> select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index db51b6445744..b25ed7834f6c 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -105,7 +105,6 @@ config ARM64
> select HAVE_CONTEXT_TRACKING
> select HAVE_DEBUG_BUGVERBOSE
> select HAVE_DEBUG_KMEMLEAK
> - select HAVE_DMA_API_DEBUG
> select HAVE_DMA_CONTIGUOUS
> select HAVE_DYNAMIC_FTRACE
> select HAVE_EFFICIENT_UNALIGNED_ACCESS
> diff --git a/arch/c6x/Kconfig b/arch/c6x/Kconfig
> index c6b4dd1418b4..8c088b96e372 100644
> --- a/arch/c6x/Kconfig
> +++ b/arch/c6x/Kconfig
> @@ -10,7 +10,6 @@ config C6X
> select GENERIC_ATOMIC64
> select GENERIC_IRQ_SHOW
> select HAVE_ARCH_TRACEHOOK
> - select HAVE_DMA_API_DEBUG
> select HAVE_MEMBLOCK
> select SPARSE_IRQ
> select IRQ_DOMAIN
> diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
> index 9485b5490eca..2067289fad4a 100644
> --- a/arch/ia64/Kconfig
> +++ b/arch/ia64/Kconfig
> @@ -29,7 +29,6 @@ config IA64
> select HAVE_FUNCTION_TRACER
> select TTY
> select HAVE_ARCH_TRACEHOOK
> - select HAVE_DMA_API_DEBUG
> select HAVE_MEMBLOCK
> select HAVE_MEMBLOCK_NODE_MAP
> select HAVE_VIRT_CPU_ACCOUNTING
> diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig
> index 3817a3e2146c..d14782100088 100644
> --- a/arch/microblaze/Kconfig
> +++ b/arch/microblaze/Kconfig
> @@ -19,7 +19,6 @@ config MICROBLAZE
> select HAVE_ARCH_HASH
> select HAVE_ARCH_KGDB
> select HAVE_DEBUG_KMEMLEAK
> - select HAVE_DMA_API_DEBUG
> select HAVE_DYNAMIC_FTRACE
> select HAVE_FTRACE_MCOUNT_RECORD
> select HAVE_FUNCTION_GRAPH_TRACER
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index 0f619b8c0e9e..2dcdc13cd65d 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -42,7 +42,6 @@ config MIPS
> select HAVE_C_RECORDMCOUNT
> select HAVE_DEBUG_KMEMLEAK
> select HAVE_DEBUG_STACKOVERFLOW
> - select HAVE_DMA_API_DEBUG
> select HAVE_DMA_CONTIGUOUS
> select HAVE_DYNAMIC_FTRACE
> select HAVE_EXIT_THREAD
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index 1887f8f86a77..268fd46fc3c7 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -181,7 +181,6 @@ config PPC
> select HAVE_CONTEXT_TRACKING if PPC64
> select HAVE_DEBUG_KMEMLEAK
> select HAVE_DEBUG_STACKOVERFLOW
> - select HAVE_DMA_API_DEBUG
> select HAVE_DYNAMIC_FTRACE
> select HAVE_DYNAMIC_FTRACE_WITH_REGS if MPROFILE_KERNEL
> select HAVE_EBPF_JIT if PPC64
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index 17212ba54ee3..95e2da34aaad 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -23,7 +23,6 @@ config RISCV
> select GENERIC_ATOMIC64 if !64BIT || !RISCV_ISA_A
> select HAVE_MEMBLOCK
> select HAVE_MEMBLOCK_NODE_MAP
> - select HAVE_DMA_API_DEBUG
> select HAVE_DMA_CONTIGUOUS
> select HAVE_GENERIC_DMA_COHERENT
> select IRQ_DOMAIN
> diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
> index b794a2ab6d15..6a64287ec1da 100644
> --- a/arch/s390/Kconfig
> +++ b/arch/s390/Kconfig
> @@ -130,7 +130,6 @@ config S390
> select HAVE_CMPXCHG_LOCAL
> select HAVE_COPY_THREAD_TLS
> select HAVE_DEBUG_KMEMLEAK
> - select HAVE_DMA_API_DEBUG
> select HAVE_DMA_CONTIGUOUS
> select DMA_DIRECT_OPS
> select HAVE_DYNAMIC_FTRACE
> diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
> index 9417f70e008e..7d521926041e 100644
> --- a/arch/sh/Kconfig
> +++ b/arch/sh/Kconfig
> @@ -13,7 +13,6 @@ config SUPERH
> select HAVE_OPROFILE
> select HAVE_GENERIC_DMA_COHERENT
> select HAVE_ARCH_TRACEHOOK
> - select HAVE_DMA_API_DEBUG
> select HAVE_PERF_EVENTS
> select HAVE_DEBUG_BUGVERBOSE
> select ARCH_HAVE_CUSTOM_GPIO_H
> diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
> index c1cfc17eb504..435dbc033afe 100644
> --- a/arch/sparc/Kconfig
> +++ b/arch/sparc/Kconfig
> @@ -25,7 +25,6 @@ config SPARC
> select RTC_CLASS
> select RTC_DRV_M48T59
> select RTC_SYSTOHC
> - select HAVE_DMA_API_DEBUG
> select HAVE_ARCH_JUMP_LABEL if SPARC64
> select GENERIC_IRQ_SHOW
> select ARCH_WANT_IPC_PARSE_VERSION
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index aad35c568681..3eeca48a146b 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -135,7 +135,6 @@ config X86
> select HAVE_C_RECORDMCOUNT
> select HAVE_DEBUG_KMEMLEAK
> select HAVE_DEBUG_STACKOVERFLOW
> - select HAVE_DMA_API_DEBUG
> select HAVE_DMA_CONTIGUOUS
> select HAVE_DYNAMIC_FTRACE
> select HAVE_DYNAMIC_FTRACE_WITH_REGS
> diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
> index c921e8bccdc8..17df332269b2 100644
> --- a/arch/xtensa/Kconfig
> +++ b/arch/xtensa/Kconfig
> @@ -19,7 +19,6 @@ config XTENSA
> select HAVE_ARCH_KASAN if MMU
> select HAVE_CC_STACKPROTECTOR
> select HAVE_DEBUG_KMEMLEAK
> - select HAVE_DMA_API_DEBUG
> select HAVE_DMA_CONTIGUOUS
> select HAVE_EXIT_THREAD
> select HAVE_FUNCTION_TRACER
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index 685ed2dd4384..d5175eb7b917 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -1634,7 +1634,6 @@ config PROVIDE_OHCI1394_DMA_INIT
>
> config DMA_API_DEBUG
> bool "Enable debugging of DMA-API usage"
> - depends on HAVE_DMA_API_DEBUG
> select NEED_DMA_MAP_STATE
> help
> Enable this option to debug the use of the DMA API by device drivers.
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] dma-debug: unexport dma_debug_resize_entries and debug_dma_dump_mappings
2018-04-24 14:02 ` [PATCH 3/3] dma-debug: unexport dma_debug_resize_entries and debug_dma_dump_mappings Christoph Hellwig
@ 2018-05-08 10:05 ` Robin Murphy
2018-05-08 10:45 ` Christoph Hellwig
0 siblings, 1 reply; 12+ messages in thread
From: Robin Murphy @ 2018-05-08 10:05 UTC (permalink / raw)
To: Christoph Hellwig, iommu
Cc: linux-arch, linux-xtensa, Michal Simek, Vincent Chen,
linux-c6x-dev, linux-parisc, linux-sh, linux-hexagon,
linux-kernel, linux-m68k, openrisc, Greentime Hu, linux-alpha,
sparclinux, nios2-dev, linux-snps-arc, linux-arm-kernel
On 24/04/18 15:02, Christoph Hellwig wrote:
> Only used by the AMD GART driver, which must be built in.
FWIW debug_dma_dump_mappings() is also called by the Intel VT-d driver,
but the same reasoning still applies. This does rather beg the question
of whether it's right to have bits of low-level dma-debug internals
*only* called by a couple of IOMMU drivers, but that can wait for
another day.
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> lib/dma-debug.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/lib/dma-debug.c b/lib/dma-debug.c
> index 075253cb613b..6a1ebaa83623 100644
> --- a/lib/dma-debug.c
> +++ b/lib/dma-debug.c
> @@ -444,7 +444,6 @@ void debug_dma_dump_mappings(struct device *dev)
> spin_unlock_irqrestore(&bucket->lock, flags);
> }
> }
> -EXPORT_SYMBOL(debug_dma_dump_mappings);
>
> /*
> * For each mapping (initial cacheline in the case of
> @@ -753,7 +752,6 @@ int dma_debug_resize_entries(u32 num_entries)
>
> return ret;
> }
> -EXPORT_SYMBOL(dma_debug_resize_entries);
>
> /*
> * DMA-API debugging init code
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] dma-debug: move initialization to common code
2018-04-24 14:02 ` [PATCH 1/3] dma-debug: move initialization to common code Christoph Hellwig
2018-05-08 9:46 ` Robin Murphy
@ 2018-05-08 10:22 ` Marek Szyprowski
1 sibling, 0 replies; 12+ messages in thread
From: Marek Szyprowski @ 2018-05-08 10:22 UTC (permalink / raw)
To: Christoph Hellwig, iommu
Cc: linux-arch, linux-xtensa, Michal Simek, Vincent Chen,
linux-c6x-dev, linux-parisc, linux-sh, linux-hexagon,
linux-kernel, linux-m68k, openrisc, Greentime Hu, linux-alpha,
sparclinux, nios2-dev, linux-snps-arc, linux-arm-kernel
Hi Christoph,
On 2018-04-24 16:02, Christoph Hellwig wrote:
> Most mainstream architectures are using 65536 entries, so lets stick to
> that. If someone is really desperate to override it that can still be
> done through <asm/dma-mapping.h>, but I'd rather see a really good
> rationale for that.
>
> dma_debug_init is now called as a core_initcall, which for many
> architectures means much earlier, and provides dma-debug functionality
> earlier in the boot process. This should be safe as it only relies
> on the memory allocator already being available.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Nice! Unification of this is definitely needed and solves the issues
reported some time ago:
https://patchwork.kernel.org/patch/9429637/ (arm)
https://patchwork.kernel.org/patch/9431161/ (arm64, rejected)
Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> arch/arm/mm/dma-mapping-nommu.c | 9 ---------
> arch/arm/mm/dma-mapping.c | 9 ---------
> arch/arm64/mm/dma-mapping.c | 10 ----------
> arch/c6x/kernel/dma.c | 11 -----------
> arch/ia64/kernel/dma-mapping.c | 10 ----------
> arch/microblaze/kernel/dma.c | 11 -----------
> arch/mips/mm/dma-default.c | 10 ----------
> arch/openrisc/kernel/dma.c | 11 -----------
> arch/powerpc/kernel/dma.c | 3 ---
> arch/s390/pci/pci_dma.c | 9 ---------
> arch/sh/mm/consistent.c | 9 ---------
> arch/sparc/kernel/Makefile | 2 --
> arch/sparc/kernel/dma.c | 13 -------------
> arch/x86/kernel/pci-dma.c | 4 ----
> arch/xtensa/kernel/pci-dma.c | 9 ---------
> include/linux/dma-debug.h | 6 ------
> lib/dma-debug.c | 21 ++++++++++++++-------
> 17 files changed, 14 insertions(+), 143 deletions(-)
> delete mode 100644 arch/sparc/kernel/dma.c
>
> diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c
> index 619f24a42d09..f448a0663b10 100644
> --- a/arch/arm/mm/dma-mapping-nommu.c
> +++ b/arch/arm/mm/dma-mapping-nommu.c
> @@ -241,12 +241,3 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
> void arch_teardown_dma_ops(struct device *dev)
> {
> }
> -
> -#define PREALLOC_DMA_DEBUG_ENTRIES 4096
> -
> -static int __init dma_debug_do_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -core_initcall(dma_debug_do_init);
> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> index 8c398fedbbb6..c26bf83f44ca 100644
> --- a/arch/arm/mm/dma-mapping.c
> +++ b/arch/arm/mm/dma-mapping.c
> @@ -1165,15 +1165,6 @@ int arm_dma_supported(struct device *dev, u64 mask)
> return __dma_supported(dev, mask, false);
> }
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES 4096
> -
> -static int __init dma_debug_do_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -core_initcall(dma_debug_do_init);
> -
> #ifdef CONFIG_ARM_DMA_USE_IOMMU
>
> static int __dma_info_to_prot(enum dma_data_direction dir, unsigned long attrs)
> diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
> index a96ec0181818..db01f2709842 100644
> --- a/arch/arm64/mm/dma-mapping.c
> +++ b/arch/arm64/mm/dma-mapping.c
> @@ -508,16 +508,6 @@ static int __init arm64_dma_init(void)
> }
> arch_initcall(arm64_dma_init);
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES 4096
> -
> -static int __init dma_debug_do_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(dma_debug_do_init);
> -
> -
> #ifdef CONFIG_IOMMU_DMA
> #include <linux/dma-iommu.h>
> #include <linux/platform_device.h>
> diff --git a/arch/c6x/kernel/dma.c b/arch/c6x/kernel/dma.c
> index 9fff8be75f58..31e1a9ec3a9c 100644
> --- a/arch/c6x/kernel/dma.c
> +++ b/arch/c6x/kernel/dma.c
> @@ -136,14 +136,3 @@ const struct dma_map_ops c6x_dma_ops = {
> .sync_sg_for_cpu = c6x_dma_sync_sg_for_cpu,
> };
> EXPORT_SYMBOL(c6x_dma_ops);
> -
> -/* Number of entries preallocated for DMA-API debugging */
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(dma_init);
> diff --git a/arch/ia64/kernel/dma-mapping.c b/arch/ia64/kernel/dma-mapping.c
> index f2d57e66fd86..7a471d8d67d4 100644
> --- a/arch/ia64/kernel/dma-mapping.c
> +++ b/arch/ia64/kernel/dma-mapping.c
> @@ -9,16 +9,6 @@ int iommu_detected __read_mostly;
> const struct dma_map_ops *dma_ops;
> EXPORT_SYMBOL(dma_ops);
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(dma_init);
> -
> const struct dma_map_ops *dma_get_ops(struct device *dev)
> {
> return dma_ops;
> diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c
> index c91e8cef98dd..3145e7dc8ab1 100644
> --- a/arch/microblaze/kernel/dma.c
> +++ b/arch/microblaze/kernel/dma.c
> @@ -184,14 +184,3 @@ const struct dma_map_ops dma_nommu_ops = {
> .sync_sg_for_device = dma_nommu_sync_sg_for_device,
> };
> EXPORT_SYMBOL(dma_nommu_ops);
> -
> -/* Number of entries preallocated for DMA-API debugging */
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(dma_init);
> diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
> index dcafa43613b6..f9fef0028ca2 100644
> --- a/arch/mips/mm/dma-default.c
> +++ b/arch/mips/mm/dma-default.c
> @@ -402,13 +402,3 @@ static const struct dma_map_ops mips_default_dma_map_ops = {
>
> const struct dma_map_ops *mips_dma_map_ops = &mips_default_dma_map_ops;
> EXPORT_SYMBOL(mips_dma_map_ops);
> -
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init mips_dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(mips_dma_init);
> diff --git a/arch/openrisc/kernel/dma.c b/arch/openrisc/kernel/dma.c
> index a945f00011b4..ec7fd45704d2 100644
> --- a/arch/openrisc/kernel/dma.c
> +++ b/arch/openrisc/kernel/dma.c
> @@ -247,14 +247,3 @@ const struct dma_map_ops or1k_dma_map_ops = {
> .sync_single_for_device = or1k_sync_single_for_device,
> };
> EXPORT_SYMBOL(or1k_dma_map_ops);
> -
> -/* Number of entries preallocated for DMA-API debugging */
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> -
> - return 0;
> -}
> -fs_initcall(dma_init);
> diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
> index da20569de9d4..138157deeadf 100644
> --- a/arch/powerpc/kernel/dma.c
> +++ b/arch/powerpc/kernel/dma.c
> @@ -309,8 +309,6 @@ int dma_set_coherent_mask(struct device *dev, u64 mask)
> }
> EXPORT_SYMBOL(dma_set_coherent_mask);
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> int dma_set_mask(struct device *dev, u64 dma_mask)
> {
> if (ppc_md.dma_set_mask)
> @@ -361,7 +359,6 @@ EXPORT_SYMBOL_GPL(dma_get_required_mask);
>
> static int __init dma_init(void)
> {
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> #ifdef CONFIG_PCI
> dma_debug_add_bus(&pci_bus_type);
> #endif
> diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c
> index 2d15d84c20ed..5dee7a922589 100644
> --- a/arch/s390/pci/pci_dma.c
> +++ b/arch/s390/pci/pci_dma.c
> @@ -668,15 +668,6 @@ void zpci_dma_exit(void)
> kmem_cache_destroy(dma_region_table_cache);
> }
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init dma_debug_do_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(dma_debug_do_init);
> -
> const struct dma_map_ops s390_pci_dma_ops = {
> .alloc = s390_dma_alloc,
> .free = s390_dma_free,
> diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
> index 8ce98691d822..35ea3099a3b6 100644
> --- a/arch/sh/mm/consistent.c
> +++ b/arch/sh/mm/consistent.c
> @@ -20,18 +20,9 @@
> #include <asm/cacheflush.h>
> #include <asm/addrspace.h>
>
> -#define PREALLOC_DMA_DEBUG_ENTRIES 4096
> -
> const struct dma_map_ops *dma_ops;
> EXPORT_SYMBOL(dma_ops);
>
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(dma_init);
> -
> void *dma_generic_alloc_coherent(struct device *dev, size_t size,
> dma_addr_t *dma_handle, gfp_t gfp,
> unsigned long attrs)
> diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile
> index 76cb57750dda..84cfc5a428d6 100644
> --- a/arch/sparc/kernel/Makefile
> +++ b/arch/sparc/kernel/Makefile
> @@ -74,8 +74,6 @@ obj-$(CONFIG_SPARC64) += pcr.o
> obj-$(CONFIG_SPARC64) += nmi.o
> obj-$(CONFIG_SPARC64_SMP) += cpumap.o
>
> -obj-y += dma.o
> -
> obj-$(CONFIG_PCIC_PCI) += pcic.o
> obj-$(CONFIG_LEON_PCI) += leon_pci.o
> obj-$(CONFIG_SPARC_GRPCI2)+= leon_pci_grpci2.o
> diff --git a/arch/sparc/kernel/dma.c b/arch/sparc/kernel/dma.c
> deleted file mode 100644
> index f73e7597c971..000000000000
> --- a/arch/sparc/kernel/dma.c
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <linux/kernel.h>
> -#include <linux/dma-mapping.h>
> -#include <linux/dma-debug.h>
> -
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 15)
> -
> -static int __init dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(dma_init);
> diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
> index 77625b60a510..bcbaa2e8031e 100644
> --- a/arch/x86/kernel/pci-dma.c
> +++ b/arch/x86/kernel/pci-dma.c
> @@ -55,9 +55,6 @@ struct device x86_dma_fallback_dev = {
> };
> EXPORT_SYMBOL(x86_dma_fallback_dev);
>
> -/* Number of entries preallocated for DMA-API debugging */
> -#define PREALLOC_DMA_DEBUG_ENTRIES 65536
> -
> void __init pci_iommu_alloc(void)
> {
> struct iommu_table_entry *p;
> @@ -189,7 +186,6 @@ EXPORT_SYMBOL(arch_dma_supported);
> static int __init pci_iommu_init(void)
> {
> struct iommu_table_entry *p;
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
>
> #ifdef CONFIG_PCI
> dma_debug_add_bus(&pci_bus_type);
> diff --git a/arch/xtensa/kernel/pci-dma.c b/arch/xtensa/kernel/pci-dma.c
> index 732631ce250f..392b4a80ebc2 100644
> --- a/arch/xtensa/kernel/pci-dma.c
> +++ b/arch/xtensa/kernel/pci-dma.c
> @@ -261,12 +261,3 @@ const struct dma_map_ops xtensa_dma_map_ops = {
> .mapping_error = xtensa_dma_mapping_error,
> };
> EXPORT_SYMBOL(xtensa_dma_map_ops);
> -
> -#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> -
> -static int __init xtensa_dma_init(void)
> -{
> - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
> - return 0;
> -}
> -fs_initcall(xtensa_dma_init);
> diff --git a/include/linux/dma-debug.h b/include/linux/dma-debug.h
> index c7d844f09c3a..a785f2507159 100644
> --- a/include/linux/dma-debug.h
> +++ b/include/linux/dma-debug.h
> @@ -30,8 +30,6 @@ struct bus_type;
>
> extern void dma_debug_add_bus(struct bus_type *bus);
>
> -extern void dma_debug_init(u32 num_entries);
> -
> extern int dma_debug_resize_entries(u32 num_entries);
>
> extern void debug_dma_map_page(struct device *dev, struct page *page,
> @@ -100,10 +98,6 @@ static inline void dma_debug_add_bus(struct bus_type *bus)
> {
> }
>
> -static inline void dma_debug_init(u32 num_entries)
> -{
> -}
> -
> static inline int dma_debug_resize_entries(u32 num_entries)
> {
> return 0;
> diff --git a/lib/dma-debug.c b/lib/dma-debug.c
> index 7f5cdc1e6b29..712a897174e4 100644
> --- a/lib/dma-debug.c
> +++ b/lib/dma-debug.c
> @@ -41,6 +41,11 @@
> #define HASH_FN_SHIFT 13
> #define HASH_FN_MASK (HASH_SIZE - 1)
>
> +/* allow architectures to override this if absolutely required */
> +#ifndef PREALLOC_DMA_DEBUG_ENTRIES
> +#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
> +#endif
> +
> enum {
> dma_debug_single,
> dma_debug_page,
> @@ -1004,18 +1009,16 @@ void dma_debug_add_bus(struct bus_type *bus)
> bus_register_notifier(bus, nb);
> }
>
> -/*
> - * Let the architectures decide how many entries should be preallocated.
> - */
> -void dma_debug_init(u32 num_entries)
> +static int dma_debug_init(void)
> {
> + u32 num_entries;
> int i;
>
> /* Do not use dma_debug_initialized here, since we really want to be
> * called to set dma_debug_initialized
> */
> if (global_disable)
> - return;
> + return 0;
>
> for (i = 0; i < HASH_SIZE; ++i) {
> INIT_LIST_HEAD(&dma_entry_hash[i].list);
> @@ -1026,17 +1029,19 @@ void dma_debug_init(u32 num_entries)
> pr_err("DMA-API: error creating debugfs entries - disabling\n");
> global_disable = true;
>
> - return;
> + return 0;
> }
>
> if (req_entries)
> num_entries = req_entries;
> + else
> + num_entries = PREALLOC_DMA_DEBUG_ENTRIES;
>
> if (prealloc_memory(num_entries) != 0) {
> pr_err("DMA-API: debugging out of memory error - disabled\n");
> global_disable = true;
>
> - return;
> + return 0;
> }
>
> nr_total_entries = num_free_entries;
> @@ -1044,7 +1049,9 @@ void dma_debug_init(u32 num_entries)
> dma_debug_initialized = true;
>
> pr_info("DMA-API: debugging enabled by kernel config\n");
> + return 0;
> }
> +core_initcall(dma_debug_init);
>
> static __init int dma_debug_cmdline(char *str)
> {
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] dma-debug: unexport dma_debug_resize_entries and debug_dma_dump_mappings
2018-05-08 10:05 ` Robin Murphy
@ 2018-05-08 10:45 ` Christoph Hellwig
0 siblings, 0 replies; 12+ messages in thread
From: Christoph Hellwig @ 2018-05-08 10:45 UTC (permalink / raw)
To: Robin Murphy
Cc: Christoph Hellwig, iommu, linux-arch, linux-xtensa, Michal Simek,
Vincent Chen, linux-c6x-dev, linux-parisc, linux-sh,
linux-hexagon, linux-kernel, linux-m68k, openrisc, Greentime Hu,
linux-alpha, sparclinux, nios2-dev, linux-snps-arc,
linux-arm-kernel
On Tue, May 08, 2018 at 11:05:20AM +0100, Robin Murphy wrote:
> On 24/04/18 15:02, Christoph Hellwig wrote:
>> Only used by the AMD GART driver, which must be built in.
>
> FWIW debug_dma_dump_mappings() is also called by the Intel VT-d driver, but
> the same reasoning still applies.
I'll update the changelog.
> This does rather beg the question of
> whether it's right to have bits of low-level dma-debug internals *only*
> called by a couple of IOMMU drivers, but that can wait for another day.
My gut feeling is that it is wrong, but I didn't have time to look into
the details and history of how this happened.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2018-05-08 10:42 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-24 14:02 dma-debug cleanups, including removing the arch hook Christoph Hellwig
2018-04-24 14:02 ` [PATCH 1/3] dma-debug: move initialization to common code Christoph Hellwig
2018-05-08 9:46 ` Robin Murphy
2018-05-08 10:22 ` Marek Szyprowski
2018-04-24 14:02 ` [PATCH 2/3] dma-debug: simplify counting of preallocated requests Christoph Hellwig
2018-05-08 9:50 ` Robin Murphy
2018-04-24 14:02 ` [PATCH 3/3] dma-debug: unexport dma_debug_resize_entries and debug_dma_dump_mappings Christoph Hellwig
2018-05-08 10:05 ` Robin Murphy
2018-05-08 10:45 ` Christoph Hellwig
2018-04-27 15:53 ` [PATCH 4/3] dma-debug: remove CONFIG_HAVE_DMA_API_DEBUG Christoph Hellwig
2018-05-08 9:54 ` Robin Murphy
2018-05-07 10:29 ` dma-debug cleanups, including removing the arch hook Christoph Hellwig
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).