Skip to content

Commit

Permalink
hwmon: (xgene) Fix up error handling path mixup in 'xgene_hwmon_probe()'
Browse files Browse the repository at this point in the history
Commit 2ca492e has moved the call to 'kfifo_alloc()' from after the
main 'if' statement to before it.
But it has not updated the error handling paths accordingly.

Fix all that:
   - if 'kfifo_alloc()' fails we can return directly
   - direct returns after 'kfifo_alloc()' must now go to 'out_mbox_free'
   - 'goto out_mbox_free' must be replaced by 'goto out', otherwise the
     '[pcc_]mbox_free_channel()' call will be missed.

Fixes: 2ca492e ("hwmon: (xgene) Fix crash when alarm occurs before driver probe")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
  • Loading branch information
Christophe Jaillet authored and Guenter Roeck committed Oct 1, 2017
1 parent 2bd6bf0 commit 74007ae
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions drivers/hwmon/xgene-hwmon.c
Original file line number Diff line number Diff line change
@@ -630,7 +630,7 @@ static int xgene_hwmon_probe(struct platform_device *pdev)
sizeof(struct slimpro_resp_msg) * ASYNC_MSG_FIFO_SIZE,
GFP_KERNEL);
if (rc)
goto out_mbox_free;
return -ENOMEM;

INIT_WORK(&ctx->workq, xgene_hwmon_evt_work);

@@ -646,23 +646,26 @@ static int xgene_hwmon_probe(struct platform_device *pdev)
if (IS_ERR(ctx->mbox_chan)) {
dev_err(&pdev->dev,
"SLIMpro mailbox channel request failed\n");
return -ENODEV;
rc = -ENODEV;
goto out_mbox_free;
}
} else {
struct acpi_pcct_hw_reduced *cppc_ss;

if (device_property_read_u32(&pdev->dev, "pcc-channel",
&ctx->mbox_idx)) {
dev_err(&pdev->dev, "no pcc-channel property\n");
return -ENODEV;
rc = -ENODEV;
goto out_mbox_free;
}

cl->rx_callback = xgene_hwmon_pcc_rx_cb;
ctx->mbox_chan = pcc_mbox_request_channel(cl, ctx->mbox_idx);
if (IS_ERR(ctx->mbox_chan)) {
dev_err(&pdev->dev,
"PPC channel request failed\n");
return -ENODEV;
rc = -ENODEV;
goto out_mbox_free;
}

/*
@@ -675,13 +678,13 @@ static int xgene_hwmon_probe(struct platform_device *pdev)
if (!cppc_ss) {
dev_err(&pdev->dev, "PPC subspace not found\n");
rc = -ENODEV;
goto out_mbox_free;
goto out;
}

if (!ctx->mbox_chan->mbox->txdone_irq) {
dev_err(&pdev->dev, "PCC IRQ not supported\n");
rc = -ENODEV;
goto out_mbox_free;
goto out;
}

/*
@@ -696,14 +699,14 @@ static int xgene_hwmon_probe(struct platform_device *pdev)
} else {
dev_err(&pdev->dev, "Failed to get PCC comm region\n");
rc = -ENODEV;
goto out_mbox_free;
goto out;
}

if (!ctx->pcc_comm_addr) {
dev_err(&pdev->dev,
"Failed to ioremap PCC comm region\n");
rc = -ENOMEM;
goto out_mbox_free;
goto out;
}

/*

0 comments on commit 74007ae

Please sign in to comment.