Skip to content

Commit

Permalink
Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/…
Browse files Browse the repository at this point in the history
…mmarek/kbuild

Pull misc kbuild updates from Michal Marek:
 "This is the non-critical part of kbuild:

   - several coccinelle updates
   - make deb-pkg creates an armhf package if CONFIG_VFP=y
   - make tags understands some more powerpc macros"

* 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
  coccinelle: Improve checking for missing NULL terminators
  coccinelle: ifnullfree: handle various destroy functions
  coccinelle: ifnullfree: various cleanups
  cocinelle: iterators: semantic patch to delete unneeded of_node_put
  deb-pkg: Add automatic support for armhf architecture
  scripts/coccinelle: fix typos
  coccinelle: misc: remove "complex return code" warnings
  Coccinelle: fix incorrect -include option transformation
  coccinelle: tests: improve odd_ptr_err.cocci
  coccinelle: misc: move constants to the right
  scripts/tags.sh: Teach tags about some powerpc macros
  • Loading branch information
torvalds committed Nov 11, 2015
2 parents 152813e + 67afc21 commit 5dfe5b2
Show file tree
Hide file tree
Showing 10 changed files with 415 additions and 234 deletions.
2 changes: 1 addition & 1 deletion scripts/coccicheck
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ FLAGS="$SPFLAGS --very-quiet"
# spatch only allows include directories with the syntax "-I include"
# while gcc also allows "-Iinclude" and "-include include"
COCCIINCLUDE=${LINUXINCLUDE//-I/-I }
COCCIINCLUDE=${COCCIINCLUDE//-include/-I}
COCCIINCLUDE=${COCCIINCLUDE// -include/ --include}

if [ "$C" = "1" -o "$C" = "2" ]; then
ONLINE=1
Expand Down
26 changes: 15 additions & 11 deletions scripts/coccinelle/free/ifnullfree.cocci
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,32 @@ virtual context
@r2 depends on patch@
expression E;
@@
- if (E)
- if (E != NULL)
(
- kfree(E);
+ kfree(E);
kfree(E);
|
- debugfs_remove(E);
+ debugfs_remove(E);
debugfs_remove(E);
|
- debugfs_remove_recursive(E);
+ debugfs_remove_recursive(E);
debugfs_remove_recursive(E);
|
- usb_free_urb(E);
+ usb_free_urb(E);
usb_free_urb(E);
|
kmem_cache_destroy(E);
|
mempool_destroy(E);
|
dma_pool_destroy(E);
)

@r depends on context || report || org @
expression E;
position p;
@@

* if (E)
* \(kfree@p\|debugfs_remove@p\|debugfs_remove_recursive@p\|usb_free_urb\)(E);
* if (E != NULL)
* \(kfree@p\|debugfs_remove@p\|debugfs_remove_recursive@p\|
* usb_free_urb@p\|kmem_cache_destroy@p\|mempool_destroy@p\|
* dma_pool_destroy@p\)(E);

@script:python depends on org@
p << r.p;
Expand Down
100 changes: 100 additions & 0 deletions scripts/coccinelle/iterators/device_node_continue.cocci
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/// Device node iterators put the previous value of the index variable, so an
/// explicit put causes a double put.
///
// Confidence: High
// Copyright: (C) 2015 Julia Lawall, Inria. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Options: --no-includes --include-headers
// Keywords: for_each_child_of_node, etc.

virtual patch
virtual context
virtual org
virtual report

@r exists@
expression e1,e2;
local idexpression n;
iterator name for_each_node_by_name, for_each_node_by_type,
for_each_compatible_node, for_each_matching_node,
for_each_matching_node_and_match, for_each_child_of_node,
for_each_available_child_of_node, for_each_node_with_property;
iterator i;
position p1,p2;
statement S;
@@

(
(
for_each_node_by_name(n,e1) S
|
for_each_node_by_type(n,e1) S
|
for_each_compatible_node(n,e1,e2) S
|
for_each_matching_node(n,e1) S
|
for_each_matching_node_and_match(n,e1,e2) S
|
for_each_child_of_node(e1,n) S
|
for_each_available_child_of_node(e1,n) S
|
for_each_node_with_property(n,e1) S
)
&
i@p1(...) {
... when != of_node_get(n)
when any
of_node_put@p2(n);
... when any
}
)

@s exists@
local idexpression r.n;
statement S;
position r.p1,r.p2;
iterator i;
@@

of_node_put@p2(n);
... when any
i@p1(..., n, ...)
S

@t depends on s && patch && !context && !org && !report@
local idexpression n;
position r.p2;
@@

- of_node_put@p2(n);

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

@t_context depends on s && !patch && (context || org || report)@
local idexpression n;
position r.p2;
position j0;
@@

* of_node_put@j0@p2(n);

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

@script:python t_org depends on org@
j0 << t_context.j0;
@@
msg = "ERROR: probable double put."
coccilib.org.print_todo(j0[0], msg)
// ----------------------------------------------------------------------------
@script:python t_report depends on report@
j0 << t_context.j0;
@@
msg = "ERROR: probable double put."
coccilib.report.print_report(j0[0], msg)
171 changes: 171 additions & 0 deletions scripts/coccinelle/misc/compare_const_fl.cocci
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
/// Move constants to the right of binary operators.
//# Depends on personal taste in some cases.
///
// Confidence: Moderate
// Copyright: (C) 2015 Copyright: (C) 2015 Julia Lawall, Inria. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Options: --no-includes --include-headers

virtual patch
virtual context
virtual org
virtual report

@r1 depends on patch && !context && !org && !report
disable bitor_comm, neg_if_exp@
constant c,c1;
local idexpression i;
expression e,e1,e2;
binary operator b = {==,!=,&,|};
type t;
@@
(
c b (c1)
|
sizeof(t) b e1
|
sizeof e b e1
|
i b e1
|
c | e1 | e2 | ...
|
c | (e ? e1 : e2)
|
- c
+ e
b
- e
+ c
)
@r2 depends on patch && !context && !org && !report
disable gtr_lss, gtr_lss_eq, not_int2@
constant c,c1;
expression e,e1,e2;
binary operator b;
binary operator b1 = {<,<=},b2 = {<,<=};
binary operator b3 = {>,>=},b4 = {>,>=};
local idexpression i;
type t;
@@

(
c b c1
|
sizeof(t) b e1
|
sizeof e b e1
|
(e1 b1 e) && (e b2 e2)
|
(e1 b3 e) && (e b4 e2)
|
i b e
|
- c < e
+ e > c
|
- c <= e
+ e >= c
|
- c > e
+ e < c
|
- c >= e
+ e <= c
)

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

@r1_context depends on !patch && (context || org || report)
disable bitor_comm, neg_if_exp exists@
type t;
binary operator b = {==,!=,&,|};
constant c, c1;
expression e, e1, e2;
local idexpression i;
position j0;
@@
(
c b (c1)
|
sizeof(t) b e1
|
sizeof e b e1
|
i b e1
|
c | e1 | e2 | ...
|
c | (e ? e1 : e2)
|
* c@j0 b e
)
@r2_context depends on !patch && (context || org || report)
disable gtr_lss, gtr_lss_eq, not_int2 exists@
type t;
binary operator b, b1 = {<,<=}, b2 = {<,<=}, b3 = {>,>=}, b4 = {>,>=};
constant c, c1;
expression e, e1, e2;
local idexpression i;
position j0;
@@

(
c b c1
|
sizeof(t) b e1
|
sizeof e b e1
|
(e1 b1 e) && (e b2 e2)
|
(e1 b3 e) && (e b4 e2)
|
i b e
|
* c@j0 < e
|
* c@j0 <= e
|
* c@j0 > e
|
* c@j0 >= e
)

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

@script:python r1_org depends on org@
j0 << r1_context.j0;
@@
msg = "Move constant to right."
coccilib.org.print_todo(j0[0], msg)
@script:python r2_org depends on org@
j0 << r2_context.j0;
@@
msg = "Move constant to right."
coccilib.org.print_todo(j0[0], msg)
// ----------------------------------------------------------------------------
@script:python r1_report depends on report@
j0 << r1_context.j0;
@@
msg = "Move constant to right."
coccilib.report.print_report(j0[0], msg)
@script:python r2_report depends on report@
j0 << r2_context.j0;
@@
msg = "Move constant to right."
coccilib.report.print_report(j0[0], msg)
33 changes: 28 additions & 5 deletions scripts/coccinelle/misc/of_table.cocci
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/// Make sure of_device_id tables are NULL terminated
/// Make sure (of/i2c/platform)_device_id tables are NULL terminated
//
// Keywords: of_table
// Keywords: of_table i2c_table platform_table
// Confidence: Medium
// Options: --include-headers

Expand All @@ -13,38 +13,61 @@ virtual report
identifier var, arr;
expression E;
@@
struct of_device_id arr[] = {
(
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
...,
{
.var = E,
* }
};
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
...,
* { ..., E, ... },
};
)

@depends on patch@
identifier var, arr;
expression E;
@@
struct of_device_id arr[] = {
(
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
...,
{
.var = E,
- }
+ },
+ { }
};
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
...,
{ ..., E, ... },
+ { },
};
)

@r depends on org || report@
position p1;
identifier var, arr;
expression E;
@@
struct of_device_id arr[] = {
(
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
...,
{
.var = E,
}
@p1
};
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
...,
{ ..., E, ... }
@p1
};
)

@script:python depends on org@
p1 << r.p1;
Expand Down
Loading

0 comments on commit 5dfe5b2

Please sign in to comment.