* [Cocci] coccinelle problems with kernel code @ 2015-09-08 18:07 Jörn Engel 2015-09-08 21:17 ` Julia Lawall 0 siblings, 1 reply; 9+ messages in thread From: Jörn Engel @ 2015-09-08 18:07 UTC (permalink / raw) To: cocci Tried to use coccinelle on the linux kernel for the first time. It seems to get things mostly right, but not quite. Here is the semantic patch: @@ expression E; @@ -down_read(&E->mmap_sem) +mm_read_lock(E) @@ expression E; @@ -down_read_trylock(&E->mmap_sem) +mm_read_trylock(E) @@ expression E; @@ -up_read(&E->mmap_sem) +mm_read_unlock(E) @@ expression E; @@ -down_write(&E->mmap_sem) +mm_write_lock(E) @@ expression E; @@ -down_write_trylock(&E->mmap_sem) +mm_write_trylock(E) @@ expression E; @@ -up_write(&E->mmap_sem) +mm_write_unlock(E) I run into problems whenever handling system calls. Looks like the SYSCALL_DEFINE5() macro and friends are causing problems. Here is my attempt to handle things. #define SYSCALL_DEFINE1(func, t1, a1) \ asmlinkage unsigned long func(t1 a1) #define SYSCALL_DEFINE2(func, t1, a1, t2, a2) \ asmlinkage unsigned long func(t1 a1, t2 a2) #define SYSCALL_DEFINE3(func, t1, a1, t2, a2, t3, a3) \ asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3) #define SYSCALL_DEFINE4(func, t1, a1, t2, a2, t3, a3, t4, a4) \ asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4) #define SYSCALL_DEFINE5(func, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \ asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) #define SYSCALL_DEFINE6(func, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \ asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) Should that be included into standard.h? J?rn -- It is a clich? that most clich?s are true, but then, like most clich?s, that clich? is untrue. -- Stephen Fry ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Cocci] coccinelle problems with kernel code 2015-09-08 18:07 [Cocci] coccinelle problems with kernel code Jörn Engel @ 2015-09-08 21:17 ` Julia Lawall 2015-09-08 21:45 ` Jörn Engel 0 siblings, 1 reply; 9+ messages in thread From: Julia Lawall @ 2015-09-08 21:17 UTC (permalink / raw) To: cocci On Tue, 8 Sep 2015, J?rn Engel wrote: > Tried to use coccinelle on the linux kernel for the first time. It > seems to get things mostly right, but not quite. Here is the semantic > patch: > > @@ expression E; @@ > -down_read(&E->mmap_sem) > +mm_read_lock(E) > @@ expression E; @@ > -down_read_trylock(&E->mmap_sem) > +mm_read_trylock(E) > @@ expression E; @@ > -up_read(&E->mmap_sem) > +mm_read_unlock(E) > @@ expression E; @@ > -down_write(&E->mmap_sem) > +mm_write_lock(E) > @@ expression E; @@ > -down_write_trylock(&E->mmap_sem) > +mm_write_trylock(E) > @@ expression E; @@ > -up_write(&E->mmap_sem) > +mm_write_unlock(E) So this all went OK? > I run into problems whenever handling system calls. Looks like the > SYSCALL_DEFINE5() macro and friends are causing problems. Here is my > attempt to handle things. > > #define SYSCALL_DEFINE1(func, t1, a1) \ > asmlinkage unsigned long func(t1 a1) > #define SYSCALL_DEFINE2(func, t1, a1, t2, a2) \ > asmlinkage unsigned long func(t1 a1, t2 a2) > #define SYSCALL_DEFINE3(func, t1, a1, t2, a2, t3, a3) \ > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3) > #define SYSCALL_DEFINE4(func, t1, a1, t2, a2, t3, a3, t4, a4) \ > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4) > #define SYSCALL_DEFINE5(func, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \ > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) > #define SYSCALL_DEFINE6(func, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \ > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) > > Should that be included into standard.h? If it works, I could certainly add it. thanks, julia ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Cocci] coccinelle problems with kernel code 2015-09-08 21:17 ` Julia Lawall @ 2015-09-08 21:45 ` Jörn Engel 2015-09-09 5:24 ` Julia Lawall 0 siblings, 1 reply; 9+ messages in thread From: Jörn Engel @ 2015-09-08 21:45 UTC (permalink / raw) To: cocci On Tue, Sep 08, 2015 at 11:17:58PM +0200, Julia Lawall wrote: > On Tue, 8 Sep 2015, J?rn Engel wrote: > > > Tried to use coccinelle on the linux kernel for the first time. It > > seems to get things mostly right, but not quite. Here is the semantic > > patch: > > > > @@ expression E; @@ > > -down_read(&E->mmap_sem) > > +mm_read_lock(E) > > @@ expression E; @@ > > -down_read_trylock(&E->mmap_sem) > > +mm_read_trylock(E) > > @@ expression E; @@ > > -up_read(&E->mmap_sem) > > +mm_read_unlock(E) > > @@ expression E; @@ > > -down_write(&E->mmap_sem) > > +mm_write_lock(E) > > @@ expression E; @@ > > -down_write_trylock(&E->mmap_sem) > > +mm_write_trylock(E) > > @@ expression E; @@ > > -up_write(&E->mmap_sem) > > +mm_write_unlock(E) > > So this all went OK? Mostly. There are still a few troublemakers remaining. But few enough that I don't mind handling them manually. Automatic changes: 140 files changed, 581 insertions(+), 581 deletions(-) Troublemakers: arch/mips/mm/fault.c (5 lines) arch/um/include/asm/mmu_context.h (2 lines) include/linux/huge_mm.h (1 line) Commandline: spatch --sp-file mmap_sem.cocci --dir . --macro-file coccinelle.h If I explicitly pass the two headerfiles as parameters, they get handled as well. Maybe a bug in the recursive directory walk? arch/mips/mm/fault.c seems to have a problem with one of the conditionals. I could reduce things to the following testcase: void foo(unsigned long address) { down_read(&mm->mmap_sem); vma = find_vma(current->mm, address); if (!vma) goto bad_area; if (vma->vm_start <= address) goto good_area; if (!(vma->vm_flags & VM_GROWSDOWN)) goto bad_area; if (expand_stack(vma, address)) goto bad_area; bad_area: up_read(&mm->mmap_sem); } Remove the "!(vma->vm_flags & VM_GROWSDOWN)" condition and it works. Leave the condition and spatch fails silently. > > I run into problems whenever handling system calls. Looks like the > > SYSCALL_DEFINE5() macro and friends are causing problems. Here is my > > attempt to handle things. > > > > #define SYSCALL_DEFINE1(func, t1, a1) \ > > asmlinkage unsigned long func(t1 a1) > > #define SYSCALL_DEFINE2(func, t1, a1, t2, a2) \ > > asmlinkage unsigned long func(t1 a1, t2 a2) > > #define SYSCALL_DEFINE3(func, t1, a1, t2, a2, t3, a3) \ > > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3) > > #define SYSCALL_DEFINE4(func, t1, a1, t2, a2, t3, a3, t4, a4) \ > > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4) > > #define SYSCALL_DEFINE5(func, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \ > > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) > > #define SYSCALL_DEFINE6(func, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \ > > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) > > > > Should that be included into standard.h? > > If it works, I could certainly add it. It works. And tracking down failures in coccinelle is definitely more fun than making 581 manual changes without messing things up. Thank you! J?rn -- Homo Sapiens is a goal, not a description. -- unknown ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Cocci] coccinelle problems with kernel code 2015-09-08 21:45 ` Jörn Engel @ 2015-09-09 5:24 ` Julia Lawall 2015-09-09 5:57 ` Jörn Engel 0 siblings, 1 reply; 9+ messages in thread From: Julia Lawall @ 2015-09-09 5:24 UTC (permalink / raw) To: cocci On Tue, 8 Sep 2015, J?rn Engel wrote: > On Tue, Sep 08, 2015 at 11:17:58PM +0200, Julia Lawall wrote: > > On Tue, 8 Sep 2015, J?rn Engel wrote: > > > > > Tried to use coccinelle on the linux kernel for the first time. It > > > seems to get things mostly right, but not quite. Here is the semantic > > > patch: > > > > > > @@ expression E; @@ > > > -down_read(&E->mmap_sem) > > > +mm_read_lock(E) > > > @@ expression E; @@ > > > -down_read_trylock(&E->mmap_sem) > > > +mm_read_trylock(E) > > > @@ expression E; @@ > > > -up_read(&E->mmap_sem) > > > +mm_read_unlock(E) > > > @@ expression E; @@ > > > -down_write(&E->mmap_sem) > > > +mm_write_lock(E) > > > @@ expression E; @@ > > > -down_write_trylock(&E->mmap_sem) > > > +mm_write_trylock(E) > > > @@ expression E; @@ > > > -up_write(&E->mmap_sem) > > > +mm_write_unlock(E) > > > > So this all went OK? > > Mostly. There are still a few troublemakers remaining. But few enough > that I don't mind handling them manually. > > Automatic changes: > 140 files changed, 581 insertions(+), 581 deletions(-) > > Troublemakers: > arch/mips/mm/fault.c (5 lines) > arch/um/include/asm/mmu_context.h (2 lines) > include/linux/huge_mm.h (1 line) > > Commandline: > spatch --sp-file mmap_sem.cocci --dir . --macro-file coccinelle.h > > If I explicitly pass the two headerfiles as parameters, they get handled > as well. Maybe a bug in the recursive directory walk? By default, Coccinelle only considers a limited number of header files. First it collects the C files. Then it includes also the header files that have the same name as a C files. Including header files with C files is only useful for acquiring type information. You don't care about that for your rules, so you would be better off with --no-includes. On the oter hand if your patterns occur in header files you want them to be processed. For that, add the command line --include-headers. The point is that including header files can drastically increase the code size, and header files can be difficult to parse, due to #ifdefs etc, so overall including more than necessary can increase the running time a lot. > arch/mips/mm/fault.c seems to have a problem with one of the > conditionals. I could reduce things to the following testcase: > > void foo(unsigned long address) > { > down_read(&mm->mmap_sem); > vma = find_vma(current->mm, address); > if (!vma) > goto bad_area; > if (vma->vm_start <= address) > goto good_area; > if (!(vma->vm_flags & VM_GROWSDOWN)) > goto bad_area; > if (expand_stack(vma, address)) > goto bad_area; > bad_area: > up_read(&mm->mmap_sem); > } > > Remove the "!(vma->vm_flags & VM_GROWSDOWN)" condition and it works. > Leave the condition and spatch fails silently. There is probably a parsing problem. By default Coccinelle doesn't report these, because there are likely many of them, and most of them are likely not relevant to the code you want to process. You can see the parsing problems by running spatch --parse-c file.c. There may be quite a lot of output. At the end you will see a summary of how successful the parsing was. If it was somewhat not successful, you can look up fpr the line beginning with BAD to see where the problem is. The lines beginning with bad show the lines that were skipped due to the problem. > > > I run into problems whenever handling system calls. Looks like the > > > SYSCALL_DEFINE5() macro and friends are causing problems. Here is my > > > attempt to handle things. > > > > > > #define SYSCALL_DEFINE1(func, t1, a1) \ > > > asmlinkage unsigned long func(t1 a1) > > > #define SYSCALL_DEFINE2(func, t1, a1, t2, a2) \ > > > asmlinkage unsigned long func(t1 a1, t2 a2) > > > #define SYSCALL_DEFINE3(func, t1, a1, t2, a2, t3, a3) \ > > > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3) > > > #define SYSCALL_DEFINE4(func, t1, a1, t2, a2, t3, a3, t4, a4) \ > > > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4) > > > #define SYSCALL_DEFINE5(func, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \ > > > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) > > > #define SYSCALL_DEFINE6(func, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \ > > > asmlinkage unsigned long func(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) > > > > > > Should that be included into standard.h? > > > > If it works, I could certainly add it. > > It works. > > And tracking down failures in coccinelle is definitely more fun than > making 581 manual changes without messing things up. Thank you! :) julia > J?rn > > -- > Homo Sapiens is a goal, not a description. > -- unknown > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Cocci] coccinelle problems with kernel code 2015-09-09 5:24 ` Julia Lawall @ 2015-09-09 5:57 ` Jörn Engel 2015-09-09 8:22 ` SF Markus Elfring 2015-09-09 10:08 ` Julia Lawall 0 siblings, 2 replies; 9+ messages in thread From: Jörn Engel @ 2015-09-09 5:57 UTC (permalink / raw) To: cocci On Wed, Sep 09, 2015 at 07:24:42AM +0200, Julia Lawall wrote: > > Including header files with C files is only useful for acquiring type > information. You don't care about that for your rules, so you would be > better off with --no-includes. On the oter hand if your patterns occur in > header files you want them to be processed. For that, add the command > line --include-headers. Ack. --include-headers does the trick for me. > The point is that including header files can drastically increase the code > size, and header files can be difficult to parse, due to > #ifdefs etc, so overall including more than necessary can increase the > running time a lot. On that note, it might make sense to add multithreading or multiprocessing. My kernel tree has roughly 35000 files, so splitting the work shouldn't be much of a problem. And given the processing times, it appears as if a 6-fold speed up should be possible on my aging notebook - more on bigger machines. real 0m35.226s user 0m19.320s sys 0m2.736s I have done similar stuff to grep. tgrep is a python wrapper around regular grep and can give a 48x speedup on a beefy machine we have. Of course if ocaml has multithreading support, that is likely a nicer solution than a python wrapper. > > arch/mips/mm/fault.c seems to have a problem with one of the > > conditionals. I could reduce things to the following testcase: > > > > void foo(unsigned long address) > > { > > down_read(&mm->mmap_sem); > > vma = find_vma(current->mm, address); > > if (!vma) > > goto bad_area; > > if (vma->vm_start <= address) > > goto good_area; > > if (!(vma->vm_flags & VM_GROWSDOWN)) > > goto bad_area; > > if (expand_stack(vma, address)) > > goto bad_area; > > bad_area: > > up_read(&mm->mmap_sem); > > } > > > > Remove the "!(vma->vm_flags & VM_GROWSDOWN)" condition and it works. > > Leave the condition and spatch fails silently. > > There is probably a parsing problem. By default Coccinelle doesn't report > these, because there are likely many of them, and most of them are likely > not relevant to the code you want to process. You can see the parsing > problems by running spatch --parse-c file.c. There may be quite a lot of > output. At the end you will see a summary of how successful the parsing > was. If it was somewhat not successful, you can look up fpr the line > beginning with BAD to see where the problem is. The lines beginning with > bad show the lines that were skipped due to the problem. I tried that and didn't see anything helpful. Full output below. init_defs_builtins: /usr/share/coccinelle/standard.h init_defs: coccinelle.h PARSING: arch/mips/mm/fault.c (ONCE) CPP-commenting a #if 0 or #if LINUX_VERSION or __cplusplus (ONCE) CPP-MACRO: found known macro = asmlinkage (ONCE) CPP-MACRO: found known macro = __kprobes (ONCE) CPP-MACRO: found known macro = __user (ONCE) CPP-MACRO: found known macro = KERN_ALERT passed:asmlinkage __kprobes passed:#if 0 passed:printk ( "Cpu%d[%s:%d:%0*lx:%ld:%0*lx]\n" , raw_smp_processor_id ( ) , passed:current -> comm , current -> pid , field , address , write , passed:field , regs -> cp0_epc ) ; passed:#endif passed:#if 0 passed:pr_notice ( "Cpu%d[%s:%d:%0*lx:%ld:%0*lx] XI violation\n" , passed:raw_smp_processor_id ( ) , passed:current -> comm , current -> pid , passed:field , address , write , passed:field , regs -> cp0_epc ) ; passed:#endif passed:#if 0 passed:pr_notice ( "Cpu%d[%s:%d:%0*lx:%ld:%0*lx] RI violation\n" , passed:raw_smp_processor_id ( ) , passed:current -> comm , current -> pid , passed:field , address , write , passed:field , regs -> cp0_epc ) ; passed:#endif passed:#if 0 passed:printk ( "do_page_fault() #2: sending SIGSEGV to %s for " passed:"invalid %s\n%0*lx (epc == %0*lx, ra == %0*lx)\n" , passed:tsk -> comm , passed:write ? "write access to" : "read access from" , passed:field , address , passed:field , ( unsigned long ) regs -> cp0_epc , passed:field , ( unsigned long ) regs -> regs [ 31 ] ) ; passed:#endif passed:__user passed:#if 0 passed:printk ( "do_page_fault() #3: sending SIGBUS to %s for " passed:"invalid %s\n%0*lx (epc == %0*lx, ra == %0*lx)\n" , passed:tsk -> comm , passed:write ? "write access to" : "read access from" , passed:field , address , passed:field , ( unsigned long ) regs -> cp0_epc , passed:field , ( unsigned long ) regs -> regs [ 31 ] ) ; passed:#endif passed:__user ----------------------------------------------------------------------- maybe 10 most problematic tokens ----------------------------------------------------------------------- ----------------------------------------------------------------------- NB total files = 1; perfect = 1; pbs = 0; timeout = 0; =========> 100% nb good = 313, nb passed = 40 =========> 11.33% passed nb good = 313, nb bad = 0 =========> 100.00% good or passed J?rn -- When people work hard for you for a pat on the back, you've got to give them that pat. -- Robert Heinlein ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Cocci] coccinelle problems with kernel code 2015-09-09 5:57 ` Jörn Engel @ 2015-09-09 8:22 ` SF Markus Elfring 2015-09-09 10:08 ` Julia Lawall 1 sibling, 0 replies; 9+ messages in thread From: SF Markus Elfring @ 2015-09-09 8:22 UTC (permalink / raw) To: cocci > On that note, it might make sense to add multithreading or > multiprocessing. Did you try out to pass the parameter "--jobs" to a current version of the command "spatch"? Would you like to experiment with parameters "--index" and "--max"? Regards, Markus ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Cocci] coccinelle problems with kernel code 2015-09-09 5:57 ` Jörn Engel 2015-09-09 8:22 ` SF Markus Elfring @ 2015-09-09 10:08 ` Julia Lawall 2015-09-09 16:40 ` Jörn Engel 1 sibling, 1 reply; 9+ messages in thread From: Julia Lawall @ 2015-09-09 10:08 UTC (permalink / raw) To: cocci On Tue, 8 Sep 2015, J?rn Engel wrote: > On Wed, Sep 09, 2015 at 07:24:42AM +0200, Julia Lawall wrote: > > > > Including header files with C files is only useful for acquiring type > > information. You don't care about that for your rules, so you would be > > better off with --no-includes. On the oter hand if your patterns occur in > > header files you want them to be processed. For that, add the command > > line --include-headers. > > Ack. --include-headers does the trick for me. > > > The point is that including header files can drastically increase the code > > size, and header files can be difficult to parse, due to > > #ifdefs etc, so overall including more than necessary can increase the > > running time a lot. > > On that note, it might make sense to add multithreading or > multiprocessing. My kernel tree has roughly 35000 files, so splitting > the work shouldn't be much of a problem. And given the processing > times, it appears as if a 6-fold speed up should be possible on my aging > notebook - more on bigger machines. This is available is you have Coccinelle version 1.0.2. Just give -j X where X is the number of cores that you want to use. Will check the rest later. julia > real 0m35.226s > user 0m19.320s > sys 0m2.736s > > I have done similar stuff to grep. tgrep is a python wrapper around > regular grep and can give a 48x speedup on a beefy machine we have. > Of course if ocaml has multithreading support, that is likely a nicer > solution than a python wrapper. > > > > arch/mips/mm/fault.c seems to have a problem with one of the > > > conditionals. I could reduce things to the following testcase: > > > > > > void foo(unsigned long address) > > > { > > > down_read(&mm->mmap_sem); > > > vma = find_vma(current->mm, address); > > > if (!vma) > > > goto bad_area; > > > if (vma->vm_start <= address) > > > goto good_area; > > > if (!(vma->vm_flags & VM_GROWSDOWN)) > > > goto bad_area; > > > if (expand_stack(vma, address)) > > > goto bad_area; > > > bad_area: > > > up_read(&mm->mmap_sem); > > > } > > > > > > Remove the "!(vma->vm_flags & VM_GROWSDOWN)" condition and it works. > > > Leave the condition and spatch fails silently. > > > > There is probably a parsing problem. By default Coccinelle doesn't report > > these, because there are likely many of them, and most of them are likely > > not relevant to the code you want to process. You can see the parsing > > problems by running spatch --parse-c file.c. There may be quite a lot of > > output. At the end you will see a summary of how successful the parsing > > was. If it was somewhat not successful, you can look up fpr the line > > beginning with BAD to see where the problem is. The lines beginning with > > bad show the lines that were skipped due to the problem. > > I tried that and didn't see anything helpful. Full output below. > > init_defs_builtins: /usr/share/coccinelle/standard.h > init_defs: coccinelle.h > > PARSING: arch/mips/mm/fault.c > (ONCE) CPP-commenting a #if 0 or #if LINUX_VERSION or __cplusplus > (ONCE) CPP-MACRO: found known macro = asmlinkage > (ONCE) CPP-MACRO: found known macro = __kprobes > (ONCE) CPP-MACRO: found known macro = __user > (ONCE) CPP-MACRO: found known macro = KERN_ALERT > passed:asmlinkage __kprobes > passed:#if 0 > passed:printk ( "Cpu%d[%s:%d:%0*lx:%ld:%0*lx]\n" , raw_smp_processor_id ( ) , > passed:current -> comm , current -> pid , field , address , write , > passed:field , regs -> cp0_epc ) ; > passed:#endif > passed:#if 0 > passed:pr_notice ( "Cpu%d[%s:%d:%0*lx:%ld:%0*lx] XI violation\n" , > passed:raw_smp_processor_id ( ) , > passed:current -> comm , current -> pid , > passed:field , address , write , > passed:field , regs -> cp0_epc ) ; > passed:#endif > passed:#if 0 > passed:pr_notice ( "Cpu%d[%s:%d:%0*lx:%ld:%0*lx] RI violation\n" , > passed:raw_smp_processor_id ( ) , > passed:current -> comm , current -> pid , > passed:field , address , write , > passed:field , regs -> cp0_epc ) ; > passed:#endif > passed:#if 0 > passed:printk ( "do_page_fault() #2: sending SIGSEGV to %s for " > passed:"invalid %s\n%0*lx (epc == %0*lx, ra == %0*lx)\n" , > passed:tsk -> comm , > passed:write ? "write access to" : "read access from" , > passed:field , address , > passed:field , ( unsigned long ) regs -> cp0_epc , > passed:field , ( unsigned long ) regs -> regs [ 31 ] ) ; > passed:#endif > passed:__user > passed:#if 0 > passed:printk ( "do_page_fault() #3: sending SIGBUS to %s for " > passed:"invalid %s\n%0*lx (epc == %0*lx, ra == %0*lx)\n" , > passed:tsk -> comm , > passed:write ? "write access to" : "read access from" , > passed:field , address , > passed:field , ( unsigned long ) regs -> cp0_epc , > passed:field , ( unsigned long ) regs -> regs [ 31 ] ) ; > passed:#endif > passed:__user > ----------------------------------------------------------------------- > maybe 10 most problematic tokens > ----------------------------------------------------------------------- > ----------------------------------------------------------------------- > NB total files = 1; perfect = 1; pbs = 0; timeout = 0; =========> 100% > nb good = 313, nb passed = 40 =========> 11.33% passed > nb good = 313, nb bad = 0 =========> 100.00% good or passed > > J?rn > > -- > When people work hard for you for a pat on the back, you've got > to give them that pat. > -- Robert Heinlein > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Cocci] coccinelle problems with kernel code 2015-09-09 10:08 ` Julia Lawall @ 2015-09-09 16:40 ` Jörn Engel 2015-09-09 17:50 ` Julia Lawall 0 siblings, 1 reply; 9+ messages in thread From: Jörn Engel @ 2015-09-09 16:40 UTC (permalink / raw) To: cocci On Wed, Sep 09, 2015 at 12:08:02PM +0200, Julia Lawall wrote: > > This is available is you have Coccinelle version 1.0.2. Just give -j X > where X is the number of cores that you want to use. Debian is still at 1.0.0. I suspect I will wait for them to upgrade rather than package a newer version myself. Laziness wins the day. Again, thank you for this. It turned a nightmare into mere work. J?rn -- It's just what we asked for, but not what we want! -- anonymous ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Cocci] coccinelle problems with kernel code 2015-09-09 16:40 ` Jörn Engel @ 2015-09-09 17:50 ` Julia Lawall 0 siblings, 0 replies; 9+ messages in thread From: Julia Lawall @ 2015-09-09 17:50 UTC (permalink / raw) To: cocci On Wed, 9 Sep 2015, J?rn Engel wrote: > On Wed, Sep 09, 2015 at 12:08:02PM +0200, Julia Lawall wrote: > > > > This is available is you have Coccinelle version 1.0.2. Just give -j X > > where X is the number of cores that you want to use. > > Debian is still at 1.0.0. I suspect I will wait for them to upgrade > rather than package a newer version myself. Laziness wins the day. There is a scrit that provides an alternative soluiton to parallelism here: http://article.gmane.org/gmane.comp.version-control.coccinelle/684/match=kees+cook julia ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2015-09-09 17:50 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-09-08 18:07 [Cocci] coccinelle problems with kernel code Jörn Engel 2015-09-08 21:17 ` Julia Lawall 2015-09-08 21:45 ` Jörn Engel 2015-09-09 5:24 ` Julia Lawall 2015-09-09 5:57 ` Jörn Engel 2015-09-09 8:22 ` SF Markus Elfring 2015-09-09 10:08 ` Julia Lawall 2015-09-09 16:40 ` Jörn Engel 2015-09-09 17:50 ` Julia Lawall
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.