diff options
author | Steven Rostedt <rostedt@goodmis.org> | 2014-04-03 17:49:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-03 19:21:11 -0400 |
commit | b104d6a5a82a56dbba8f743144e21d63ad181773 (patch) | |
tree | d01d7aa185238f55fc223ea14ef612ccc8fd17c6 /lib | |
parent | 3d8e4b401cdf6fcfdd1a897f585c88afc2e386c7 (diff) |
lib/devres.c: fix some sparse warnings
Having a discussion about sparse warnings in the kernel, and that we
should clean them up, I decided to pick a random file to do so. This
happened to be devres.c which gives the following warnings:
CHECK lib/devres.c
lib/devres.c:83:9: warning: cast removes address space of expression
lib/devres.c:117:31: warning: incorrect type in return expression (different address spaces)
lib/devres.c:117:31: expected void [noderef] <asn:2>*
lib/devres.c:117:31: got void *
lib/devres.c:125:31: warning: incorrect type in return expression (different address spaces)
lib/devres.c:125:31: expected void [noderef] <asn:2>*
lib/devres.c:125:31: got void *
lib/devres.c:136:26: warning: incorrect type in assignment (different address spaces)
lib/devres.c:136:26: expected void [noderef] <asn:2>*[assigned] dest_ptr
lib/devres.c:136:26: got void *
lib/devres.c:226:9: warning: cast removes address space of expression
Mostly it's just the use of typecasting to void * without adding
__force, or returning ERR_PTR(-ESOMEERR) without typecasting to a
__iomem type.
I added a helper macro IOMEM_ERR_PTR() that does the typecast to make
the code a little nicer than adding ugly typecasts to the code.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Cc: Tejun Heo <tj@kernel.org>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/devres.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/devres.c b/lib/devres.c index 823533138fa0..48cb3c7bd7de 100644 --- a/lib/devres.c +++ b/lib/devres.c | |||
@@ -81,11 +81,13 @@ EXPORT_SYMBOL(devm_ioremap_nocache); | |||
81 | void devm_iounmap(struct device *dev, void __iomem *addr) | 81 | void devm_iounmap(struct device *dev, void __iomem *addr) |
82 | { | 82 | { |
83 | WARN_ON(devres_destroy(dev, devm_ioremap_release, devm_ioremap_match, | 83 | WARN_ON(devres_destroy(dev, devm_ioremap_release, devm_ioremap_match, |
84 | (void *)addr)); | 84 | (__force void *)addr)); |
85 | iounmap(addr); | 85 | iounmap(addr); |
86 | } | 86 | } |
87 | EXPORT_SYMBOL(devm_iounmap); | 87 | EXPORT_SYMBOL(devm_iounmap); |
88 | 88 | ||
89 | #define IOMEM_ERR_PTR(err) (__force void __iomem *)ERR_PTR(err) | ||
90 | |||
89 | /** | 91 | /** |
90 | * devm_ioremap_resource() - check, request region, and ioremap resource | 92 | * devm_ioremap_resource() - check, request region, and ioremap resource |
91 | * @dev: generic device to handle the resource for | 93 | * @dev: generic device to handle the resource for |
@@ -114,7 +116,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) | |||
114 | 116 | ||
115 | if (!res || resource_type(res) != IORESOURCE_MEM) { | 117 | if (!res || resource_type(res) != IORESOURCE_MEM) { |
116 | dev_err(dev, "invalid resource\n"); | 118 | dev_err(dev, "invalid resource\n"); |
117 | return ERR_PTR(-EINVAL); | 119 | return IOMEM_ERR_PTR(-EINVAL); |
118 | } | 120 | } |
119 | 121 | ||
120 | size = resource_size(res); | 122 | size = resource_size(res); |
@@ -122,7 +124,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) | |||
122 | 124 | ||
123 | if (!devm_request_mem_region(dev, res->start, size, name)) { | 125 | if (!devm_request_mem_region(dev, res->start, size, name)) { |
124 | dev_err(dev, "can't request region for resource %pR\n", res); | 126 | dev_err(dev, "can't request region for resource %pR\n", res); |
125 | return ERR_PTR(-EBUSY); | 127 | return IOMEM_ERR_PTR(-EBUSY); |
126 | } | 128 | } |
127 | 129 | ||
128 | if (res->flags & IORESOURCE_CACHEABLE) | 130 | if (res->flags & IORESOURCE_CACHEABLE) |
@@ -133,7 +135,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) | |||
133 | if (!dest_ptr) { | 135 | if (!dest_ptr) { |
134 | dev_err(dev, "ioremap failed for resource %pR\n", res); | 136 | dev_err(dev, "ioremap failed for resource %pR\n", res); |
135 | devm_release_mem_region(dev, res->start, size); | 137 | devm_release_mem_region(dev, res->start, size); |
136 | dest_ptr = ERR_PTR(-ENOMEM); | 138 | dest_ptr = IOMEM_ERR_PTR(-ENOMEM); |
137 | } | 139 | } |
138 | 140 | ||
139 | return dest_ptr; | 141 | return dest_ptr; |
@@ -224,7 +226,7 @@ void devm_ioport_unmap(struct device *dev, void __iomem *addr) | |||
224 | { | 226 | { |
225 | ioport_unmap(addr); | 227 | ioport_unmap(addr); |
226 | WARN_ON(devres_destroy(dev, devm_ioport_map_release, | 228 | WARN_ON(devres_destroy(dev, devm_ioport_map_release, |
227 | devm_ioport_map_match, (void *)addr)); | 229 | devm_ioport_map_match, (__force void *)addr)); |
228 | } | 230 | } |
229 | EXPORT_SYMBOL(devm_ioport_unmap); | 231 | EXPORT_SYMBOL(devm_ioport_unmap); |
230 | #endif /* CONFIG_HAS_IOPORT */ | 232 | #endif /* CONFIG_HAS_IOPORT */ |