Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70c5eb84 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull kbuild misc updates from Michal Marek:
 "The non-critical part of kbuild for v4.6-rc1:

   - coccinelle cleanup and a new patch
   - make tags rule for kprobe helpers
   - make rpm fix to avoid spurious grub2 entries
   - make rpm support for %postun script (Fedora only at the moment)"

* 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
  kbuild/mkspec: clean boot loader configuration on rpm removal
  kbuild/mkspec: fix grub2 installkernel issue
  Coccinelle: Add api/setup_timer.cocci
  coccinelle: bugon: reduce rule applicability
  Coccinelle: pm_runtime: reduce rule applicability
  Coccinelle: array_size: reduce rule applicability
  Coccinelle: reduce rule applicability
  scripts/tags.sh: add regex to map kprobe helpers
  scripts/coccinelle: modernize &
parents 3a1ef0e0 6ef41e22
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ ret = pm_runtime_api(...);
//  For org and report mode
//----------------------------------------------------------

@r depends on runtime_bad_err_handle exists@
@r depends on runtime_bad_err_handle && (org || report) exists@
position p1, p2;
identifier pm_runtime_api;
expression ret;
+199 −0
Original line number Diff line number Diff line
/// Use setup_timer function instead of initializing timer with the function
/// and data fields
// Confidence: High
// Copyright: (C) 2016 Vaishali Thakkar, Oracle. GPLv2
// Options: --no-includes --include-headers
// Keywords: init_timer, setup_timer

virtual patch
virtual context
virtual org
virtual report

@match_immediate_function_data_after_init_timer
depends on patch && !context && !org && !report@
expression e, func, da;
@@

-init_timer (&e);
+setup_timer (&e, func, da);

(
-e.function = func;
-e.data = da;
|
-e.data = da;
-e.function = func;
)

@match_function_and_data_after_init_timer
depends on patch && !context && !org && !report@
expression e1, e2, e3, e4, e5, a, b;
@@

-init_timer (&e1);
+setup_timer (&e1, a, b);

... when != a = e2
    when != b = e3
(
-e1.function = a;
... when != b = e4
-e1.data = b;
|
-e1.data = b;
... when != a = e5
-e1.function = a;
)

@r1 exists@
identifier f;
position p;
@@

f(...) { ... when any
  init_timer@p(...)
  ... when any
}

@r2 exists@
identifier g != r1.f;
struct timer_list t;
expression e8;
@@

g(...) { ... when any
  t.data = e8
  ... when any
}

// It is dangerous to use setup_timer if data field is initialized
// in another function.

@script:python depends on r2@
p << r1.p;
@@

cocci.include_match(False)

@r3 depends on patch && !context && !org && !report@
expression e6, e7, c;
position r1.p;
@@

-init_timer@p (&e6);
+setup_timer (&e6, c, 0UL);
... when != c = e7
-e6.function = c;

// ----------------------------------------------------------------------------

@match_immediate_function_data_after_init_timer_context
depends on !patch && (context || org || report)@
expression da, e, func;
position j0, j1, j2;
@@

* init_timer@j0 (&e);
(
* e@j1.function = func;
* e@j2.data = da;
|
* e@j1.data = da;
* e@j2.function = func;
)

@match_function_and_data_after_init_timer_context
depends on !patch &&
!match_immediate_function_data_after_init_timer_context &&
(context || org || report)@
expression a, b, e1, e2, e3, e4, e5;
position j0, j1, j2;
@@

* init_timer@j0 (&e1);
... when != a = e2
    when != b = e3
(
* e1@j1.function = a;
... when != b = e4
* e1@j2.data = b;
|
* e1@j1.data = b;
... when != a = e5
* e1@j2.function = a;
)

@r3_context depends on !patch &&
!match_immediate_function_data_after_init_timer_context &&
!match_function_and_data_after_init_timer_context &&
(context || org || report)@
expression c, e6, e7;
position r1.p;
position j0, j1;
@@

* init_timer@j0@p (&e6);
... when != c = e7
* e6@j1.function = c;

// ----------------------------------------------------------------------------

@script:python match_immediate_function_data_after_init_timer_org
depends on org@
j0 << match_immediate_function_data_after_init_timer_context.j0;
j1 << match_immediate_function_data_after_init_timer_context.j1;
j2 << match_immediate_function_data_after_init_timer_context.j2;
@@

msg = "Use setup_timer function."
coccilib.org.print_todo(j0[0], msg)
coccilib.org.print_link(j1[0], "")
coccilib.org.print_link(j2[0], "")

@script:python match_function_and_data_after_init_timer_org depends on org@
j0 << match_function_and_data_after_init_timer_context.j0;
j1 << match_function_and_data_after_init_timer_context.j1;
j2 << match_function_and_data_after_init_timer_context.j2;
@@

msg = "Use setup_timer function."
coccilib.org.print_todo(j0[0], msg)
coccilib.org.print_link(j1[0], "")
coccilib.org.print_link(j2[0], "")

@script:python r3_org depends on org@
j0 << r3_context.j0;
j1 << r3_context.j1;
@@

msg = "Use setup_timer function."
coccilib.org.print_todo(j0[0], msg)
coccilib.org.print_link(j1[0], "")

// ----------------------------------------------------------------------------

@script:python match_immediate_function_data_after_init_timer_report
depends on report@
j0 << match_immediate_function_data_after_init_timer_context.j0;
j1 << match_immediate_function_data_after_init_timer_context.j1;
@@

msg = "Use setup_timer function for function on line %s." % (j1[0].line)
coccilib.report.print_report(j0[0], msg)

@script:python match_function_and_data_after_init_timer_report depends on report@
j0 << match_function_and_data_after_init_timer_context.j0;
j1 << match_function_and_data_after_init_timer_context.j1;
@@

msg = "Use setup_timer function for function on line %s." % (j1[0].line)
coccilib.report.print_report(j0[0], msg)

@script:python r3_report depends on report@
j0 << r3_context.j0;
j1 << r3_context.j1;
@@

msg = "Use setup_timer function for function on line %s." % (j1[0].line)
coccilib.report.print_report(j0[0], msg)
+1 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ T[] E;
//  For org and report mode
//----------------------------------------------------------

@r@
@r depends on (org || report)@
type T;
T[] E;
position p;
+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ T **x;
//  For org and report mode
//----------------------------------------------------------

@r disable sizeof_type_expr@
@r depends on (org || report) disable sizeof_type_expr@
type T;
T **x;
position p;
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ expression e;
//  For org and report mode
//----------------------------------------------------------

@r@
@r depends on (org || report)@
expression e;
position p;
@@
Loading