diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-11-25 08:37:16 -1000 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-11-25 08:37:16 -1000 |
commit | 844056fd74ebdd826bd23a7d989597e15f478acb (patch) | |
tree | 25855ccc10878455acb61d38a62f92c1289912f8 /scripts | |
parent | ca122fe376fc43f7565e3e56e6777d06a433a4cc (diff) | |
parent | 54b8a2306b928abca4d3e9d7e2c17a4673032e1c (diff) | |
download | op-kernel-dev-844056fd74ebdd826bd23a7d989597e15f478acb.zip op-kernel-dev-844056fd74ebdd826bd23a7d989597e15f478acb.tar.gz |
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer updates from Thomas Gleixner:
- The final conversion of timer wheel timers to timer_setup().
A few manual conversions and a large coccinelle assisted sweep and
the removal of the old initialization mechanisms and the related
code.
- Remove the now unused VSYSCALL update code
- Fix permissions of /proc/timer_list. I still need to get rid of that
file completely
- Rename a misnomed clocksource function and remove a stale declaration
* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (27 commits)
m68k/macboing: Fix missed timer callback assignment
treewide: Remove TIMER_FUNC_TYPE and TIMER_DATA_TYPE casts
timer: Remove redundant __setup_timer*() macros
timer: Pass function down to initialization routines
timer: Remove unused data arguments from macros
timer: Switch callback prototype to take struct timer_list * argument
timer: Pass timer_list pointer to callbacks unconditionally
Coccinelle: Remove setup_timer.cocci
timer: Remove setup_*timer() interface
timer: Remove init_timer() interface
treewide: setup_timer() -> timer_setup() (2 field)
treewide: setup_timer() -> timer_setup()
treewide: init_timer() -> setup_timer()
treewide: Switch DEFINE_TIMER callbacks to struct timer_list *
s390: cmm: Convert timers to use timer_setup()
lightnvm: Convert timers to use timer_setup()
drivers/net: cris: Convert timers to use timer_setup()
drm/vc4: Convert timers to use timer_setup()
block/laptop_mode: Convert timers to use timer_setup()
net/atm/mpc: Avoid open-coded assignment of timer callback function
...
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/coccinelle/api/setup_timer.cocci | 277 |
1 files changed, 0 insertions, 277 deletions
diff --git a/scripts/coccinelle/api/setup_timer.cocci b/scripts/coccinelle/api/setup_timer.cocci deleted file mode 100644 index e457708..0000000 --- a/scripts/coccinelle/api/setup_timer.cocci +++ /dev/null @@ -1,277 +0,0 @@ -/// Use setup_timer function instead of initializing timer with the function -/// and data fields -// Confidence: High -// Copyright: (C) 2016 Vaishali Thakkar, Oracle. GPLv2 -// Copyright: (C) 2017 Kees Cook, Google. GPLv2 -// Options: --no-includes --include-headers -// Keywords: init_timer, setup_timer - -virtual patch -virtual context -virtual org -virtual report - -// Match the common cases first to avoid Coccinelle parsing loops with -// "... when" clauses. - -@match_immediate_function_data_after_init_timer -depends on patch && !context && !org && !report@ -expression e, func, da; -@@ - --init_timer -+setup_timer - ( \(&e\|e\) -+, func, da - ); -( --\(e.function\|e->function\) = func; --\(e.data\|e->data\) = da; -| --\(e.data\|e->data\) = da; --\(e.function\|e->function\) = func; -) - -@match_immediate_function_data_before_init_timer -depends on patch && !context && !org && !report@ -expression e, func, da; -@@ - -( --\(e.function\|e->function\) = func; --\(e.data\|e->data\) = da; -| --\(e.data\|e->data\) = da; --\(e.function\|e->function\) = func; -) --init_timer -+setup_timer - ( \(&e\|e\) -+, func, da - ); - -@match_function_and_data_after_init_timer -depends on patch && !context && !org && !report@ -expression e, e2, e3, e4, e5, func, da; -@@ - --init_timer -+setup_timer - ( \(&e\|e\) -+, func, da - ); - ... when != func = e2 - when != da = e3 -( --e.function = func; -... when != da = e4 --e.data = da; -| --e->function = func; -... when != da = e4 --e->data = da; -| --e.data = da; -... when != func = e5 --e.function = func; -| --e->data = da; -... when != func = e5 --e->function = func; -) - -@match_function_and_data_before_init_timer -depends on patch && !context && !org && !report@ -expression e, e2, e3, e4, e5, func, da; -@@ -( --e.function = func; -... when != da = e4 --e.data = da; -| --e->function = func; -... when != da = e4 --e->data = da; -| --e.data = da; -... when != func = e5 --e.function = func; -| --e->data = da; -... when != func = e5 --e->function = func; -) -... when != func = e2 - when != da = e3 --init_timer -+setup_timer - ( \(&e\|e\) -+, func, da - ); - -@r1 exists@ -expression t; -identifier f; -position p; -@@ - -f(...) { ... when any - init_timer@p(\(&t\|t\)) - ... when any -} - -@r2 exists@ -expression r1.t; -identifier g != r1.f; -expression e8; -@@ - -g(...) { ... when any - \(t.data\|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 r1.t, func, e7; -position r1.p; -@@ - -( --init_timer@p(&t); -+setup_timer(&t, func, 0UL); -... when != func = e7 --t.function = func; -| --t.function = func; -... when != func = e7 --init_timer@p(&t); -+setup_timer(&t, func, 0UL); -| --init_timer@p(t); -+setup_timer(t, func, 0UL); -... when != func = e7 --t->function = func; -| --t->function = func; -... when != func = e7 --init_timer@p(t); -+setup_timer(t, func, 0UL); -) - -// ---------------------------------------------------------------------------- - -@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 && (context || org || report)@ -expression a, b, e1, e2, e3, e4, e5; -position j0 != match_immediate_function_data_after_init_timer_context.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 && (context || org || report)@ -expression c, e6, e7; -position r1.p; -position j0 != - {match_immediate_function_data_after_init_timer_context.j0, - match_function_and_data_after_init_timer_context.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) |