Linux Audio

Check our new training course

Embedded Linux training

Mar 10-20, 2025, special US time zones
Register
Loading...
Note: File does not exist in v6.8.
  1/// Reimplement a call to devm_request_mem_region followed by a call to ioremap
  2/// or ioremap_nocache by a call to devm_request_and_ioremap.
  3/// Devm_request_and_ioremap was introduced in
  4/// 72f8c0bfa0de64c68ee59f40eb9b2683bffffbb0.  It makes the code much more
  5/// concise.
  6///
  7///
  8// Confidence: High
  9// Copyright: (C) 2011 Julia Lawall, INRIA/LIP6.  GPLv2.
 10// Copyright: (C) 2011 Gilles Muller, INRIA/LiP6.  GPLv2.
 11// URL: http://coccinelle.lip6.fr/
 12// Comments:
 13// Options: -no_includes -include_headers
 14
 15virtual patch
 16virtual org
 17virtual report
 18virtual context
 19
 20@nm@
 21expression myname;
 22identifier i;
 23@@
 24
 25struct platform_driver i = { .driver = { .name = myname } };
 26
 27@depends on patch@
 28expression dev,res,size;
 29@@
 30
 31-if (!devm_request_mem_region(dev, res->start, size,
 32-                              \(res->name\|dev_name(dev)\))) {
 33-   ...
 34-   return ...;
 35-}
 36... when != res->start
 37(
 38-devm_ioremap(dev,res->start,size)
 39+devm_request_and_ioremap(dev,res)
 40|
 41-devm_ioremap_nocache(dev,res->start,size)
 42+devm_request_and_ioremap(dev,res)
 43)
 44... when any
 45    when != res->start
 46
 47// this rule is separate from the previous one, because a single file can
 48// have multiple values of myname
 49@depends on patch@
 50expression dev,res,size;
 51expression nm.myname;
 52@@
 53
 54-if (!devm_request_mem_region(dev, res->start, size,myname)) {
 55-   ...
 56-   return ...;
 57-}
 58... when != res->start
 59(
 60-devm_ioremap(dev,res->start,size)
 61+devm_request_and_ioremap(dev,res)
 62|
 63-devm_ioremap_nocache(dev,res->start,size)
 64+devm_request_and_ioremap(dev,res)
 65)
 66... when any
 67    when != res->start
 68
 69
 70@pb depends on org || report || context@
 71expression dev,res,size;
 72expression nm.myname;
 73position p1,p2;
 74@@
 75
 76*if
 77  (!devm_request_mem_region@p1(dev, res->start, size,
 78                              \(res->name\|dev_name(dev)\|myname\))) {
 79   ...
 80   return ...;
 81}
 82... when != res->start
 83(
 84*devm_ioremap@p2(dev,res->start,size)
 85|
 86*devm_ioremap_nocache@p2(dev,res->start,size)
 87)
 88... when any
 89    when != res->start
 90
 91@script:python depends on org@
 92p1 << pb.p1;
 93p2 << pb.p2;
 94@@
 95
 96cocci.print_main("INFO: replace by devm_request_and_ioremap",p1)
 97cocci.print_secs("",p2)
 98
 99@script:python depends on report@
100p1 << pb.p1;
101p2 << pb.p2;
102@@
103
104msg = "INFO: devm_request_mem_region followed by ioremap on line %s can be replaced by devm_request_and_ioremap" % (p2[0].line)
105coccilib.report.print_report(p1[0],msg)