From: Luis R. Rodriguez Date: Wed, 10 Apr 2013 11:35:19 +0000 (-0700) Subject: compat: backport devm_ioremap_resource() X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=6198c7f8b50a0e5c519b72d388665f7d0f9ef407;p=openwrt%2Fstaging%2Fblogic.git compat: backport devm_ioremap_resource() The new API gives more information to driver users but the older kernels do not have any of these mechanisms in place so just throw out ERR_PTR(-ENOMEM) in case of failure. mcgrof@frijol ~/linux-stable (git::master)$ git describe --contains 75096579 v3.9-rc1~128^2~63 commit 75096579c3ac39ddc2f8b0d9a8924eba31f4d920 Author: Thierry Reding Date: Mon Jan 21 11:08:54 2013 +0100 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 Cc: Arnd Bergmann Acked-by: Dmitry Torokhov Signed-off-by: Greg Kroah-Hartman Signed-off-by: Luis R. Rodriguez Signed-off-by: Johannes Berg --- diff --git a/backport/compat/compat-3.9.c b/backport/compat/compat-3.9.c index 1f2484216f92..61a062a682db 100644 --- a/backport/compat/compat-3.9.c +++ b/backport/compat/compat-3.9.c @@ -10,6 +10,7 @@ #include #include +#include #ifdef __sg_page_iter_next @@ -51,4 +52,15 @@ bool __sg_page_iter_next(struct sg_page_iter *piter) } EXPORT_SYMBOL_GPL(__sg_page_iter_next); +void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) +{ + void __iomem *dest_ptr; + + dest_ptr = devm_ioremap_resource(dev, res); + if (!dest_ptr) + return ERR_PTR(-ENOMEM); + return dest_ptr; +} +EXPORT_SYMBOL_GPL(devm_ioremap_resource); + #endif /* __sg_page_iter_next */ diff --git a/backport/include/linux/compat-3.9.h b/backport/include/linux/compat-3.9.h index aed569c9ffe7..a4362e2b9f35 100644 --- a/backport/include/linux/compat-3.9.h +++ b/backport/include/linux/compat-3.9.h @@ -15,6 +15,7 @@ #include #include #include +#include /* include this before changing hlist_for_each_* to use the old versions. */ #include @@ -207,6 +208,9 @@ static inline struct inode *file_inode(struct file *f) return f->f_path.dentry->d_inode; } +#define devm_ioremap_resource LINUX_BACKPORT(devm_ioremap_resource) +void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); + #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)) */ #endif /* LINUX_3_9_COMPAT_H */