Skip to content

Commit 12b38ea

Browse files
tititiou36gregkh
authored andcommitted
staging: spmi: hisi-spmi-controller: Fix some error handling paths
IN the probe function, if an error occurs after calling 'spmi_controller_alloc()', it must be undone by a corresponding 'spmi_controller_put() call. In the remove function, use 'spmi_controller_put(ctrl)' instead of 'kfree(ctrl)'. While a it fix an error message (s/spmi_add_controller/spmi_controller_add/) Signed-off-by: Christophe JAILLET <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 5c8fe58 commit 12b38ea

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

drivers/staging/hikey9xx/hisi-spmi-controller.c

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -278,21 +278,24 @@ static int spmi_controller_probe(struct platform_device *pdev)
278278
iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
279279
if (!iores) {
280280
dev_err(&pdev->dev, "can not get resource!\n");
281-
return -EINVAL;
281+
ret = -EINVAL;
282+
goto err_put_controller;
282283
}
283284

284285
spmi_controller->base = devm_ioremap(&pdev->dev, iores->start,
285286
resource_size(iores));
286287
if (!spmi_controller->base) {
287288
dev_err(&pdev->dev, "can not remap base addr!\n");
288-
return -EADDRNOTAVAIL;
289+
ret = -EADDRNOTAVAIL;
290+
goto err_put_controller;
289291
}
290292

291293
ret = of_property_read_u32(pdev->dev.of_node, "spmi-channel",
292294
&spmi_controller->channel);
293295
if (ret) {
294296
dev_err(&pdev->dev, "can not get channel\n");
295-
return -ENODEV;
297+
ret = -ENODEV;
298+
goto err_put_controller;
296299
}
297300

298301
platform_set_drvdata(pdev, spmi_controller);
@@ -309,9 +312,15 @@ static int spmi_controller_probe(struct platform_device *pdev)
309312
ctrl->write_cmd = spmi_write_cmd;
310313

311314
ret = spmi_controller_add(ctrl);
312-
if (ret)
313-
dev_err(&pdev->dev, "spmi_add_controller failed with error %d!\n", ret);
315+
if (ret) {
316+
dev_err(&pdev->dev, "spmi_controller_add failed with error %d!\n", ret);
317+
goto err_put_controller;
318+
}
319+
320+
return 0;
314321

322+
err_put_controller:
323+
spmi_controller_put(ctrl);
315324
return ret;
316325
}
317326

@@ -320,7 +329,7 @@ static int spmi_del_controller(struct platform_device *pdev)
320329
struct spmi_controller *ctrl = platform_get_drvdata(pdev);
321330

322331
spmi_controller_remove(ctrl);
323-
kfree(ctrl);
332+
spmi_controller_put(ctrl);
324333
return 0;
325334
}
326335

0 commit comments

Comments
 (0)