Commit e1444e9b authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Mauro Carvalho Chehab
Browse files

media: cx88: Fix some error handling path in 'cx8800_initdev()'



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: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 2eca8e4c
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -1277,7 +1277,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;

@@ -1323,7 +1323,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;
	}
@@ -1337,7 +1337,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)
@@ -1509,11 +1509,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;