diff options
author | omar ramirez <omar.ramirez@ti.com> | 2011-04-18 12:39:41 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2011-05-03 05:38:01 -0400 |
commit | 7529b703869d59e799a0c0eb4f3df7a418f7dc99 (patch) | |
tree | e3a75491d78a829a12e416d8bff90bb47c804575 | |
parent | 11383a9bcc213cd2b55e2aef863ef2a8b3d7b62c (diff) |
OMAP3/4: l3: fix omap3_l3_probe error path
l3_smx:
- Add missing free_irq and remove an empty goto label.
l3_noc:
- If kzalloc fails driver shouldn't continue with a NULL pointer.
- Add missing free_irq and remove empty goto labels.
- Safe to assume that if we reached the end point of execution
without errors, then return value is 0, so replacing instead
another goto.
Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
-rw-r--r-- | arch/arm/mach-omap2/omap_l3_noc.c | 34 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_l3_smx.c | 23 |
2 files changed, 26 insertions, 31 deletions
diff --git a/arch/arm/mach-omap2/omap_l3_noc.c b/arch/arm/mach-omap2/omap_l3_noc.c index 82632c24076f..def3de8b9a65 100644 --- a/arch/arm/mach-omap2/omap_l3_noc.c +++ b/arch/arm/mach-omap2/omap_l3_noc.c | |||
@@ -132,49 +132,49 @@ static int __init omap4_l3_probe(struct platform_device *pdev) | |||
132 | 132 | ||
133 | l3 = kzalloc(sizeof(*l3), GFP_KERNEL); | 133 | l3 = kzalloc(sizeof(*l3), GFP_KERNEL); |
134 | if (!l3) | 134 | if (!l3) |
135 | ret = -ENOMEM; | 135 | return -ENOMEM; |
136 | 136 | ||
137 | platform_set_drvdata(pdev, l3); | 137 | platform_set_drvdata(pdev, l3); |
138 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 138 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
139 | if (!res) { | 139 | if (!res) { |
140 | dev_err(&pdev->dev, "couldn't find resource 0\n"); | 140 | dev_err(&pdev->dev, "couldn't find resource 0\n"); |
141 | ret = -ENODEV; | 141 | ret = -ENODEV; |
142 | goto err1; | 142 | goto err0; |
143 | } | 143 | } |
144 | 144 | ||
145 | l3->l3_base[0] = ioremap(res->start, resource_size(res)); | 145 | l3->l3_base[0] = ioremap(res->start, resource_size(res)); |
146 | if (!(l3->l3_base[0])) { | 146 | if (!(l3->l3_base[0])) { |
147 | dev_err(&pdev->dev, "ioremap failed\n"); | 147 | dev_err(&pdev->dev, "ioremap failed\n"); |
148 | ret = -ENOMEM; | 148 | ret = -ENOMEM; |
149 | goto err2; | 149 | goto err0; |
150 | } | 150 | } |
151 | 151 | ||
152 | res = platform_get_resource(pdev, IORESOURCE_MEM, 1); | 152 | res = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
153 | if (!res) { | 153 | if (!res) { |
154 | dev_err(&pdev->dev, "couldn't find resource 1\n"); | 154 | dev_err(&pdev->dev, "couldn't find resource 1\n"); |
155 | ret = -ENODEV; | 155 | ret = -ENODEV; |
156 | goto err3; | 156 | goto err1; |
157 | } | 157 | } |
158 | 158 | ||
159 | l3->l3_base[1] = ioremap(res->start, resource_size(res)); | 159 | l3->l3_base[1] = ioremap(res->start, resource_size(res)); |
160 | if (!(l3->l3_base[1])) { | 160 | if (!(l3->l3_base[1])) { |
161 | dev_err(&pdev->dev, "ioremap failed\n"); | 161 | dev_err(&pdev->dev, "ioremap failed\n"); |
162 | ret = -ENOMEM; | 162 | ret = -ENOMEM; |
163 | goto err4; | 163 | goto err1; |
164 | } | 164 | } |
165 | 165 | ||
166 | res = platform_get_resource(pdev, IORESOURCE_MEM, 2); | 166 | res = platform_get_resource(pdev, IORESOURCE_MEM, 2); |
167 | if (!res) { | 167 | if (!res) { |
168 | dev_err(&pdev->dev, "couldn't find resource 2\n"); | 168 | dev_err(&pdev->dev, "couldn't find resource 2\n"); |
169 | ret = -ENODEV; | 169 | ret = -ENODEV; |
170 | goto err5; | 170 | goto err2; |
171 | } | 171 | } |
172 | 172 | ||
173 | l3->l3_base[2] = ioremap(res->start, resource_size(res)); | 173 | l3->l3_base[2] = ioremap(res->start, resource_size(res)); |
174 | if (!(l3->l3_base[2])) { | 174 | if (!(l3->l3_base[2])) { |
175 | dev_err(&pdev->dev, "ioremap failed\n"); | 175 | dev_err(&pdev->dev, "ioremap failed\n"); |
176 | ret = -ENOMEM; | 176 | ret = -ENOMEM; |
177 | goto err6; | 177 | goto err2; |
178 | } | 178 | } |
179 | 179 | ||
180 | /* | 180 | /* |
@@ -187,7 +187,7 @@ static int __init omap4_l3_probe(struct platform_device *pdev) | |||
187 | if (ret) { | 187 | if (ret) { |
188 | pr_crit("L3: request_irq failed to register for 0x%x\n", | 188 | pr_crit("L3: request_irq failed to register for 0x%x\n", |
189 | OMAP44XX_IRQ_L3_DBG); | 189 | OMAP44XX_IRQ_L3_DBG); |
190 | goto err7; | 190 | goto err3; |
191 | } | 191 | } |
192 | l3->debug_irq = irq; | 192 | l3->debug_irq = irq; |
193 | 193 | ||
@@ -198,24 +198,22 @@ static int __init omap4_l3_probe(struct platform_device *pdev) | |||
198 | if (ret) { | 198 | if (ret) { |
199 | pr_crit("L3: request_irq failed to register for 0x%x\n", | 199 | pr_crit("L3: request_irq failed to register for 0x%x\n", |
200 | OMAP44XX_IRQ_L3_APP); | 200 | OMAP44XX_IRQ_L3_APP); |
201 | goto err8; | 201 | goto err4; |
202 | } | 202 | } |
203 | l3->app_irq = irq; | 203 | l3->app_irq = irq; |
204 | 204 | ||
205 | goto err0; | 205 | return 0; |
206 | err8: | 206 | |
207 | err7: | ||
208 | iounmap(l3->l3_base[2]); | ||
209 | err6: | ||
210 | err5: | ||
211 | iounmap(l3->l3_base[1]); | ||
212 | err4: | 207 | err4: |
208 | free_irq(l3->debug_irq, l3); | ||
213 | err3: | 209 | err3: |
214 | iounmap(l3->l3_base[0]); | 210 | iounmap(l3->l3_base[2]); |
215 | err2: | 211 | err2: |
212 | iounmap(l3->l3_base[1]); | ||
216 | err1: | 213 | err1: |
217 | kfree(l3); | 214 | iounmap(l3->l3_base[0]); |
218 | err0: | 215 | err0: |
216 | kfree(l3); | ||
219 | return ret; | 217 | return ret; |
220 | } | 218 | } |
221 | 219 | ||
diff --git a/arch/arm/mach-omap2/omap_l3_smx.c b/arch/arm/mach-omap2/omap_l3_smx.c index 5f2da7565b68..45aaa5cb97f3 100644 --- a/arch/arm/mach-omap2/omap_l3_smx.c +++ b/arch/arm/mach-omap2/omap_l3_smx.c | |||
@@ -228,10 +228,8 @@ static int __init omap3_l3_probe(struct platform_device *pdev) | |||
228 | int ret; | 228 | int ret; |
229 | 229 | ||
230 | l3 = kzalloc(sizeof(*l3), GFP_KERNEL); | 230 | l3 = kzalloc(sizeof(*l3), GFP_KERNEL); |
231 | if (!l3) { | 231 | if (!l3) |
232 | ret = -ENOMEM; | 232 | return -ENOMEM; |
233 | goto err0; | ||
234 | } | ||
235 | 233 | ||
236 | platform_set_drvdata(pdev, l3); | 234 | platform_set_drvdata(pdev, l3); |
237 | 235 | ||
@@ -239,13 +237,13 @@ static int __init omap3_l3_probe(struct platform_device *pdev) | |||
239 | if (!res) { | 237 | if (!res) { |
240 | dev_err(&pdev->dev, "couldn't find resource\n"); | 238 | dev_err(&pdev->dev, "couldn't find resource\n"); |
241 | ret = -ENODEV; | 239 | ret = -ENODEV; |
242 | goto err1; | 240 | goto err0; |
243 | } | 241 | } |
244 | l3->rt = ioremap(res->start, resource_size(res)); | 242 | l3->rt = ioremap(res->start, resource_size(res)); |
245 | if (!(l3->rt)) { | 243 | if (!(l3->rt)) { |
246 | dev_err(&pdev->dev, "ioremap failed\n"); | 244 | dev_err(&pdev->dev, "ioremap failed\n"); |
247 | ret = -ENOMEM; | 245 | ret = -ENOMEM; |
248 | goto err2; | 246 | goto err0; |
249 | } | 247 | } |
250 | 248 | ||
251 | l3->debug_irq = platform_get_irq(pdev, 0); | 249 | l3->debug_irq = platform_get_irq(pdev, 0); |
@@ -254,7 +252,7 @@ static int __init omap3_l3_probe(struct platform_device *pdev) | |||
254 | "l3-debug-irq", l3); | 252 | "l3-debug-irq", l3); |
255 | if (ret) { | 253 | if (ret) { |
256 | dev_err(&pdev->dev, "couldn't request debug irq\n"); | 254 | dev_err(&pdev->dev, "couldn't request debug irq\n"); |
257 | goto err3; | 255 | goto err1; |
258 | } | 256 | } |
259 | 257 | ||
260 | l3->app_irq = platform_get_irq(pdev, 1); | 258 | l3->app_irq = platform_get_irq(pdev, 1); |
@@ -264,18 +262,17 @@ static int __init omap3_l3_probe(struct platform_device *pdev) | |||
264 | 262 | ||
265 | if (ret) { | 263 | if (ret) { |
266 | dev_err(&pdev->dev, "couldn't request app irq\n"); | 264 | dev_err(&pdev->dev, "couldn't request app irq\n"); |
267 | goto err4; | 265 | goto err2; |
268 | } | 266 | } |
269 | 267 | ||
270 | goto err0; | 268 | return 0; |
271 | 269 | ||
272 | err4: | ||
273 | err3: | ||
274 | iounmap(l3->rt); | ||
275 | err2: | 270 | err2: |
271 | free_irq(l3->debug_irq, l3); | ||
276 | err1: | 272 | err1: |
277 | kfree(l3); | 273 | iounmap(l3->rt); |
278 | err0: | 274 | err0: |
275 | kfree(l3); | ||
279 | return ret; | 276 | return ret; |
280 | } | 277 | } |
281 | 278 | ||