From: Jianwei Wang jianwei.wang.chn@gmail.com
For state->fb may be NULL in fsl_dcu_drm_plane_atomic_check function, if so, return -EINVAL. No need check in fsl_dcu_drm_plane_atomic_update anymore.
Signed-off-by: Jianwei Wang jianwei.wang.chn@gmail.com Signed-off-by: Yi Meng b56799@freescale.com Signed-off-by: Wang Dongsheng dongsheng.wang@freescale.com Tested-by: Stefan Agner stefan@agner.ch
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c index 51daaea..a8932a8 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c @@ -41,6 +41,9 @@ static int fsl_dcu_drm_plane_atomic_check(struct drm_plane *plane, { struct drm_framebuffer *fb = state->fb;
+ if (!fb) + return -EINVAL; + switch (fb->pixel_format) { case DRM_FORMAT_RGB565: case DRM_FORMAT_RGB888: @@ -85,9 +88,6 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, unsigned int alpha, bpp; int index, ret;
- if (!fb) - return; - index = fsl_dcu_drm_plane_index(plane); if (index < 0) return;
Tested-by: Meng Yi meng.yi@nxp.com
-----邮件原件----- 发件人: Dongsheng Wang [mailto:Dongsheng.Wang@freescale.com] 发送时间: Tuesday, December 01, 2015 4:16 PM 收件人: airlied@linux.ie 抄送: stefan@agner.ch; dri-devel@lists.freedesktop.org; Jianwei Wang jianwei.wang.chn@gmail.com; Yi Meng-B56799 B56799@freescale.com; Wang Dongsheng-B40534 Dongsheng.Wang@freescale.com 主题: [RESEND 1/3] drm: fsl-dcu: Fix no fb check bug
From: Jianwei Wang jianwei.wang.chn@gmail.com
For state->fb may be NULL in fsl_dcu_drm_plane_atomic_check function, if so, return -EINVAL. No need check in fsl_dcu_drm_plane_atomic_update anymore.
Signed-off-by: Jianwei Wang jianwei.wang.chn@gmail.com Signed-off-by: Yi Meng b56799@freescale.com Signed-off-by: Wang Dongsheng dongsheng.wang@freescale.com Tested-by: Stefan Agner stefan@agner.ch
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c index 51daaea..a8932a8 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c @@ -41,6 +41,9 @@ static int fsl_dcu_drm_plane_atomic_check(struct drm_plane *plane, { struct drm_framebuffer *fb = state->fb;
+ if (!fb) + return -EINVAL; + switch (fb->pixel_format) { case DRM_FORMAT_RGB565: case DRM_FORMAT_RGB888: @@ -85,9 +88,6 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, unsigned int alpha, bpp; int index, ret;
- if (!fb) - return; - index = fsl_dcu_drm_plane_index(plane); if (index < 0) return; -- 2.1.0.27.g96db324
Hi Meng,
The only situation I could observe that is when fsl,panel was not valid...
However, I think with my patch "drm/fsl-dcu: Fix no fb check bug", this situation can be avoided completely: https://lkml.org/lkml/2015/11/18/950
With that patch applied, and a non-existing panel assigned, the DRM driver already fails at probe time gracefully: [ 0.488291] [drm] Initialized drm 1.1.0 20060810 [ 0.501576] fsl-dcu 40058000.dcu: failed to initialize mode setting
So I think that a state->fb check for NULL is not necessary at all...
Can you test my patch to see if it fixes the issue for you too?
-- Stefan
On 2015-12-23 21:28, Meng Yi wrote:
Tested-by: Meng Yi meng.yi@nxp.com
-----邮件原件----- 发件人: Dongsheng Wang [mailto:Dongsheng.Wang@freescale.com] 发送时间: Tuesday, December 01, 2015 4:16 PM 收件人: airlied@linux.ie 抄送: stefan@agner.ch; dri-devel@lists.freedesktop.org; Jianwei Wang jianwei.wang.chn@gmail.com; Yi Meng-B56799 B56799@freescale.com; Wang Dongsheng-B40534 Dongsheng.Wang@freescale.com 主题: [RESEND 1/3] drm: fsl-dcu: Fix no fb check bug
From: Jianwei Wang jianwei.wang.chn@gmail.com
For state->fb may be NULL in fsl_dcu_drm_plane_atomic_check function, if so, return -EINVAL. No need check in fsl_dcu_drm_plane_atomic_update anymore.
Signed-off-by: Jianwei Wang jianwei.wang.chn@gmail.com Signed-off-by: Yi Meng b56799@freescale.com Signed-off-by: Wang Dongsheng dongsheng.wang@freescale.com Tested-by: Stefan Agner stefan@agner.ch
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c index 51daaea..a8932a8 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c @@ -41,6 +41,9 @@ static int fsl_dcu_drm_plane_atomic_check(struct drm_plane *plane, { struct drm_framebuffer *fb = state->fb;
- if (!fb)
return -EINVAL;
- switch (fb->pixel_format) { case DRM_FORMAT_RGB565: case DRM_FORMAT_RGB888:
@@ -85,9 +88,6 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, unsigned int alpha, bpp; int index, ret;
- if (!fb)
return;
- index = fsl_dcu_drm_plane_index(plane); if (index < 0) return;
-- 2.1.0.27.g96db324
Hi Stefan,
On Sunday, 27 December 2015, Stefan Agner stefan@agner.ch wrote:
However, I think with my patch "drm/fsl-dcu: Fix no fb check bug", this situation can be avoided completely: https://lkml.org/lkml/2015/11/18/950
With that patch applied, and a non-existing panel assigned, the DRM driver already fails at probe time gracefully: [ 0.488291] [drm] Initialized drm 1.1.0 20060810 [ 0.501576] fsl-dcu 40058000.dcu: failed to initialize mode setting
So I think that a state->fb check for NULL is not necessary at all...
Can you test my patch to see if it fixes the issue for you too?
This is still required; state->fb being NULL means the plane is being disabled.
Cheers, Daniel
Hi, Stefan I have tested your patch, It seems good to me. But I think state->fb check is still necessary, because fb is related to crtc , and panel is related to connector,. When fsl,panel is not valid, it indicate that connector is not available, but fb check is still needed. But I am not so sure, and what do you think?
-- Meng Yi
-----Original Message----- From: Stefan Agner [mailto:stefan@agner.ch] Sent: Sunday, December 27, 2015 11:54 AM To: Meng Yi meng.yi@nxp.com Cc: Dongsheng Wang Dongsheng.Wang@freescale.com; airlied@linux.ie; dri-devel@lists.freedesktop.org; Jianwei Wang jianwei.wang.chn@gmail.com; Yi Meng-B56799 B56799@freescale.com Subject: Re: 答复: [RESEND 1/3] drm: fsl-dcu: Fix no fb check bug
Hi Meng,
The only situation I could observe that is when fsl,panel was not valid...
However, I think with my patch "drm/fsl-dcu: Fix no fb check bug", this situation can be avoided completely: https://lkml.org/lkml/2015/11/18/950
With that patch applied, and a non-existing panel assigned, the DRM driver already fails at probe time gracefully: [ 0.488291] [drm] Initialized drm 1.1.0 20060810 [ 0.501576] fsl-dcu 40058000.dcu: failed to initialize mode setting
So I think that a state->fb check for NULL is not necessary at all...
Can you test my patch to see if it fixes the issue for you too?
-- Stefan
On 2015-12-23 21:28, Meng Yi wrote:
Tested-by: Meng Yi meng.yi@nxp.com
-----邮件原件----- 发件人: Dongsheng Wang [mailto:Dongsheng.Wang@freescale.com] 发送时间: Tuesday, December 01, 2015 4:16 PM 收件人: airlied@linux.ie 抄送: stefan@agner.ch; dri-devel@lists.freedesktop.org; Jianwei Wang jianwei.wang.chn@gmail.com; Yi Meng-B56799 B56799@freescale.com; Wang Dongsheng-B40534 Dongsheng.Wang@freescale.com 主题: [RESEND 1/3] drm: fsl-dcu: Fix no fb check bug
From: Jianwei Wang jianwei.wang.chn@gmail.com
For state->fb may be NULL in fsl_dcu_drm_plane_atomic_check function, if so, return -EINVAL. No need check in fsl_dcu_drm_plane_atomic_update anymore.
Signed-off-by: Jianwei Wang jianwei.wang.chn@gmail.com Signed-off-by: Yi Meng b56799@freescale.com Signed-off-by: Wang Dongsheng dongsheng.wang@freescale.com Tested-by: Stefan Agner stefan@agner.ch
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c index 51daaea..a8932a8 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c @@ -41,6 +41,9 @@ static int fsl_dcu_drm_plane_atomic_check(struct drm_plane *plane, { struct drm_framebuffer *fb = state->fb;
- if (!fb)
return -EINVAL;
- switch (fb->pixel_format) { case DRM_FORMAT_RGB565: case DRM_FORMAT_RGB888:
@@ -85,9 +88,6 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, unsigned int alpha, bpp; int index, ret;
- if (!fb)
return;
- index = fsl_dcu_drm_plane_index(plane); if (index < 0) return;
-- 2.1.0.27.g96db324
Hi,
On 30 December 2015 at 07:37, Meng Yi meng.yi@nxp.com wrote:
I have tested your patch, It seems good to me. But I think state->fb check is still necessary, because fb is related to crtc , and panel is related to connector,. When fsl,panel is not valid, it indicate that connector is not available, but fb check is still needed. But I am not so sure, and what do you think?
fb is tied to planes. Planes are tied to CRTCs. CRTCs are tied to connectors. Connectors are tied to the panel. If the panel is not found, no connectors will be activated, so no CRTCs will be enabled, so no planes will be enabled.
Please let me be very clear though: setting fb == NULL is legitimate. Userspace may do this at any time. Crashing when plane->state->fb == NULL is an error in your driver and must be fixed.
Cheers, Daniel
On 2016-01-01 07:10, Daniel Stone wrote:
Hi,
On 30 December 2015 at 07:37, Meng Yi meng.yi@nxp.com wrote:
I have tested your patch, It seems good to me. But I think state->fb check is still necessary, because fb is related to crtc , and panel is related to connector,. When fsl,panel is not valid, it indicate that connector is not available, but fb check is still needed. But I am not so sure, and what do you think?
fb is tied to planes. Planes are tied to CRTCs. CRTCs are tied to connectors. Connectors are tied to the panel. If the panel is not found, no connectors will be activated, so no CRTCs will be enabled, so no planes will be enabled.
Please let me be very clear though: setting fb == NULL is legitimate. Userspace may do this at any time. Crashing when plane->state->fb == NULL is an error in your driver and must be fixed.
Thanks for this clarification. Ok, I agree the patch is needed despite my fix then...
Acked-by: Stefan Agner stefan@agner.ch
-- Stefan
Hi, Daniel Thanks for your clarification, and I will fix this error. -- Meng
-----Original Message----- From: Daniel Stone [mailto:daniel@fooishbar.org] Sent: Friday, January 01, 2016 11:10 PM To: Meng Yi meng.yi@nxp.com Cc: Stefan Agner stefan@agner.ch; dri-devel@lists.freedesktop.org; Yi Meng-B56799 B56799@freescale.com Subject: Re: 答复: [RESEND 1/3] drm: fsl-dcu: Fix no fb check bug
Hi,
On 30 December 2015 at 07:37, Meng Yi meng.yi@nxp.com wrote:
I have tested your patch, It seems good to me. But I think state->fb check is still necessary, because fb is related to crtc , and panel is related to connector,. When fsl,panel is not valid, it indicate that connector is not available, but fb check is still needed. But I am not so sure, and what do you think?
fb is tied to planes. Planes are tied to CRTCs. CRTCs are tied to connectors. Connectors are tied to the panel. If the panel is not found, no connectors will be activated, so no CRTCs will be enabled, so no planes will be enabled.
Please let me be very clear though: setting fb == NULL is legitimate. Userspace may do this at any time. Crashing when plane->state->fb == NULL is an error in your driver and must be fixed.
Cheers, Daniel
Hi,
On 1 December 2015 at 08:15, Dongsheng Wang dongsheng.wang@freescale.com wrote:
From: Jianwei Wang jianwei.wang.chn@gmail.com
For state->fb may be NULL in fsl_dcu_drm_plane_atomic_check function, if so, return -EINVAL. No need check in fsl_dcu_drm_plane_atomic_update anymore.
Signed-off-by: Jianwei Wang jianwei.wang.chn@gmail.com Signed-off-by: Yi Meng b56799@freescale.com Signed-off-by: Wang Dongsheng dongsheng.wang@freescale.com Tested-by: Stefan Agner stefan@agner.ch
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c index 51daaea..a8932a8 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c @@ -41,6 +41,9 @@ static int fsl_dcu_drm_plane_atomic_check(struct drm_plane *plane, { struct drm_framebuffer *fb = state->fb;
if (!fb)
return -EINVAL;
This should be return 0 instead, else you can never disable a plane ...
Cheers, Daniel
dri-devel@lists.freedesktop.org