Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1699867 > unrolled thread
| Started by | Mark Yao <mark.yao@rock-chips.com> |
|---|---|
| First post | 2017-07-31 12:00 +0200 |
| Last post | 2017-08-09 15:40 +0200 |
| Articles | 12 — 6 participants |
Back to article view | Back to linux.kernel
[PATCH 0/6] drm/rockchip: Some fixes Mark Yao <mark.yao@rock-chips.com> - 2017-07-31 12:00 +0200
[PATCH 3/6] drm/rockchip: vop: fix NV12 video display error Mark Yao <mark.yao@rock-chips.com> - 2017-07-31 12:00 +0200
Re: [PATCH 3/6] drm/rockchip: vop: fix NV12 video display error Sandy Huang <sandy.huang@rock-chips.com> - 2017-08-04 03:00 +0200
[PATCH 5/6] drm/rockchip: vop: report error when check resource error Mark Yao <mark.yao@rock-chips.com> - 2017-07-31 12:00 +0200
Re: [PATCH 5/6] drm/rockchip: vop: report error when check resource error Sandy Huang <sandy.huang@rock-chips.com> - 2017-08-04 03:00 +0200
[PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev Mark Yao <mark.yao@rock-chips.com> - 2017-07-31 12:00 +0200
Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev Emil Velikov <emil.l.velikov@gmail.com> - 2017-07-31 14:00 +0200
Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev Daniel Vetter <daniel@ffwll.ch> - 2017-07-31 14:30 +0200
Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev Mark yao <mark.yao@rock-chips.com> - 2017-08-01 04:10 +0200
[PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev Mark Yao <mark.yao@rock-chips.com> - 2017-08-01 10:20 +0200
Re: [PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev Sandy Huang <sandy.huang@rock-chips.com> - 2017-08-04 05:30 +0200
Re: [PATCH 0/6] drm/rockchip: Some fixes Sean Paul <seanpaul@chromium.org> - 2017-08-09 15:40 +0200
| From | Mark Yao <mark.yao@rock-chips.com> |
|---|---|
| Date | 2017-07-31 12:00 +0200 |
| Subject | [PATCH 0/6] drm/rockchip: Some fixes |
| Message-ID | <u9fuO-4AR-15@gated-at.bofh.it> |
Here are some fixes port from rockchip_linux project[0], Tested on rk3399 and rk3288 board. [0]: https://github.com/rockchip-linux/kernel Mark Yao (6): drm/rockchip: vop: no need wait vblank on crtc enable drm/rockchip: vop: fix iommu page fault when resume drm/rockchip: vop: fix NV12 video display error drm/rockchip: vop: round_up pitches to word align drm/rockchip: vop: report error when check resource error drm/rockchip: fix race with kms hotplug and fbdev drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 77 ++++++++--------------------- drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 3 ++ 3 files changed, 24 insertions(+), 58 deletions(-) -- 1.9.1
[toc] | [next] | [standalone]
| From | Mark Yao <mark.yao@rock-chips.com> |
|---|---|
| Date | 2017-07-31 12:00 +0200 |
| Subject | [PATCH 3/6] drm/rockchip: vop: fix NV12 video display error |
| Message-ID | <u9fEu-4EG-15@gated-at.bofh.it> |
| In reply to | #1699867 |
fixup the scale calculation formula on the case src_height == (dst_height/2). Signed-off-by: Mark Yao <mark.yao@rock-chips.com> --- drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index af1091f..56bbd2e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -299,6 +299,9 @@ static inline uint16_t scl_get_bili_dn_vskip(int src_h, int dst_h, act_height = (src_h + vskiplines - 1) / vskiplines; + if (act_height == dst_h) + return GET_SCL_FT_BILI_DN(src_h, dst_h) / vskiplines; + return GET_SCL_FT_BILI_DN(act_height, dst_h); } -- 1.9.1
[toc] | [prev] | [next] | [standalone]
| From | Sandy Huang <sandy.huang@rock-chips.com> |
|---|---|
| Date | 2017-08-04 03:00 +0200 |
| Subject | Re: [PATCH 3/6] drm/rockchip: vop: fix NV12 video display error |
| Message-ID | <uaz85-7YP-15@gated-at.bofh.it> |
| In reply to | #1699871 |
Hi mark, 在 2017/7/31 17:49, Mark Yao 写道: > fixup the scale calculation formula on the case > src_height == (dst_height/2). > > Signed-off-by: Mark Yao <mark.yao@rock-chips.com> > --- > drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h > index af1091f..56bbd2e 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h > @@ -299,6 +299,9 @@ static inline uint16_t scl_get_bili_dn_vskip(int src_h, int dst_h, > > act_height = (src_h + vskiplines - 1) / vskiplines; > > + if (act_height == dst_h) > + return GET_SCL_FT_BILI_DN(src_h, dst_h) / vskiplines; > + > return GET_SCL_FT_BILI_DN(act_height, dst_h); > } > > Reviewed-by: Sandy huang <sandy.huang@rock-chips.com>
[toc] | [prev] | [next] | [standalone]
| From | Mark Yao <mark.yao@rock-chips.com> |
|---|---|
| Date | 2017-07-31 12:00 +0200 |
| Subject | [PATCH 5/6] drm/rockchip: vop: report error when check resource error |
| Message-ID | <u9fEu-4EG-19@gated-at.bofh.it> |
| In reply to | #1699867 |
The user would be confused while facing a error commit without
any error report.
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
---
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index fa0d9f7..999c2e0 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -674,8 +674,10 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
* Src.x1 can be odd when do clip, but yuv plane start point
* need align with 2 pixel.
*/
- if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2))
+ if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2)) {
+ DRM_ERROR("Invalid Source: Yuv format not support odd xpos\n");
return -EINVAL;
+ }
return 0;
}
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | Sandy Huang <sandy.huang@rock-chips.com> |
|---|---|
| Date | 2017-08-04 03:00 +0200 |
| Subject | Re: [PATCH 5/6] drm/rockchip: vop: report error when check resource error |
| Message-ID | <uaz85-7YP-5@gated-at.bofh.it> |
| In reply to | #1699872 |
Hi mark,
在 2017/7/31 17:49, Mark Yao 写道:
> The user would be confused while facing a error commit without
> any error report.
>
> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
> ---
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index fa0d9f7..999c2e0 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -674,8 +674,10 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> * Src.x1 can be odd when do clip, but yuv plane start point
> * need align with 2 pixel.
> */
> - if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2))
> + if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2)) {
> + DRM_ERROR("Invalid Source: Yuv format not support odd xpos\n");
> return -EINVAL;
> + }
>
> return 0;
> }
>
Reviewed-by: Sandy huang <sandy.huang@rock-chips.com>
[toc] | [prev] | [next] | [standalone]
| From | Mark Yao <mark.yao@rock-chips.com> |
|---|---|
| Date | 2017-07-31 12:00 +0200 |
| Subject | [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev |
| Message-ID | <u9fEu-4EG-25@gated-at.bofh.it> |
| In reply to | #1699867 |
Since fb_helper is not a pointer on rockchip_drm_private, it's no need to check pointer. Kms hotplug event may race into fbdev helper initial, and fb_helper->dev may be NULL pointer, that would cause the bug: [ 0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000 [ 0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP [ 0.736648] Modules linked in: [ 0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20 [ 0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT) [ 0.738020] Workqueue: events cdn_dp_pd_event_work [ 0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000 [ 0.739109] PC is at mutex_lock+0x14/0x44 [ 0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114 [ 0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44 [ 0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114 [ 0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20 [ 0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34 [ 0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4 [ 0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0 [ 0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404 [ 0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0 [ 0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40 Signed-off-by: Mark Yao <mark.yao@rock-chips.com> --- drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c index 81f9548..e6bd0f4 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c @@ -170,7 +170,7 @@ static void rockchip_drm_output_poll_changed(struct drm_device *dev) struct rockchip_drm_private *private = dev->dev_private; struct drm_fb_helper *fb_helper = &private->fbdev_helper; - if (fb_helper) + if (fb_helper->dev) drm_fb_helper_hotplug_event(fb_helper); } -- 1.9.1
[toc] | [prev] | [next] | [standalone]
| From | Emil Velikov <emil.l.velikov@gmail.com> |
|---|---|
| Date | 2017-07-31 14:00 +0200 |
| Subject | Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev |
| Message-ID | <u9hwC-5Pp-11@gated-at.bofh.it> |
| In reply to | #1699873 |
On 31 July 2017 at 10:50, Mark Yao <mark.yao@rock-chips.com> wrote: > Since fb_helper is not a pointer on rockchip_drm_private, it's no > need to check pointer. > > Kms hotplug event may race into fbdev helper initial, and fb_helper->dev > may be NULL pointer, that would cause the bug: > > [ 0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000 > [ 0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP > [ 0.736648] Modules linked in: > [ 0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20 > [ 0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT) > [ 0.738020] Workqueue: events cdn_dp_pd_event_work > [ 0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000 > [ 0.739109] PC is at mutex_lock+0x14/0x44 > [ 0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114 > [ 0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44 > [ 0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114 > [ 0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20 > [ 0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34 > [ 0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4 > [ 0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0 > [ 0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404 > [ 0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0 > [ 0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40 > > Signed-off-by: Mark Yao <mark.yao@rock-chips.com> > --- > drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > index 81f9548..e6bd0f4 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > @@ -170,7 +170,7 @@ static void rockchip_drm_output_poll_changed(struct drm_device *dev) > struct rockchip_drm_private *private = dev->dev_private; > struct drm_fb_helper *fb_helper = &private->fbdev_helper; > > - if (fb_helper) > + if (fb_helper->dev) > drm_fb_helper_hotplug_event(fb_helper); Food for thought: Quick grep shows that no other drivers have such a ->dev check. Does this mean that either the issue is rockchip specific? If not, one could look into resolving the problem directly in drm core. Or at least update the other users, so they don't stumble upon the problem? HTH Emil
[toc] | [prev] | [next] | [standalone]
| From | Daniel Vetter <daniel@ffwll.ch> |
|---|---|
| Date | 2017-07-31 14:30 +0200 |
| Subject | Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev |
| Message-ID | <u9hZF-6eS-33@gated-at.bofh.it> |
| In reply to | #1699969 |
On Mon, Jul 31, 2017 at 1:57 PM, Emil Velikov <emil.l.velikov@gmail.com> wrote: > On 31 July 2017 at 10:50, Mark Yao <mark.yao@rock-chips.com> wrote: >> Since fb_helper is not a pointer on rockchip_drm_private, it's no >> need to check pointer. >> >> Kms hotplug event may race into fbdev helper initial, and fb_helper->dev >> may be NULL pointer, that would cause the bug: >> >> [ 0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000 >> [ 0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP >> [ 0.736648] Modules linked in: >> [ 0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20 >> [ 0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT) >> [ 0.738020] Workqueue: events cdn_dp_pd_event_work >> [ 0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000 >> [ 0.739109] PC is at mutex_lock+0x14/0x44 >> [ 0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114 >> [ 0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44 >> [ 0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114 >> [ 0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20 >> [ 0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34 >> [ 0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4 >> [ 0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0 >> [ 0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404 >> [ 0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0 >> [ 0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40 >> >> Signed-off-by: Mark Yao <mark.yao@rock-chips.com> >> --- >> drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c >> index 81f9548..e6bd0f4 100644 >> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c >> @@ -170,7 +170,7 @@ static void rockchip_drm_output_poll_changed(struct drm_device *dev) >> struct rockchip_drm_private *private = dev->dev_private; >> struct drm_fb_helper *fb_helper = &private->fbdev_helper; >> >> - if (fb_helper) >> + if (fb_helper->dev) >> drm_fb_helper_hotplug_event(fb_helper); > Food for thought: > > Quick grep shows that no other drivers have such a ->dev check. Does > this mean that either the issue is rockchip specific? > If not, one could look into resolving the problem directly in drm core. > > Or at least update the other users, so they don't stumble upon the problem? The fbdev helpers support already handling hotplug events before you have finalized the fbdev setup. Please read the kerneldoc for the various fbdev functions, they explain what you should be doing. This hack here should indeed not be needed. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch
[toc] | [prev] | [next] | [standalone]
| From | Mark yao <mark.yao@rock-chips.com> |
|---|---|
| Date | 2017-08-01 04:10 +0200 |
| Subject | Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev |
| Message-ID | <u9uNb-5Fp-9@gated-at.bofh.it> |
| In reply to | #1699998 |
On 2017年07月31日 20:28, Daniel Vetter wrote:
> On Mon, Jul 31, 2017 at 1:57 PM, Emil Velikov <emil.l.velikov@gmail.com> wrote:
>> On 31 July 2017 at 10:50, Mark Yao <mark.yao@rock-chips.com> wrote:
>>> Since fb_helper is not a pointer on rockchip_drm_private, it's no
>>> need to check pointer.
>>>
>>> Kms hotplug event may race into fbdev helper initial, and fb_helper->dev
>>> may be NULL pointer, that would cause the bug:
>>>
>>> [ 0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000
>>> [ 0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP
>>> [ 0.736648] Modules linked in:
>>> [ 0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20
>>> [ 0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT)
>>> [ 0.738020] Workqueue: events cdn_dp_pd_event_work
>>> [ 0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000
>>> [ 0.739109] PC is at mutex_lock+0x14/0x44
>>> [ 0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114
>>> [ 0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44
>>> [ 0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114
>>> [ 0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20
>>> [ 0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34
>>> [ 0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4
>>> [ 0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0
>>> [ 0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404
>>> [ 0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0
>>> [ 0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40
>>>
>>> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
>>> ---
>>> drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>>> index 81f9548..e6bd0f4 100644
>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>>> @@ -170,7 +170,7 @@ static void rockchip_drm_output_poll_changed(struct drm_device *dev)
>>> struct rockchip_drm_private *private = dev->dev_private;
>>> struct drm_fb_helper *fb_helper = &private->fbdev_helper;
>>>
>>> - if (fb_helper)
>>> + if (fb_helper->dev)
>>> drm_fb_helper_hotplug_event(fb_helper);
>> Food for thought:
>>
>> Quick grep shows that no other drivers have such a ->dev check. Does
>> this mean that either the issue is rockchip specific?
>> If not, one could look into resolving the problem directly in drm core.
>>
>> Or at least update the other users, so they don't stumble upon the problem?
> The fbdev helpers support already handling hotplug events before you
> have finalized the fbdev setup. Please read the kerneldoc for the
> various fbdev functions, they explain what you should be doing. This
> hack here should indeed not be needed.
> -Daniel
Hi Daniel
Right, the doc[0] already detail this:
It is possible, though perhaps somewhat tricky, to implement race-free hotplug detection using
the fbdev helpers. The drm_fb_helper_prepare() helper must be called first to initialize the
minimum required to make hotplug detection work.Drivers also need to make sure to properly
set up the drm_mode_config.funcs member. After calling drm_kms_helper_poll_init() it is safe to
enable interrupts and start processing hotplug events.
The problem is drm/rockchip do the wrong initial, call drm_kms_helper_poll_init before fbdev setup.
will fix it at next version.
[0]: https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-kms-helpers.html#fbdev-helper-functions-reference
Best regards.
--
Mark Yao
[toc] | [prev] | [next] | [standalone]
| From | Mark Yao <mark.yao@rock-chips.com> |
|---|---|
| Date | 2017-08-01 10:20 +0200 |
| Subject | [PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev |
| Message-ID | <u9Azf-Lh-7@gated-at.bofh.it> |
| In reply to | #1699873 |
According to the kerneldoc[0], should do fbdev setup before calling drm_kms_helper_poll_init(), otherwise, Kms hotplug event may race into fbdev helper initial, and fb_helper->dev may be NULL pointer, that would cause the bug: [ 0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000 [ 0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP [ 0.736648] Modules linked in: [ 0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20 [ 0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT) [ 0.738020] Workqueue: events cdn_dp_pd_event_work [ 0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000 [ 0.739109] PC is at mutex_lock+0x14/0x44 [ 0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114 [ 0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44 [ 0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114 [ 0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20 [ 0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34 [ 0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4 [ 0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0 [ 0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404 [ 0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0 [ 0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40 [0]: https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-kms-helpers.html Signed-off-by: Mark Yao <mark.yao@rock-chips.com> --- Changes in v1.1: - According to the kerneldoc, fix the race bug in generic way. drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 848edcf..c41f48a 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -161,22 +161,21 @@ static int rockchip_drm_bind(struct device *dev) */ drm_dev->irq_enabled = true; - /* init kms poll for handling hpd */ - drm_kms_helper_poll_init(drm_dev); - ret = rockchip_drm_fbdev_init(drm_dev); if (ret) - goto err_kms_helper_poll_fini; + goto err_unbind_all; + + /* init kms poll for handling hpd */ + drm_kms_helper_poll_init(drm_dev); ret = drm_dev_register(drm_dev, 0); if (ret) - goto err_fbdev_fini; + goto err_kms_helper_poll_fini; return 0; -err_fbdev_fini: - rockchip_drm_fbdev_fini(drm_dev); err_kms_helper_poll_fini: drm_kms_helper_poll_fini(drm_dev); + rockchip_drm_fbdev_fini(drm_dev); err_unbind_all: component_unbind_all(dev, drm_dev); err_mode_config_cleanup: -- 1.9.1
[toc] | [prev] | [next] | [standalone]
| From | Sandy Huang <sandy.huang@rock-chips.com> |
|---|---|
| Date | 2017-08-04 05:30 +0200 |
| Subject | Re: [PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev |
| Message-ID | <uaBtf-1rM-7@gated-at.bofh.it> |
| In reply to | #1700732 |
Hi Mark, 在 2017/8/1 16:11, Mark Yao 写道: > According to the kerneldoc[0], should do fbdev setup before calling > drm_kms_helper_poll_init(), otherwise, Kms hotplug event may race > into fbdev helper initial, and fb_helper->dev may be NULL pointer, > that would cause the bug: > [ 0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000 > [ 0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP > [ 0.736648] Modules linked in: > [ 0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20 > [ 0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT) > [ 0.738020] Workqueue: events cdn_dp_pd_event_work > [ 0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000 > [ 0.739109] PC is at mutex_lock+0x14/0x44 > [ 0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114 > [ 0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44 > [ 0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114 > [ 0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20 > [ 0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34 > [ 0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4 > [ 0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0 > [ 0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404 > [ 0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0 > [ 0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40 > > [0]: https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-kms-helpers.html > > Signed-off-by: Mark Yao <mark.yao@rock-chips.com> > --- > Changes in v1.1: > - According to the kerneldoc, fix the race bug in generic way. > > drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > Reviewed-by: Sandy huang <sandy.huang@rock-chips.com>
[toc] | [prev] | [next] | [standalone]
| From | Sean Paul <seanpaul@chromium.org> |
|---|---|
| Date | 2017-08-09 15:40 +0200 |
| Message-ID | <ucznj-7Gt-15@gated-at.bofh.it> |
| In reply to | #1699867 |
On Mon, Jul 31, 2017 at 5:49 AM, Mark Yao <mark.yao@rock-chips.com> wrote: > Here are some fixes port from rockchip_linux project[0], > > Tested on rk3399 and rk3288 board. > > [0]: https://github.com/rockchip-linux/kernel > > Mark Yao (6): > drm/rockchip: vop: no need wait vblank on crtc enable > drm/rockchip: vop: fix iommu page fault when resume > drm/rockchip: vop: fix NV12 video display error > drm/rockchip: vop: round_up pitches to word align > drm/rockchip: vop: report error when check resource error > drm/rockchip: fix race with kms hotplug and fbdev Hi Mark, I noticed you applied this set to both -misc-next and -misc-fixes. In the future, please do not apply patches in both places. Instead, consult the flowchart under "Where Do I Apply My Patch?" at https://01.org/linuxgraphics/gfx-docs/maintainer-tools/drm-misc.html and choose the most appropriate place. If you are unsure, please reach out to a -misc maintainer. Thank you, Sean > > drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 77 ++++++++--------------------- > drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 3 ++ > 3 files changed, 24 insertions(+), 58 deletions(-) > > -- > 1.9.1 > > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web