lkml.org 
[lkml]   [2019]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 033/130] media: cx88: Fix some error handling path in 'cx8800_initdev()'
    Date
    From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

    [ Upstream commit e1444e9b0424c70def6352580762d660af50e03f ]

    A call to 'pci_disable_device()' is missing in the error handling path.
    In some cases, a call to 'free_irq()' may also be missing.

    Reorder the error handling path, add some new labels and fix the 2 issues
    mentionned above.

    This way, the error handling path in more in line with 'cx8800_finidev()'
    (i.e. the remove function)

    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/pci/cx88/cx88-video.c | 11 +++++++----
    1 file changed, 7 insertions(+), 4 deletions(-)

    diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c
    index 7d25ecd4404bf..1748812bd7e55 100644
    --- a/drivers/media/pci/cx88/cx88-video.c
    +++ b/drivers/media/pci/cx88/cx88-video.c
    @@ -1310,7 +1310,7 @@ static int cx8800_initdev(struct pci_dev *pci_dev,
    core = cx88_core_get(dev->pci);
    if (!core) {
    err = -EINVAL;
    - goto fail_free;
    + goto fail_disable;
    }
    dev->core = core;

    @@ -1356,7 +1356,7 @@ static int cx8800_initdev(struct pci_dev *pci_dev,
    cc->step, cc->default_value);
    if (!vc) {
    err = core->audio_hdl.error;
    - goto fail_core;
    + goto fail_irq;
    }
    vc->priv = (void *)cc;
    }
    @@ -1370,7 +1370,7 @@ static int cx8800_initdev(struct pci_dev *pci_dev,
    cc->step, cc->default_value);
    if (!vc) {
    err = core->video_hdl.error;
    - goto fail_core;
    + goto fail_irq;
    }
    vc->priv = (void *)cc;
    if (vc->id == V4L2_CID_CHROMA_AGC)
    @@ -1533,11 +1533,14 @@ static int cx8800_initdev(struct pci_dev *pci_dev,

    fail_unreg:
    cx8800_unregister_video(dev);
    - free_irq(pci_dev->irq, dev);
    mutex_unlock(&core->lock);
    +fail_irq:
    + free_irq(pci_dev->irq, dev);
    fail_core:
    core->v4ldev = NULL;
    cx88_core_put(core, dev->pci);
    +fail_disable:
    + pci_disable_device(pci_dev);
    fail_free:
    kfree(dev);
    return err;
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-12-10 23:12    [W:4.061 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site