[media] davinci_vpfe: Clean up media entity after unregistering subdev
authorSakari Ailus <sakari.ailus@iki.fi>
Tue, 11 Jun 2013 09:50:49 +0000 (06:50 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 19 Jun 2013 11:58:39 +0000 (08:58 -0300)
media_entity_cleanup() frees the links array which will be accessed by
media_entity_remove_links() called by v4l2_device_unregister_subdev().

Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi>
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/staging/media/davinci_vpfe/dm365_ipipe.c
drivers/staging/media/davinci_vpfe/dm365_ipipeif.c
drivers/staging/media/davinci_vpfe/dm365_isif.c
drivers/staging/media/davinci_vpfe/dm365_resizer.c
drivers/staging/media/davinci_vpfe/vpfe_video.c

index 05673ed45ce4ca4c113bd221fbb6c3bae9da040c..766a071b0a224a4b7c6ad5b0a8c4139341981f5f 100644 (file)
@@ -1751,10 +1751,10 @@ static const struct media_entity_operations ipipe_media_ops = {
  */
 void vpfe_ipipe_unregister_entities(struct vpfe_ipipe_device *vpfe_ipipe)
 {
-       /* cleanup entity */
-       media_entity_cleanup(&vpfe_ipipe->subdev.entity);
        /* unregister subdev */
        v4l2_device_unregister_subdev(&vpfe_ipipe->subdev);
+       /* cleanup entity */
+       media_entity_cleanup(&vpfe_ipipe->subdev.entity);
 }
 
 /*
index b2f4ef84f3db692879c229d6ec730958778a7e66..59540cd4bb98c0d14705841b6edbd35c50ad640f 100644 (file)
@@ -947,10 +947,10 @@ void vpfe_ipipeif_unregister_entities(struct vpfe_ipipeif_device *ipipeif)
        /* unregister video device */
        vpfe_video_unregister(&ipipeif->video_in);
 
-       /* cleanup entity */
-       media_entity_cleanup(&ipipeif->subdev.entity);
        /* unregister subdev */
        v4l2_device_unregister_subdev(&ipipeif->subdev);
+       /* cleanup entity */
+       media_entity_cleanup(&ipipeif->subdev.entity);
 }
 
 int
index 5829360f74c9c9f6dbf2caed98059e43ee1743b1..ff48fce94fcbda376938d3482d44978bd65533b6 100644 (file)
@@ -1750,10 +1750,10 @@ static const struct media_entity_operations isif_media_ops = {
 void vpfe_isif_unregister_entities(struct vpfe_isif_device *isif)
 {
        vpfe_video_unregister(&isif->video_out);
-       /* cleanup entity */
-       media_entity_cleanup(&isif->subdev.entity);
        /* unregister subdev */
        v4l2_device_unregister_subdev(&isif->subdev);
+       /* cleanup entity */
+       media_entity_cleanup(&isif->subdev.entity);
 }
 
 static void isif_restore_defaults(struct vpfe_isif_device *isif)
index 126f84c4cb6466beb8286af04055eaa93fc4a408..8e13bd494c980198d48942b88d400d8fb1a57ac5 100644 (file)
@@ -1777,14 +1777,14 @@ void vpfe_resizer_unregister_entities(struct vpfe_resizer_device *vpfe_rsz)
        vpfe_video_unregister(&vpfe_rsz->resizer_a.video_out);
        vpfe_video_unregister(&vpfe_rsz->resizer_b.video_out);
 
-       /* cleanup entity */
-       media_entity_cleanup(&vpfe_rsz->crop_resizer.subdev.entity);
-       media_entity_cleanup(&vpfe_rsz->resizer_a.subdev.entity);
-       media_entity_cleanup(&vpfe_rsz->resizer_b.subdev.entity);
        /* unregister subdev */
        v4l2_device_unregister_subdev(&vpfe_rsz->crop_resizer.subdev);
        v4l2_device_unregister_subdev(&vpfe_rsz->resizer_a.subdev);
        v4l2_device_unregister_subdev(&vpfe_rsz->resizer_b.subdev);
+       /* cleanup entity */
+       media_entity_cleanup(&vpfe_rsz->crop_resizer.subdev.entity);
+       media_entity_cleanup(&vpfe_rsz->resizer_a.subdev.entity);
+       media_entity_cleanup(&vpfe_rsz->resizer_b.subdev.entity);
 }
 
 /*
@@ -1865,12 +1865,12 @@ out_create_link:
        vpfe_video_unregister(&resizer->resizer_b.video_out);
 out_video_out2_register:
        vpfe_video_unregister(&resizer->resizer_a.video_out);
-       media_entity_cleanup(&resizer->crop_resizer.subdev.entity);
-       media_entity_cleanup(&resizer->resizer_a.subdev.entity);
-       media_entity_cleanup(&resizer->resizer_b.subdev.entity);
        v4l2_device_unregister_subdev(&resizer->crop_resizer.subdev);
        v4l2_device_unregister_subdev(&resizer->resizer_a.subdev);
        v4l2_device_unregister_subdev(&resizer->resizer_b.subdev);
+       media_entity_cleanup(&resizer->crop_resizer.subdev.entity);
+       media_entity_cleanup(&resizer->resizer_a.subdev.entity);
+       media_entity_cleanup(&resizer->resizer_b.subdev.entity);
        return ret;
 }
 
index cb5410b390ef9268e35a553ad01b73851e1f6bbd..24d98a6866bb7d91178daffaba6e867a8f332a18 100644 (file)
@@ -1614,7 +1614,7 @@ int vpfe_video_register(struct vpfe_video_device *video,
 void vpfe_video_unregister(struct vpfe_video_device *video)
 {
        if (video_is_registered(&video->video_dev)) {
-               media_entity_cleanup(&video->video_dev.entity);
                video_unregister_device(&video->video_dev);
+               media_entity_cleanup(&video->video_dev.entity);
        }
 }