Message ID | 1461839104-29135-2-git-send-email-m.szyprowski@samsung.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On 04/28/16 12:25, Marek Szyprowski wrote: > Commit 0c426c472b5585ed6e59160359c979506d45ae49 ("[media] media: Always > keep a graph walk large enough around") changed > media_device_register_entity() function to take mdev->graph_mutex. This > causes deadlock in driver probe, which calls (indirectly) this function > with ->graph_mutex taken. This patch removes taking ->graph_mutex in > driver probe to avoid deadlock. Other drivers don't take ->graph_mutex > for entity registration, so this change should be safe. > > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com> Thanks! Hans > --- > drivers/media/platform/s3c-camif/camif-core.c | 12 +++--------- > 1 file changed, 3 insertions(+), 9 deletions(-) > > diff --git a/drivers/media/platform/s3c-camif/camif-core.c b/drivers/media/platform/s3c-camif/camif-core.c > index 0b44b9accf50..af237af204e2 100644 > --- a/drivers/media/platform/s3c-camif/camif-core.c > +++ b/drivers/media/platform/s3c-camif/camif-core.c > @@ -493,21 +493,17 @@ static int s3c_camif_probe(struct platform_device *pdev) > if (ret < 0) > goto err_sens; > > - mutex_lock(&camif->media_dev.graph_mutex); > - > ret = v4l2_device_register_subdev_nodes(&camif->v4l2_dev); > if (ret < 0) > - goto err_unlock; > + goto err_sens; > > ret = camif_register_video_nodes(camif); > if (ret < 0) > - goto err_unlock; > + goto err_sens; > > ret = camif_create_media_links(camif); > if (ret < 0) > - goto err_unlock; > - > - mutex_unlock(&camif->media_dev.graph_mutex); > + goto err_sens; > > ret = media_device_register(&camif->media_dev); > if (ret < 0) > @@ -516,8 +512,6 @@ static int s3c_camif_probe(struct platform_device *pdev) > pm_runtime_put(dev); > return 0; > > -err_unlock: > - mutex_unlock(&camif->media_dev.graph_mutex); > err_sens: > v4l2_device_unregister(&camif->v4l2_dev); > media_device_unregister(&camif->media_dev); > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/platform/s3c-camif/camif-core.c b/drivers/media/platform/s3c-camif/camif-core.c index 0b44b9accf50..af237af204e2 100644 --- a/drivers/media/platform/s3c-camif/camif-core.c +++ b/drivers/media/platform/s3c-camif/camif-core.c @@ -493,21 +493,17 @@ static int s3c_camif_probe(struct platform_device *pdev) if (ret < 0) goto err_sens; - mutex_lock(&camif->media_dev.graph_mutex); - ret = v4l2_device_register_subdev_nodes(&camif->v4l2_dev); if (ret < 0) - goto err_unlock; + goto err_sens; ret = camif_register_video_nodes(camif); if (ret < 0) - goto err_unlock; + goto err_sens; ret = camif_create_media_links(camif); if (ret < 0) - goto err_unlock; - - mutex_unlock(&camif->media_dev.graph_mutex); + goto err_sens; ret = media_device_register(&camif->media_dev); if (ret < 0) @@ -516,8 +512,6 @@ static int s3c_camif_probe(struct platform_device *pdev) pm_runtime_put(dev); return 0; -err_unlock: - mutex_unlock(&camif->media_dev.graph_mutex); err_sens: v4l2_device_unregister(&camif->v4l2_dev); media_device_unregister(&camif->media_dev);
Commit 0c426c472b5585ed6e59160359c979506d45ae49 ("[media] media: Always keep a graph walk large enough around") changed media_device_register_entity() function to take mdev->graph_mutex. This causes deadlock in driver probe, which calls (indirectly) this function with ->graph_mutex taken. This patch removes taking ->graph_mutex in driver probe to avoid deadlock. Other drivers don't take ->graph_mutex for entity registration, so this change should be safe. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> --- drivers/media/platform/s3c-camif/camif-core.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)