| From b69708cf45070e761d5b200fd81840bced3b541e Mon Sep 17 00:00:00 2001 |
| From: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| Date: Sun, 22 Sep 2019 04:41:23 -0300 |
| Subject: [PATCH] media: cx88: Fix some error handling path in |
| 'cx8800_initdev()' |
| |
| commit e1444e9b0424c70def6352580762d660af50e03f upstream. |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c |
| index 3b49ebb21b13..ee614eb4aa46 100644 |
| --- a/drivers/media/pci/cx88/cx88-video.c |
| +++ b/drivers/media/pci/cx88/cx88-video.c |
| @@ -1303,7 +1303,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; |
| |
| @@ -1349,7 +1349,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; |
| } |
| @@ -1363,7 +1363,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) |
| @@ -1526,11 +1526,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.7.4 |
| |