* [PATCH v2] imx-drm: Fix probe failure
@ 2013-08-29 13:59 Fabio Estevam
2013-08-29 15:21 ` Daniel Vetter
2013-08-29 18:14 ` Sascha Hauer
0 siblings, 2 replies; 8+ messages in thread
From: Fabio Estevam @ 2013-08-29 13:59 UTC (permalink / raw)
To: airlied
Cc: daniel.vetter, gregkh, s.hauer, festevam, linux-kernel, Fabio Estevam
Since commit b5dc0d10 (drm/imx: kill firstopen callback) the following probe
failure is seen:
[drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
[drm] No driver support for vblank timestamp query.
[drm] Initialized imx-drm 1.0.0 20120507 on minor 0
imx-ldb ldb.10: adding encoder failed with -16
imx-ldb: probe of ldb.10 failed with error -16
imx-ipuv3 2400000.ipu: IPUv3H probed
imx-ipuv3 2800000.ipu: IPUv3H probed
imx-ipuv3-crtc imx-ipuv3-crtc.0: adding crtc failed with -16.
imx-ipuv3-crtc: probe of imx-ipuv3-crtc.0 failed with error -16
imx-ipuv3-crtc imx-ipuv3-crtc.1: adding crtc failed with -16.
imx-ipuv3-crtc: probe of imx-ipuv3-crtc.1 failed with error -16
imx-ipuv3-crtc imx-ipuv3-crtc.2: adding crtc failed with -16.
imx-ipuv3-crtc: probe of imx-ipuv3-crtc.2 failed with error -16
imx-ipuv3-crtc imx-ipuv3-crtc.3: adding crtc failed with -16.
imx-ipuv3-crtc: probe of imx-ipuv3-crtc.3 failed with error -16
The reason for the probe failure is that now 'imxdrm->references' is incremented
early in imx_drm_driver_load(), so the following checks in imx_drm_add_crtc()
and imx_drm_add_encoder():
if (imxdrm->references) {
ret = -EBUSY;
goto err_busy;
}
,will always fail.
Let the drm core handle the references instead of doing this manually in
imx-drm. In imx-drm-core the open and close callbacks map to drm_open and
drm_close, which handle the references via open_count.
After this patch, lvds panel is functional on a mx6qsabrelite board.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
---
Changes since v1:
- Improved commit log by providing an explanation to the probe failure
- Cc'ed Dave/Daniel
drivers/staging/imx-drm/imx-drm-core.c | 23 -----------------------
1 file changed, 23 deletions(-)
diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
index 47c5888..6f0d24c 100644
--- a/drivers/staging/imx-drm/imx-drm-core.c
+++ b/drivers/staging/imx-drm/imx-drm-core.c
@@ -41,7 +41,6 @@ struct imx_drm_device {
struct list_head encoder_list;
struct list_head connector_list;
struct mutex mutex;
- int references;
int pipes;
struct drm_fbdev_cma *fbhelper;
};
@@ -241,8 +240,6 @@ struct drm_device *imx_drm_device_get(void)
}
}
- imxdrm->references++;
-
return imxdrm->drm;
unwind_crtc:
@@ -280,8 +277,6 @@ void imx_drm_device_put(void)
list_for_each_entry(enc, &imxdrm->encoder_list, list)
module_put(enc->owner);
- imxdrm->references--;
-
mutex_unlock(&imxdrm->mutex);
}
EXPORT_SYMBOL_GPL(imx_drm_device_put);
@@ -485,11 +480,6 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
mutex_lock(&imxdrm->mutex);
- if (imxdrm->references) {
- ret = -EBUSY;
- goto err_busy;
- }
-
imx_drm_crtc = kzalloc(sizeof(*imx_drm_crtc), GFP_KERNEL);
if (!imx_drm_crtc) {
ret = -ENOMEM;
@@ -523,7 +513,6 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
err_register:
kfree(imx_drm_crtc);
err_alloc:
-err_busy:
mutex_unlock(&imxdrm->mutex);
return ret;
}
@@ -564,11 +553,6 @@ int imx_drm_add_encoder(struct drm_encoder *encoder,
mutex_lock(&imxdrm->mutex);
- if (imxdrm->references) {
- ret = -EBUSY;
- goto err_busy;
- }
-
imx_drm_encoder = kzalloc(sizeof(*imx_drm_encoder), GFP_KERNEL);
if (!imx_drm_encoder) {
ret = -ENOMEM;
@@ -595,7 +579,6 @@ int imx_drm_add_encoder(struct drm_encoder *encoder,
err_register:
kfree(imx_drm_encoder);
err_alloc:
-err_busy:
mutex_unlock(&imxdrm->mutex);
return ret;
@@ -709,11 +692,6 @@ int imx_drm_add_connector(struct drm_connector *connector,
mutex_lock(&imxdrm->mutex);
- if (imxdrm->references) {
- ret = -EBUSY;
- goto err_busy;
- }
-
imx_drm_connector = kzalloc(sizeof(*imx_drm_connector), GFP_KERNEL);
if (!imx_drm_connector) {
ret = -ENOMEM;
@@ -738,7 +716,6 @@ int imx_drm_add_connector(struct drm_connector *connector,
err_register:
kfree(imx_drm_connector);
err_alloc:
-err_busy:
mutex_unlock(&imxdrm->mutex);
return ret;
--
1.8.1.2
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] imx-drm: Fix probe failure
2013-08-29 13:59 [PATCH v2] imx-drm: Fix probe failure Fabio Estevam
@ 2013-08-29 15:21 ` Daniel Vetter
2013-08-29 18:31 ` Sascha Hauer
2013-08-29 18:14 ` Sascha Hauer
1 sibling, 1 reply; 8+ messages in thread
From: Daniel Vetter @ 2013-08-29 15:21 UTC (permalink / raw)
To: Fabio Estevam
Cc: airlied, daniel.vetter, gregkh, s.hauer, festevam, linux-kernel
On Thu, Aug 29, 2013 at 10:59:22AM -0300, Fabio Estevam wrote:
> Since commit b5dc0d10 (drm/imx: kill firstopen callback) the following probe
> failure is seen:
>
> [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
> [drm] No driver support for vblank timestamp query.
> [drm] Initialized imx-drm 1.0.0 20120507 on minor 0
> imx-ldb ldb.10: adding encoder failed with -16
> imx-ldb: probe of ldb.10 failed with error -16
> imx-ipuv3 2400000.ipu: IPUv3H probed
> imx-ipuv3 2800000.ipu: IPUv3H probed
> imx-ipuv3-crtc imx-ipuv3-crtc.0: adding crtc failed with -16.
> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.0 failed with error -16
> imx-ipuv3-crtc imx-ipuv3-crtc.1: adding crtc failed with -16.
> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.1 failed with error -16
> imx-ipuv3-crtc imx-ipuv3-crtc.2: adding crtc failed with -16.
> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.2 failed with error -16
> imx-ipuv3-crtc imx-ipuv3-crtc.3: adding crtc failed with -16.
> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.3 failed with error -16
>
> The reason for the probe failure is that now 'imxdrm->references' is incremented
> early in imx_drm_driver_load(), so the following checks in imx_drm_add_crtc()
> and imx_drm_add_encoder():
>
> if (imxdrm->references) {
> ret = -EBUSY;
> goto err_busy;
> }
>
> ,will always fail.
>
> Let the drm core handle the references instead of doing this manually in
> imx-drm. In imx-drm-core the open and close callbacks map to drm_open and
> drm_close, which handle the references via open_count.
>
> After this patch, lvds panel is functional on a mx6qsabrelite board.
>
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Yeah, just ripping out the imxdrm->references stuff will restore imx, but
of course all the funny races are still fundamentally there. So we still
rely on userspace being really careful to obey the right module loading
sequence and not start any drm client before that has all completed. So
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Greg, when you slurp this in can you pls also add the imx todo entry from
the other thread?
http://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg43698.html
Or do you want me to send in a real patch?
Thanks, Daniel
> ---
> Changes since v1:
> - Improved commit log by providing an explanation to the probe failure
> - Cc'ed Dave/Daniel
>
> drivers/staging/imx-drm/imx-drm-core.c | 23 -----------------------
> 1 file changed, 23 deletions(-)
>
> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
> index 47c5888..6f0d24c 100644
> --- a/drivers/staging/imx-drm/imx-drm-core.c
> +++ b/drivers/staging/imx-drm/imx-drm-core.c
> @@ -41,7 +41,6 @@ struct imx_drm_device {
> struct list_head encoder_list;
> struct list_head connector_list;
> struct mutex mutex;
> - int references;
> int pipes;
> struct drm_fbdev_cma *fbhelper;
> };
> @@ -241,8 +240,6 @@ struct drm_device *imx_drm_device_get(void)
> }
> }
>
> - imxdrm->references++;
> -
> return imxdrm->drm;
>
> unwind_crtc:
> @@ -280,8 +277,6 @@ void imx_drm_device_put(void)
> list_for_each_entry(enc, &imxdrm->encoder_list, list)
> module_put(enc->owner);
>
> - imxdrm->references--;
> -
> mutex_unlock(&imxdrm->mutex);
> }
> EXPORT_SYMBOL_GPL(imx_drm_device_put);
> @@ -485,11 +480,6 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
>
> mutex_lock(&imxdrm->mutex);
>
> - if (imxdrm->references) {
> - ret = -EBUSY;
> - goto err_busy;
> - }
> -
> imx_drm_crtc = kzalloc(sizeof(*imx_drm_crtc), GFP_KERNEL);
> if (!imx_drm_crtc) {
> ret = -ENOMEM;
> @@ -523,7 +513,6 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
> err_register:
> kfree(imx_drm_crtc);
> err_alloc:
> -err_busy:
> mutex_unlock(&imxdrm->mutex);
> return ret;
> }
> @@ -564,11 +553,6 @@ int imx_drm_add_encoder(struct drm_encoder *encoder,
>
> mutex_lock(&imxdrm->mutex);
>
> - if (imxdrm->references) {
> - ret = -EBUSY;
> - goto err_busy;
> - }
> -
> imx_drm_encoder = kzalloc(sizeof(*imx_drm_encoder), GFP_KERNEL);
> if (!imx_drm_encoder) {
> ret = -ENOMEM;
> @@ -595,7 +579,6 @@ int imx_drm_add_encoder(struct drm_encoder *encoder,
> err_register:
> kfree(imx_drm_encoder);
> err_alloc:
> -err_busy:
> mutex_unlock(&imxdrm->mutex);
>
> return ret;
> @@ -709,11 +692,6 @@ int imx_drm_add_connector(struct drm_connector *connector,
>
> mutex_lock(&imxdrm->mutex);
>
> - if (imxdrm->references) {
> - ret = -EBUSY;
> - goto err_busy;
> - }
> -
> imx_drm_connector = kzalloc(sizeof(*imx_drm_connector), GFP_KERNEL);
> if (!imx_drm_connector) {
> ret = -ENOMEM;
> @@ -738,7 +716,6 @@ int imx_drm_add_connector(struct drm_connector *connector,
> err_register:
> kfree(imx_drm_connector);
> err_alloc:
> -err_busy:
> mutex_unlock(&imxdrm->mutex);
>
> return ret;
> --
> 1.8.1.2
>
>
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] imx-drm: Fix probe failure
2013-08-29 15:21 ` Daniel Vetter
@ 2013-08-29 18:31 ` Sascha Hauer
0 siblings, 0 replies; 8+ messages in thread
From: Sascha Hauer @ 2013-08-29 18:31 UTC (permalink / raw)
To: Fabio Estevam, airlied, gregkh, festevam, linux-kernel
On Thu, Aug 29, 2013 at 05:21:30PM +0200, Daniel Vetter wrote:
> On Thu, Aug 29, 2013 at 10:59:22AM -0300, Fabio Estevam wrote:
> > Since commit b5dc0d10 (drm/imx: kill firstopen callback) the following probe
> > failure is seen:
> >
> > [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
> > [drm] No driver support for vblank timestamp query.
> > [drm] Initialized imx-drm 1.0.0 20120507 on minor 0
> > imx-ldb ldb.10: adding encoder failed with -16
> > imx-ldb: probe of ldb.10 failed with error -16
> > imx-ipuv3 2400000.ipu: IPUv3H probed
> > imx-ipuv3 2800000.ipu: IPUv3H probed
> > imx-ipuv3-crtc imx-ipuv3-crtc.0: adding crtc failed with -16.
> > imx-ipuv3-crtc: probe of imx-ipuv3-crtc.0 failed with error -16
> > imx-ipuv3-crtc imx-ipuv3-crtc.1: adding crtc failed with -16.
> > imx-ipuv3-crtc: probe of imx-ipuv3-crtc.1 failed with error -16
> > imx-ipuv3-crtc imx-ipuv3-crtc.2: adding crtc failed with -16.
> > imx-ipuv3-crtc: probe of imx-ipuv3-crtc.2 failed with error -16
> > imx-ipuv3-crtc imx-ipuv3-crtc.3: adding crtc failed with -16.
> > imx-ipuv3-crtc: probe of imx-ipuv3-crtc.3 failed with error -16
> >
> > The reason for the probe failure is that now 'imxdrm->references' is incremented
> > early in imx_drm_driver_load(), so the following checks in imx_drm_add_crtc()
> > and imx_drm_add_encoder():
> >
> > if (imxdrm->references) {
> > ret = -EBUSY;
> > goto err_busy;
> > }
> >
> > ,will always fail.
> >
> > Let the drm core handle the references instead of doing this manually in
> > imx-drm. In imx-drm-core the open and close callbacks map to drm_open and
> > drm_close, which handle the references via open_count.
> >
> > After this patch, lvds panel is functional on a mx6qsabrelite board.
> >
> > Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
>
> Yeah, just ripping out the imxdrm->references stuff will restore imx, but
> of course all the funny races are still fundamentally there. So we still
> rely on userspace being really careful to obey the right module loading
> sequence and not start any drm client before that has all completed. So
>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> Greg, when you slurp this in can you pls also add the imx todo entry from
> the other thread?
>
> http://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg43698.html
You said there:
> +- Fix up the driver load sequence to make sure all submodules for encoders/crtcs
> + are fully loaded before the drm driver is registered.
We can't know when all submodules are registered and really I think this
is not necessary. The driver will use the components available during
open time. When being opened no components will be registered/deregistered.
So a user will always get a functional drm device with the components he
actually loaded.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] imx-drm: Fix probe failure
2013-08-29 13:59 [PATCH v2] imx-drm: Fix probe failure Fabio Estevam
2013-08-29 15:21 ` Daniel Vetter
@ 2013-08-29 18:14 ` Sascha Hauer
2013-08-29 18:30 ` Fabio Estevam
1 sibling, 1 reply; 8+ messages in thread
From: Sascha Hauer @ 2013-08-29 18:14 UTC (permalink / raw)
To: Fabio Estevam; +Cc: airlied, daniel.vetter, gregkh, festevam, linux-kernel
On Thu, Aug 29, 2013 at 10:59:22AM -0300, Fabio Estevam wrote:
> Since commit b5dc0d10 (drm/imx: kill firstopen callback) the following probe
> failure is seen:
>
> [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
> [drm] No driver support for vblank timestamp query.
> [drm] Initialized imx-drm 1.0.0 20120507 on minor 0
> imx-ldb ldb.10: adding encoder failed with -16
> imx-ldb: probe of ldb.10 failed with error -16
> imx-ipuv3 2400000.ipu: IPUv3H probed
> imx-ipuv3 2800000.ipu: IPUv3H probed
> imx-ipuv3-crtc imx-ipuv3-crtc.0: adding crtc failed with -16.
> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.0 failed with error -16
> imx-ipuv3-crtc imx-ipuv3-crtc.1: adding crtc failed with -16.
> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.1 failed with error -16
> imx-ipuv3-crtc imx-ipuv3-crtc.2: adding crtc failed with -16.
> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.2 failed with error -16
> imx-ipuv3-crtc imx-ipuv3-crtc.3: adding crtc failed with -16.
> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.3 failed with error -16
>
> The reason for the probe failure is that now 'imxdrm->references' is incremented
> early in imx_drm_driver_load(), so the following checks in imx_drm_add_crtc()
> and imx_drm_add_encoder():
>
> if (imxdrm->references) {
> ret = -EBUSY;
> goto err_busy;
> }
>
> ,will always fail.
>
> Let the drm core handle the references instead of doing this manually in
> imx-drm. In imx-drm-core the open and close callbacks map to drm_open and
> drm_close, which handle the references via open_count.
>
> After this patch, lvds panel is functional on a mx6qsabrelite board.
>
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> ---
> Changes since v1:
> - Improved commit log by providing an explanation to the probe failure
> - Cc'ed Dave/Daniel
>
> @@ -485,11 +480,6 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
>
> mutex_lock(&imxdrm->mutex);
>
> - if (imxdrm->references) {
> - ret = -EBUSY;
> - goto err_busy;
> - }
As I told in v1: Simply removing the code is not an option. We agreed
that we use the drm core reference counting, so you must actually test
for it here...
> @@ -564,11 +553,6 @@ int imx_drm_add_encoder(struct drm_encoder *encoder,
>
> mutex_lock(&imxdrm->mutex);
>
> - if (imxdrm->references) {
> - ret = -EBUSY;
> - goto err_busy;
> - }
...here...
> mutex_lock(&imxdrm->mutex);
>
> - if (imxdrm->references) {
> - ret = -EBUSY;
> - goto err_busy;
> - }
...and here.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] imx-drm: Fix probe failure
2013-08-29 18:14 ` Sascha Hauer
@ 2013-08-29 18:30 ` Fabio Estevam
2013-08-29 18:37 ` Sascha Hauer
0 siblings, 1 reply; 8+ messages in thread
From: Fabio Estevam @ 2013-08-29 18:30 UTC (permalink / raw)
To: Sascha Hauer
Cc: Fabio Estevam, Dave Airlie, daniel.vetter, Greg Kroah-Hartman,
linux-kernel
On Thu, Aug 29, 2013 at 3:14 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote:
> On Thu, Aug 29, 2013 at 10:59:22AM -0300, Fabio Estevam wrote:
>> Since commit b5dc0d10 (drm/imx: kill firstopen callback) the following probe
>> failure is seen:
>>
>> [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
>> [drm] No driver support for vblank timestamp query.
>> [drm] Initialized imx-drm 1.0.0 20120507 on minor 0
>> imx-ldb ldb.10: adding encoder failed with -16
>> imx-ldb: probe of ldb.10 failed with error -16
>> imx-ipuv3 2400000.ipu: IPUv3H probed
>> imx-ipuv3 2800000.ipu: IPUv3H probed
>> imx-ipuv3-crtc imx-ipuv3-crtc.0: adding crtc failed with -16.
>> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.0 failed with error -16
>> imx-ipuv3-crtc imx-ipuv3-crtc.1: adding crtc failed with -16.
>> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.1 failed with error -16
>> imx-ipuv3-crtc imx-ipuv3-crtc.2: adding crtc failed with -16.
>> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.2 failed with error -16
>> imx-ipuv3-crtc imx-ipuv3-crtc.3: adding crtc failed with -16.
>> imx-ipuv3-crtc: probe of imx-ipuv3-crtc.3 failed with error -16
>>
>> The reason for the probe failure is that now 'imxdrm->references' is incremented
>> early in imx_drm_driver_load(), so the following checks in imx_drm_add_crtc()
>> and imx_drm_add_encoder():
>>
>> if (imxdrm->references) {
>> ret = -EBUSY;
>> goto err_busy;
>> }
>>
>> ,will always fail.
>>
>> Let the drm core handle the references instead of doing this manually in
>> imx-drm. In imx-drm-core the open and close callbacks map to drm_open and
>> drm_close, which handle the references via open_count.
>>
>> After this patch, lvds panel is functional on a mx6qsabrelite board.
>>
>> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
>> ---
>> Changes since v1:
>> - Improved commit log by providing an explanation to the probe failure
>> - Cc'ed Dave/Daniel
>>
>> @@ -485,11 +480,6 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
>>
>> mutex_lock(&imxdrm->mutex);
>>
>> - if (imxdrm->references) {
>> - ret = -EBUSY;
>> - goto err_busy;
>> - }
>
> As I told in v1: Simply removing the code is not an option. We agreed
> that we use the drm core reference counting, so you must actually test
> for it here...
Yes, we did, but after reading a separate thread on this topic, I
learned that drm core does not support it currently.
Daniel mentions [1]: "And I wouldn't worry about module unloading and
refcounting for
now since core drm is terminally broken in that area already anyway"
[1] http://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg43698.html
Can't we just apply this patch so that imx-drm can be functional again
and fix module unloading/refcount later?
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] imx-drm: Fix probe failure
2013-08-29 18:30 ` Fabio Estevam
@ 2013-08-29 18:37 ` Sascha Hauer
2013-08-30 16:08 ` Fabio Estevam
0 siblings, 1 reply; 8+ messages in thread
From: Sascha Hauer @ 2013-08-29 18:37 UTC (permalink / raw)
To: Fabio Estevam
Cc: Fabio Estevam, Dave Airlie, daniel.vetter, Greg Kroah-Hartman,
linux-kernel
On Thu, Aug 29, 2013 at 03:30:12PM -0300, Fabio Estevam wrote:
> >> @@ -485,11 +480,6 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
> >>
> >> mutex_lock(&imxdrm->mutex);
> >>
> >> - if (imxdrm->references) {
> >> - ret = -EBUSY;
> >> - goto err_busy;
> >> - }
> >
> > As I told in v1: Simply removing the code is not an option. We agreed
> > that we use the drm core reference counting, so you must actually test
> > for it here...
>
> Yes, we did, but after reading a separate thread on this topic, I
> learned that drm core does not support it currently.
>
> Daniel mentions [1]: "And I wouldn't worry about module unloading and
> refcounting for
> now since core drm is terminally broken in that area already anyway"
>
> [1] http://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg43698.html
>
> Can't we just apply this patch so that imx-drm can be functional again
> and fix module unloading/refcount later?
It's not about the module refcount. It's only that a on a drm device
which is in use you better do not add/remove components.
Again: The imx-drm driver does *not* do hotplugging. It will *not* add
or remove components when the device is opened. The code you remove
exactly makes (or made before Daniels patch) that sure.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] imx-drm: Fix probe failure
2013-08-29 18:37 ` Sascha Hauer
@ 2013-08-30 16:08 ` Fabio Estevam
2013-08-30 17:06 ` Sascha Hauer
0 siblings, 1 reply; 8+ messages in thread
From: Fabio Estevam @ 2013-08-30 16:08 UTC (permalink / raw)
To: Sascha Hauer
Cc: Fabio Estevam, Dave Airlie, daniel.vetter, Greg Kroah-Hartman,
linux-kernel
Hi Sascha,
On Thu, Aug 29, 2013 at 3:37 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote:
> It's not about the module refcount. It's only that a on a drm device
> which is in use you better do not add/remove components.
>
> Again: The imx-drm driver does *not* do hotplugging. It will *not* add
> or remove components when the device is opened. The code you remove
> exactly makes (or made before Daniels patch) that sure.
I am not sure what would be the correct fix for this.
What about this?
--- a/drivers/staging/imx-drm/imx-drm-core.c
+++ b/drivers/staging/imx-drm/imx-drm-core.c
@@ -438,6 +438,8 @@ static int imx_drm_driver_load(struct drm_device
*drm, unsigned long flags)
ret = -EINVAL;
ret = 0;
+
+ imxdrm->references = -1;
err_init:
mutex_unlock(&imxdrm->mutex);
@@ -485,7 +487,7 @@ int imx_drm_add_crtc(struct drm_crtc *crtc,
mutex_lock(&imxdrm->mutex);
- if (imxdrm->references) {
+ if (imxdrm->references > 0) {
ret = -EBUSY;
goto err_busy;
}
@@ -564,7 +566,7 @@ int imx_drm_add_encoder(struct drm_encoder *encoder,
mutex_lock(&imxdrm->mutex);
- if (imxdrm->references) {
+ if (imxdrm->references > 0) {
ret = -EBUSY;
goto err_busy;
}
@@ -709,7 +711,7 @@ int imx_drm_add_connector(struct drm_connector *connector,
mutex_lock(&imxdrm->mutex);
- if (imxdrm->references) {
+ if (imxdrm->references > 0) {
ret = -EBUSY;
goto err_busy;
}
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] imx-drm: Fix probe failure
2013-08-30 16:08 ` Fabio Estevam
@ 2013-08-30 17:06 ` Sascha Hauer
0 siblings, 0 replies; 8+ messages in thread
From: Sascha Hauer @ 2013-08-30 17:06 UTC (permalink / raw)
To: Fabio Estevam
Cc: Fabio Estevam, Dave Airlie, daniel.vetter, Greg Kroah-Hartman,
linux-kernel
On Fri, Aug 30, 2013 at 01:08:14PM -0300, Fabio Estevam wrote:
> Hi Sascha,
>
> On Thu, Aug 29, 2013 at 3:37 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote:
> > It's not about the module refcount. It's only that a on a drm device
> > which is in use you better do not add/remove components.
> >
> > Again: The imx-drm driver does *not* do hotplugging. It will *not* add
> > or remove components when the device is opened. The code you remove
> > exactly makes (or made before Daniels patch) that sure.
>
> I am not sure what would be the correct fix for this.
Why not use (struct drm_device)->open_count as suggested earlier?
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-08-30 17:06 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-29 13:59 [PATCH v2] imx-drm: Fix probe failure Fabio Estevam
2013-08-29 15:21 ` Daniel Vetter
2013-08-29 18:31 ` Sascha Hauer
2013-08-29 18:14 ` Sascha Hauer
2013-08-29 18:30 ` Fabio Estevam
2013-08-29 18:37 ` Sascha Hauer
2013-08-30 16:08 ` Fabio Estevam
2013-08-30 17:06 ` Sascha Hauer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome