• Luis R. Rodriguez's avatar
    coccicheck: enable parmap support · c930a1b2
    Luis R. Rodriguez authored
    Coccinelle has had parmap support since 1.0.2, this means
    it supports --jobs, enabling built-in multithreaded functionality,
    instead of needing one to script it out. Just look for --jobs
    in the help output to determine if this is supported and use it
    only if your number of processors detected is > 1.
    
    If parmap is enabled also enable the load balancing to be dynamic, so
    that if a thread finishes early we keep feeding it.
    
    stderr is currently sent to /dev/null, addressing a way to capture
    that will be addressed next.
    
    If --jobs is not supported we fallback to the old mechanism.
    We expect to deprecate the old mechanism as soon as we can get
    confirmation all users are ready.
    
    While at it propagate back into the shell script any coccinelle error
    code. When used in serialized mode where all cocci files are run this
    also stops processing if an error has occured. This lets us handle some
    errors in coccinelle cocci files and if they bail out we should inspect
    the errors. This will be more useful later to help annotate coccinelle
    version dependency requirements. This will let you run only SmPL files
    that your system supports.
    
    Extend Documentation/coccinelle.txt as well.
    
    As a small example, prior to this change, on an 8-core system:
    
    Before:
    
    $ export COCCI=scripts/coccinelle/free/kfree.cocci
    $ time make coccicheck MODE=report
    ...
    
    real    29m14.912s
    user    103m1.796s
    sys     0m4.464s
    
    After:
    
    real    16m22.435s
    user    128m30.060s
    sys     0m2.712s
    
    v4:
    
    o expand Documentation/coccinelle.txt to reflect parmap support info
    o update commit log to reflect what we actually do now with stderr
    o split out DEBUG_FILE use into another patch
    o detect number of CPUs and if its 1 then skip parmap support,
      note that if you still support parmap, but have 1 CPU you will
      also go through the new branches, so the old complex multithreaded process
      is skipped as well.
    
    v3:
    
    o move USE_JOBS to avoid being overriden
    
    v2:
    
    o redirect coccinelle stderr to /dev/null by default and
      only if DEBUG_FILE is used do we pass it to a file
    o fix typo of paramap/parmap
    Signed-off-by: default avatarLuis R. Rodriguez <mcgrof@kernel.org>
    Acked-by: default avatarNicolas Palix <nicolas.palix@imag.fr>
    Signed-off-by: default avatarMichal Marek <mmarek@suse.com>
    c930a1b2
coccinelle.txt 9.8 KB