Dynamic Debug providing early boot debug messages via boot parameter
Subsystems (2)
cover Dynamic Debug providing early boot debug messages via boot parameter
this patch is against 2.6.35-rc5. Not sure whether Jason's latest fix is in there already and whether it conflicts with this series, but it should patch.
Please tell me if I should (have to) re-diff and against which branch I should do that.
The patches got boot tested via ddebug_query="file ec.c +p" which worked out fine.
Would be great to see these in the next kernel cycle (2.6.36).
Thanks,
Thomas
Signature · 1 line
������$ز|��I�\��bI'z�楖��'���'%&gsu�3��%`*���&(����}i�.���I�*i>?��,���0�m����6�77�0
PATCH 1/1 Dynamic Debug: Split out query string parsing/setup from proc_write
The parsing and applying of dynamic debug strings is not only useful for /sys/../dynamic_debug/control write access, but can also be used for boot parameter parsing.
The boot parameter is introduced in a follow up patch.
--- lib/dynamic_debug.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-)
lib/dynamic_debug.c +25 -15
@@ -429,6 +429,27 @@ static int ddebug_parse_flags(const charreturn 0 ; } +static int ddebug_exec_query (char *query_string) +{ +unsigned int flags =0 , mask =0 ; +struct ddebug_query query; +#define MAXWORDS 9 +int nwords; +char *words[MAXWORDS ]; + + nwords =ddebug_tokenize (query_string, words,MAXWORDS ); +if (nwords <=0 ) +return -EINVAL ; +if (ddebug_parse_query (words, nwords-1 , &query)) +return -EINVAL ; +if (ddebug_parse_flags (words[nwords-1 ], &flags, &mask)) +return -EINVAL ; + +/* actually go and implement the change */ +ddebug_change (&query, flags, mask); +return 0 ; +} +/* * File_ops->write method for <debugfs>/dynamic_debug/conrol. Gathers the * command text from userspace, parses and executes it.
@@ -436,12 +457,8 @@ static int ddebug_parse_flags(const charstatic ssize_t ddebug_proc_write (struct file *file,const char __user *ubuf,size_t len,loff_t *offp) { -unsigned int flags =0 , mask =0 ; -struct ddebug_query query; -#define MAXWORDS 9 -int nwords; -char *words[MAXWORDS ];char tmpbuf[256 ]; +int ret;if (len ==0 )return 0 ;
@@ -455,16 +472,9 @@ static ssize_t ddebug_proc_write(structprintk (KERN_INFO "%s: read %d bytes from userspace\n" , __func__, (int )len); - nwords =ddebug_tokenize (tmpbuf, words,MAXWORDS ); -if (nwords <=0 ) -return -EINVAL ; -if (ddebug_parse_query (words, nwords-1 , &query)) -return -EINVAL ; -if (ddebug_parse_flags (words[nwords-1 ], &flags, &mask)) -return -EINVAL ; - -/* actually go and implement the change */ -ddebug_change (&query, flags, mask); + ret =ddebug_exec_query (tmpbuf); +if (ret) +return ret; *offp += len;return len;