diff options
| author | Sudip Mukherjee <sudipm.mukherjee@gmail.com> | 2015-11-23 06:54:32 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-02-08 01:53:40 -0500 |
| commit | 5fb437984b6c4793626be3936297fecece987a9f (patch) | |
| tree | 4b62d02e635409ed584b6a3875cc6814801629fa /drivers/misc/mic | |
| parent | fbaa72d56424553f0aa434d8816a0da7a9071415 (diff) | |
misc: mic: use common error path
Instead of calling release_firmware() on every error and then jumping
lets have a common release_firmware() in the error path.
This patch also fixes a memory leak where we missed release_firmware()
if mic_x100_load_command_line() fails.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Reviewed-by: Sudeep Dutt <sudeep.dutt@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/mic')
| -rw-r--r-- | drivers/misc/mic/host/mic_x100.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/misc/mic/host/mic_x100.c b/drivers/misc/mic/host/mic_x100.c index 37fa89875e1e..82a973c85b5d 100644 --- a/drivers/misc/mic/host/mic_x100.c +++ b/drivers/misc/mic/host/mic_x100.c | |||
| @@ -463,8 +463,7 @@ mic_x100_load_firmware(struct mic_device *mdev, const char *buf) | |||
| 463 | rc = -EINVAL; | 463 | rc = -EINVAL; |
| 464 | dev_err(&mdev->pdev->dev, "%s %d rc %d bootaddr 0x%x\n", | 464 | dev_err(&mdev->pdev->dev, "%s %d rc %d bootaddr 0x%x\n", |
| 465 | __func__, __LINE__, rc, mdev->bootaddr); | 465 | __func__, __LINE__, rc, mdev->bootaddr); |
| 466 | release_firmware(fw); | 466 | goto error; |
| 467 | goto done; | ||
| 468 | } | 467 | } |
| 469 | memcpy_toio(mdev->aper.va + mdev->bootaddr, fw->data, fw->size); | 468 | memcpy_toio(mdev->aper.va + mdev->bootaddr, fw->data, fw->size); |
| 470 | mdev->ops->write_spad(mdev, MIC_X100_FW_SIZE, fw->size); | 469 | mdev->ops->write_spad(mdev, MIC_X100_FW_SIZE, fw->size); |
| @@ -472,22 +471,24 @@ mic_x100_load_firmware(struct mic_device *mdev, const char *buf) | |||
| 472 | rc = -EINVAL; | 471 | rc = -EINVAL; |
| 473 | dev_err(&mdev->pdev->dev, "%s %d rc %d\n", | 472 | dev_err(&mdev->pdev->dev, "%s %d rc %d\n", |
| 474 | __func__, __LINE__, rc); | 473 | __func__, __LINE__, rc); |
| 475 | release_firmware(fw); | 474 | goto error; |
| 476 | goto done; | ||
| 477 | } | 475 | } |
| 478 | /* load command line */ | 476 | /* load command line */ |
| 479 | rc = mic_x100_load_command_line(mdev, fw); | 477 | rc = mic_x100_load_command_line(mdev, fw); |
| 480 | if (rc) { | 478 | if (rc) { |
| 481 | dev_err(&mdev->pdev->dev, "%s %d rc %d\n", | 479 | dev_err(&mdev->pdev->dev, "%s %d rc %d\n", |
| 482 | __func__, __LINE__, rc); | 480 | __func__, __LINE__, rc); |
| 483 | goto done; | 481 | goto error; |
| 484 | } | 482 | } |
| 485 | release_firmware(fw); | 483 | release_firmware(fw); |
| 486 | /* load ramdisk */ | 484 | /* load ramdisk */ |
| 487 | if (mdev->cosm_dev->ramdisk) | 485 | if (mdev->cosm_dev->ramdisk) |
| 488 | rc = mic_x100_load_ramdisk(mdev); | 486 | rc = mic_x100_load_ramdisk(mdev); |
| 489 | 487 | ||
| 490 | done: | 488 | return rc; |
| 489 | |||
| 490 | error: | ||
| 491 | release_firmware(fw); | ||
| 491 | return rc; | 492 | return rc; |
| 492 | } | 493 | } |
| 493 | 494 | ||
