forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lib: devres: Introduce devm_ioremap_resource()
The devm_request_and_ioremap() function is very useful and helps avoid a whole lot of boilerplate. However, one issue that keeps popping up is its lack of a specific error code to determine which of the steps that it performs failed. Furthermore, while the function gives an example and suggests what error code to return on failure, a wide variety of error codes are used throughout the tree. In an attempt to fix these problems, this patch adds a new function that drivers can transition to. The devm_ioremap_resource() returns a pointer to the remapped I/O memory on success or an ERR_PTR() encoded error code on failure. Callers can check for failure using IS_ERR() and determine its cause by extracting the error code using PTR_ERR(). devm_request_and_ioremap() is implemented as a wrapper around the new API and return NULL on failure as before. This ensures that backwards compatibility is maintained until all users have been converted to the new API, at which point the old devm_request_and_ioremap() function should be removed. A semantic patch is included which can be used to convert from the old devm_request_and_ioremap() API to the new devm_ioremap_resource() API. Some non-trivial cases may require manual intervention, though. Signed-off-by: Thierry Reding <[email protected]> Cc: Arnd Bergmann <[email protected]> Acked-by: Dmitry Torokhov <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
- Loading branch information
Showing
4 changed files
with
137 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
virtual patch | ||
virtual report | ||
|
||
@depends on patch@ | ||
expression base, dev, res; | ||
@@ | ||
|
||
-base = devm_request_and_ioremap(dev, res); | ||
+base = devm_ioremap_resource(dev, res); | ||
... | ||
if ( | ||
-base == NULL | ||
+IS_ERR(base) | ||
|| ...) { | ||
<... | ||
- return ...; | ||
+ return PTR_ERR(base); | ||
...> | ||
} | ||
|
||
@depends on patch@ | ||
expression e, E, ret; | ||
identifier l; | ||
@@ | ||
|
||
e = devm_ioremap_resource(...); | ||
... | ||
if (IS_ERR(e) || ...) { | ||
... when any | ||
- ret = E; | ||
+ ret = PTR_ERR(e); | ||
... | ||
( | ||
return ret; | ||
| | ||
goto l; | ||
) | ||
} | ||
|
||
@depends on patch@ | ||
expression e; | ||
@@ | ||
|
||
e = devm_ioremap_resource(...); | ||
... | ||
if (IS_ERR(e) || ...) { | ||
... | ||
- \(dev_dbg\|dev_err\|pr_debug\|pr_err\|DRM_ERROR\)(...); | ||
... | ||
} | ||
|
||
@depends on patch@ | ||
expression e; | ||
identifier l; | ||
@@ | ||
|
||
e = devm_ioremap_resource(...); | ||
... | ||
if (IS_ERR(e) || ...) | ||
-{ | ||
( | ||
return ...; | ||
| | ||
goto l; | ||
) | ||
-} | ||
|
||
@r depends on report@ | ||
expression e; | ||
identifier l; | ||
position p1; | ||
@@ | ||
|
||
*e = devm_request_and_ioremap@p1(...); | ||
... | ||
if (e == NULL || ...) { | ||
... | ||
( | ||
return ...; | ||
| | ||
goto l; | ||
) | ||
} | ||
|
||
@script:python depends on r@ | ||
p1 << r.p1; | ||
@@ | ||
msg = "ERROR: deprecated devm_request_and_ioremap() API used on line %s" % (p1[0].line) | ||
coccilib.report.print_report(p1[0], msg) |