aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Roedel <joerg.roedel@amd.com>2009-01-09 07:01:56 -0500
committerJoerg Roedel <joerg.roedel@amd.com>2009-03-05 14:35:16 -0500
commit59d3daafa17265f01149df8eab3fb69b9b42cb2e (patch)
treeb4c0f3525f976dd5ec37730dee76ed227dcd25d5
parent6bf078715c1998d4d10716251cc10ce45908594c (diff)
dma-debug: add kernel command line parameters
Impact: add dma_debug= and dma_debug_entries= kernel parameters Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
-rw-r--r--Documentation/kernel-parameters.txt10
-rw-r--r--lib/dma-debug.c38
2 files changed, 48 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 54f21a5c262b..0fa3c0545994 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -491,6 +491,16 @@ and is between 256 and 4096 characters. It is defined in the file
491 Range: 0 - 8192 491 Range: 0 - 8192
492 Default: 64 492 Default: 64
493 493
494 dma_debug=off If the kernel is compiled with DMA_API_DEBUG support
495 this option disables the debugging code at boot.
496
497 dma_debug_entries=<number>
498 This option allows to tune the number of preallocated
499 entries for DMA-API debugging code. One entry is
500 required per DMA-API allocation. Use this if the
501 DMA-API debugging code disables itself because the
502 architectural default is too low.
503
494 hpet= [X86-32,HPET] option to control HPET usage 504 hpet= [X86-32,HPET] option to control HPET usage
495 Format: { enable (default) | disable | force } 505 Format: { enable (default) | disable | force }
496 disable: disable HPET and use PIT instead 506 disable: disable HPET and use PIT instead
diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 5b50bb31f7c6..2ede46308024 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -64,6 +64,9 @@ static bool global_disable __read_mostly;
64static u32 num_free_entries; 64static u32 num_free_entries;
65static u32 min_free_entries; 65static u32 min_free_entries;
66 66
67/* number of preallocated entries requested by kernel cmdline */
68static u32 req_entries;
69
67/* 70/*
68 * Hash related functions 71 * Hash related functions
69 * 72 *
@@ -253,6 +256,9 @@ void dma_debug_init(u32 num_entries)
253 dma_entry_hash[i].lock = SPIN_LOCK_UNLOCKED; 256 dma_entry_hash[i].lock = SPIN_LOCK_UNLOCKED;
254 } 257 }
255 258
259 if (req_entries)
260 num_entries = req_entries;
261
256 if (prealloc_memory(num_entries) != 0) { 262 if (prealloc_memory(num_entries) != 0) {
257 printk(KERN_ERR "DMA-API: debugging out of memory error " 263 printk(KERN_ERR "DMA-API: debugging out of memory error "
258 "- disabled\n"); 264 "- disabled\n");
@@ -264,3 +270,35 @@ void dma_debug_init(u32 num_entries)
264 printk(KERN_INFO "DMA-API: debugging enabled by kernel config\n"); 270 printk(KERN_INFO "DMA-API: debugging enabled by kernel config\n");
265} 271}
266 272
273static __init int dma_debug_cmdline(char *str)
274{
275 if (!str)
276 return -EINVAL;
277
278 if (strncmp(str, "off", 3) == 0) {
279 printk(KERN_INFO "DMA-API: debugging disabled on kernel "
280 "command line\n");
281 global_disable = true;
282 }
283
284 return 0;
285}
286
287static __init int dma_debug_entries_cmdline(char *str)
288{
289 int res;
290
291 if (!str)
292 return -EINVAL;
293
294 res = get_option(&str, &req_entries);
295
296 if (!res)
297 req_entries = 0;
298
299 return 0;
300}
301
302__setup("dma_debug=", dma_debug_cmdline);
303__setup("dma_debug_entries=", dma_debug_entries_cmdline);
304