Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild

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 &

+215 -9
+1 -1
scripts/coccinelle/api/pm_runtime.cocci
··· 78 78 // For org and report mode 79 79 //---------------------------------------------------------- 80 80 81 - @r depends on runtime_bad_err_handle exists@ 81 + @r depends on runtime_bad_err_handle && (org || report) exists@ 82 82 position p1, p2; 83 83 identifier pm_runtime_api; 84 84 expression ret;
+199
scripts/coccinelle/api/setup_timer.cocci
··· 1 + /// Use setup_timer function instead of initializing timer with the function 2 + /// and data fields 3 + // Confidence: High 4 + // Copyright: (C) 2016 Vaishali Thakkar, Oracle. GPLv2 5 + // Options: --no-includes --include-headers 6 + // Keywords: init_timer, setup_timer 7 + 8 + virtual patch 9 + virtual context 10 + virtual org 11 + virtual report 12 + 13 + @match_immediate_function_data_after_init_timer 14 + depends on patch && !context && !org && !report@ 15 + expression e, func, da; 16 + @@ 17 + 18 + -init_timer (&e); 19 + +setup_timer (&e, func, da); 20 + 21 + ( 22 + -e.function = func; 23 + -e.data = da; 24 + | 25 + -e.data = da; 26 + -e.function = func; 27 + ) 28 + 29 + @match_function_and_data_after_init_timer 30 + depends on patch && !context && !org && !report@ 31 + expression e1, e2, e3, e4, e5, a, b; 32 + @@ 33 + 34 + -init_timer (&e1); 35 + +setup_timer (&e1, a, b); 36 + 37 + ... when != a = e2 38 + when != b = e3 39 + ( 40 + -e1.function = a; 41 + ... when != b = e4 42 + -e1.data = b; 43 + | 44 + -e1.data = b; 45 + ... when != a = e5 46 + -e1.function = a; 47 + ) 48 + 49 + @r1 exists@ 50 + identifier f; 51 + position p; 52 + @@ 53 + 54 + f(...) { ... when any 55 + init_timer@p(...) 56 + ... when any 57 + } 58 + 59 + @r2 exists@ 60 + identifier g != r1.f; 61 + struct timer_list t; 62 + expression e8; 63 + @@ 64 + 65 + g(...) { ... when any 66 + t.data = e8 67 + ... when any 68 + } 69 + 70 + // It is dangerous to use setup_timer if data field is initialized 71 + // in another function. 72 + 73 + @script:python depends on r2@ 74 + p << r1.p; 75 + @@ 76 + 77 + cocci.include_match(False) 78 + 79 + @r3 depends on patch && !context && !org && !report@ 80 + expression e6, e7, c; 81 + position r1.p; 82 + @@ 83 + 84 + -init_timer@p (&e6); 85 + +setup_timer (&e6, c, 0UL); 86 + ... when != c = e7 87 + -e6.function = c; 88 + 89 + // ---------------------------------------------------------------------------- 90 + 91 + @match_immediate_function_data_after_init_timer_context 92 + depends on !patch && (context || org || report)@ 93 + expression da, e, func; 94 + position j0, j1, j2; 95 + @@ 96 + 97 + * init_timer@j0 (&e); 98 + ( 99 + * e@j1.function = func; 100 + * e@j2.data = da; 101 + | 102 + * e@j1.data = da; 103 + * e@j2.function = func; 104 + ) 105 + 106 + @match_function_and_data_after_init_timer_context 107 + depends on !patch && 108 + !match_immediate_function_data_after_init_timer_context && 109 + (context || org || report)@ 110 + expression a, b, e1, e2, e3, e4, e5; 111 + position j0, j1, j2; 112 + @@ 113 + 114 + * init_timer@j0 (&e1); 115 + ... when != a = e2 116 + when != b = e3 117 + ( 118 + * e1@j1.function = a; 119 + ... when != b = e4 120 + * e1@j2.data = b; 121 + | 122 + * e1@j1.data = b; 123 + ... when != a = e5 124 + * e1@j2.function = a; 125 + ) 126 + 127 + @r3_context depends on !patch && 128 + !match_immediate_function_data_after_init_timer_context && 129 + !match_function_and_data_after_init_timer_context && 130 + (context || org || report)@ 131 + expression c, e6, e7; 132 + position r1.p; 133 + position j0, j1; 134 + @@ 135 + 136 + * init_timer@j0@p (&e6); 137 + ... when != c = e7 138 + * e6@j1.function = c; 139 + 140 + // ---------------------------------------------------------------------------- 141 + 142 + @script:python match_immediate_function_data_after_init_timer_org 143 + depends on org@ 144 + j0 << match_immediate_function_data_after_init_timer_context.j0; 145 + j1 << match_immediate_function_data_after_init_timer_context.j1; 146 + j2 << match_immediate_function_data_after_init_timer_context.j2; 147 + @@ 148 + 149 + msg = "Use setup_timer function." 150 + coccilib.org.print_todo(j0[0], msg) 151 + coccilib.org.print_link(j1[0], "") 152 + coccilib.org.print_link(j2[0], "") 153 + 154 + @script:python match_function_and_data_after_init_timer_org depends on org@ 155 + j0 << match_function_and_data_after_init_timer_context.j0; 156 + j1 << match_function_and_data_after_init_timer_context.j1; 157 + j2 << match_function_and_data_after_init_timer_context.j2; 158 + @@ 159 + 160 + msg = "Use setup_timer function." 161 + coccilib.org.print_todo(j0[0], msg) 162 + coccilib.org.print_link(j1[0], "") 163 + coccilib.org.print_link(j2[0], "") 164 + 165 + @script:python r3_org depends on org@ 166 + j0 << r3_context.j0; 167 + j1 << r3_context.j1; 168 + @@ 169 + 170 + msg = "Use setup_timer function." 171 + coccilib.org.print_todo(j0[0], msg) 172 + coccilib.org.print_link(j1[0], "") 173 + 174 + // ---------------------------------------------------------------------------- 175 + 176 + @script:python match_immediate_function_data_after_init_timer_report 177 + depends on report@ 178 + j0 << match_immediate_function_data_after_init_timer_context.j0; 179 + j1 << match_immediate_function_data_after_init_timer_context.j1; 180 + @@ 181 + 182 + msg = "Use setup_timer function for function on line %s." % (j1[0].line) 183 + coccilib.report.print_report(j0[0], msg) 184 + 185 + @script:python match_function_and_data_after_init_timer_report depends on report@ 186 + j0 << match_function_and_data_after_init_timer_context.j0; 187 + j1 << match_function_and_data_after_init_timer_context.j1; 188 + @@ 189 + 190 + msg = "Use setup_timer function for function on line %s." % (j1[0].line) 191 + coccilib.report.print_report(j0[0], msg) 192 + 193 + @script:python r3_report depends on report@ 194 + j0 << r3_context.j0; 195 + j1 << r3_context.j1; 196 + @@ 197 + 198 + msg = "Use setup_timer function for function on line %s." % (j1[0].line) 199 + coccilib.report.print_report(j0[0], msg)
+1 -1
scripts/coccinelle/iterators/use_after_iter.cocci
··· 123 123 | 124 124 sizeof(<+...c...+>) 125 125 | 126 - &c->member 126 + &c->member 127 127 | 128 128 c = E 129 129 |
+1 -1
scripts/coccinelle/misc/array_size.cocci
··· 59 59 // For org and report mode 60 60 //---------------------------------------------------------- 61 61 62 - @r@ 62 + @r depends on (org || report)@ 63 63 type T; 64 64 T[] E; 65 65 position p;
+1 -1
scripts/coccinelle/misc/badty.cocci
··· 50 50 // For org and report mode 51 51 //---------------------------------------------------------- 52 52 53 - @r disable sizeof_type_expr@ 53 + @r depends on (org || report) disable sizeof_type_expr@ 54 54 type T; 55 55 T **x; 56 56 position p;
+1 -1
scripts/coccinelle/misc/bugon.cocci
··· 40 40 // For org and report mode 41 41 //---------------------------------------------------------- 42 42 43 - @r@ 43 + @r depends on (org || report)@ 44 44 expression e; 45 45 position p; 46 46 @@
+9 -4
scripts/package/mkspec
··· 131 131 echo "" 132 132 echo "%post" 133 133 echo "if [ -x /sbin/installkernel -a -r /boot/vmlinuz-$KERNELRELEASE -a -r /boot/System.map-$KERNELRELEASE ]; then" 134 - echo "cp /boot/vmlinuz-$KERNELRELEASE /boot/vmlinuz-$KERNELRELEASE-rpm" 135 - echo "cp /boot/System.map-$KERNELRELEASE /boot/System.map-$KERNELRELEASE-rpm" 134 + echo "cp /boot/vmlinuz-$KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm" 135 + echo "cp /boot/System.map-$KERNELRELEASE /boot/.System.map-$KERNELRELEASE-rpm" 136 136 echo "rm -f /boot/vmlinuz-$KERNELRELEASE /boot/System.map-$KERNELRELEASE" 137 - echo "/sbin/installkernel $KERNELRELEASE /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm" 138 - echo "rm -f /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm" 137 + echo "/sbin/installkernel $KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm" 138 + echo "rm -f /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm" 139 + echo "fi" 140 + echo "" 141 + echo "%preun" 142 + echo "if [ -x /sbin/new-kernel-pkg ]; then" 143 + echo "new-kernel-pkg --remove $KERNELRELEASE --rminitrd --initrdfile=/boot/initramfs-$KERNELRELEASE.img" 139 144 echo "fi" 140 145 echo "" 141 146 echo "%files"
+2
scripts/tags.sh
··· 163 163 '/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1_rcuidle/' 164 164 '/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1/' 165 165 '/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1_rcuidle/' 166 + '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/' 167 + '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/' 166 168 '/^PAGEFLAG(\([[:alnum:]_]*\).*/Page\1/' 167 169 '/^PAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/' 168 170 '/^PAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/'