diff options
author | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-09-04 14:33:46 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2016-01-11 09:18:59 -0500 |
commit | 0d3ab8410dcb60aef2104231ba817037b3ba73bd (patch) | |
tree | ced0091bb244d4f5b64a04bfde9a314e9e960e69 | |
parent | 13f6e8887a1f61764a05a3348476d38071201f08 (diff) |
[media] dvb core: must check dvb_create_media_graph()
If media controller is enabled and mdev is filled, it should
ensure that the media graph will be properly initialized.
Enforce that.
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r-- | drivers/media/common/siano/smsdvb-main.c | 6 | ||||
-rw-r--r-- | drivers/media/dvb-core/dvbdev.h | 2 | ||||
-rw-r--r-- | drivers/media/usb/au0828/au0828-dvb.c | 8 | ||||
-rw-r--r-- | drivers/media/usb/cx231xx/cx231xx-dvb.c | 6 | ||||
-rw-r--r-- | drivers/media/usb/dvb-usb-v2/dvb_usb_core.c | 4 | ||||
-rw-r--r-- | drivers/media/usb/dvb-usb/dvb-usb-dvb.c | 6 |
6 files changed, 23 insertions, 9 deletions
diff --git a/drivers/media/common/siano/smsdvb-main.c b/drivers/media/common/siano/smsdvb-main.c index f4305ae800f4..ab345490a43a 100644 --- a/drivers/media/common/siano/smsdvb-main.c +++ b/drivers/media/common/siano/smsdvb-main.c | |||
@@ -1183,7 +1183,11 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev, | |||
1183 | if (smsdvb_debugfs_create(client) < 0) | 1183 | if (smsdvb_debugfs_create(client) < 0) |
1184 | pr_info("failed to create debugfs node\n"); | 1184 | pr_info("failed to create debugfs node\n"); |
1185 | 1185 | ||
1186 | dvb_create_media_graph(&client->adapter); | 1186 | rc = dvb_create_media_graph(&client->adapter); |
1187 | if (rc < 0) { | ||
1188 | pr_err("dvb_create_media_graph failed %d\n", rc); | ||
1189 | goto client_error; | ||
1190 | } | ||
1187 | 1191 | ||
1188 | pr_info("DVB interface registered.\n"); | 1192 | pr_info("DVB interface registered.\n"); |
1189 | return 0; | 1193 | return 0; |
diff --git a/drivers/media/dvb-core/dvbdev.h b/drivers/media/dvb-core/dvbdev.h index 3840dd62bfee..de85ba0f570a 100644 --- a/drivers/media/dvb-core/dvbdev.h +++ b/drivers/media/dvb-core/dvbdev.h | |||
@@ -206,7 +206,7 @@ int dvb_register_device(struct dvb_adapter *adap, | |||
206 | void dvb_unregister_device(struct dvb_device *dvbdev); | 206 | void dvb_unregister_device(struct dvb_device *dvbdev); |
207 | 207 | ||
208 | #ifdef CONFIG_MEDIA_CONTROLLER_DVB | 208 | #ifdef CONFIG_MEDIA_CONTROLLER_DVB |
209 | int dvb_create_media_graph(struct dvb_adapter *adap); | 209 | __must_check int dvb_create_media_graph(struct dvb_adapter *adap); |
210 | static inline void dvb_register_media_controller(struct dvb_adapter *adap, | 210 | static inline void dvb_register_media_controller(struct dvb_adapter *adap, |
211 | struct media_device *mdev) | 211 | struct media_device *mdev) |
212 | { | 212 | { |
diff --git a/drivers/media/usb/au0828/au0828-dvb.c b/drivers/media/usb/au0828/au0828-dvb.c index c01772c4f9f0..cd542b49a6c2 100644 --- a/drivers/media/usb/au0828/au0828-dvb.c +++ b/drivers/media/usb/au0828/au0828-dvb.c | |||
@@ -486,12 +486,14 @@ static int dvb_register(struct au0828_dev *dev) | |||
486 | dvb->start_count = 0; | 486 | dvb->start_count = 0; |
487 | dvb->stop_count = 0; | 487 | dvb->stop_count = 0; |
488 | 488 | ||
489 | #ifdef CONFIG_MEDIA_CONTROLLER_DVB | 489 | result = dvb_create_media_graph(&dvb->adapter); |
490 | dvb_create_media_graph(&dvb->adapter); | 490 | if (result < 0) |
491 | #endif | 491 | goto fail_create_graph; |
492 | 492 | ||
493 | return 0; | 493 | return 0; |
494 | 494 | ||
495 | fail_create_graph: | ||
496 | dvb_net_release(&dvb->net); | ||
495 | fail_fe_conn: | 497 | fail_fe_conn: |
496 | dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem); | 498 | dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem); |
497 | fail_fe_mem: | 499 | fail_fe_mem: |
diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c index e3594b9fab4a..b7552d20ebdb 100644 --- a/drivers/media/usb/cx231xx/cx231xx-dvb.c +++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c | |||
@@ -551,10 +551,14 @@ static int register_dvb(struct cx231xx_dvb *dvb, | |||
551 | 551 | ||
552 | /* register network adapter */ | 552 | /* register network adapter */ |
553 | dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx); | 553 | dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx); |
554 | dvb_create_media_graph(&dvb->adapter); | 554 | result = dvb_create_media_graph(&dvb->adapter); |
555 | if (result < 0) | ||
556 | goto fail_create_graph; | ||
555 | 557 | ||
556 | return 0; | 558 | return 0; |
557 | 559 | ||
560 | fail_create_graph: | ||
561 | dvb_net_release(&dvb->net); | ||
558 | fail_fe_conn: | 562 | fail_fe_conn: |
559 | dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem); | 563 | dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem); |
560 | fail_fe_mem: | 564 | fail_fe_mem: |
diff --git a/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c b/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c index f5df9eaba04f..6d3f61f6dc77 100644 --- a/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c +++ b/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c | |||
@@ -698,7 +698,9 @@ static int dvb_usbv2_adapter_frontend_init(struct dvb_usb_adapter *adap) | |||
698 | } | 698 | } |
699 | } | 699 | } |
700 | 700 | ||
701 | dvb_create_media_graph(&adap->dvb_adap); | 701 | ret = dvb_create_media_graph(&adap->dvb_adap); |
702 | if (ret < 0) | ||
703 | goto err_dvb_unregister_frontend; | ||
702 | 704 | ||
703 | return 0; | 705 | return 0; |
704 | 706 | ||
diff --git a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c index 8a260c854653..b51dbdf03f42 100644 --- a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c +++ b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c | |||
@@ -318,10 +318,12 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap) | |||
318 | 318 | ||
319 | adap->num_frontends_initialized++; | 319 | adap->num_frontends_initialized++; |
320 | } | 320 | } |
321 | if (ret) | ||
322 | return ret; | ||
321 | 323 | ||
322 | dvb_create_media_graph(&adap->dvb_adap); | 324 | ret = dvb_create_media_graph(&adap->dvb_adap); |
323 | 325 | ||
324 | return 0; | 326 | return ret; |
325 | } | 327 | } |
326 | 328 | ||
327 | int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap) | 329 | int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap) |