Message ID | 1655916845-31760-1-git-send-email-quic_khsieh@quicinc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/msm/dp: reset drm_dev to NULL at dp_display_unbind() | expand |
On 22/06/2022 19:54, Kuogee Hsieh wrote: > During msm initialize phase, dp_display_unbind() will be called to undo > initializations had been done by dp_display_bind() previously if there is > error happen at msm_drm_bind. Under this kind of circumstance, drm_device > may not be populated completed which causes system crash at drm_dev_dbg(). > This patch reset drm_dev to NULL so that following drm_dev_dbg() will not > refer to any internal fields of drm_device to prevent system from crashing. > Below are panic stack trace, > > [ 53.584904] Unable to handle kernel paging request at virtual address 0000000070018001 > . > [ 53.702212] Hardware name: Qualcomm Technologies, Inc. sc7280 CRD platform (rev5+) (DT) > [ 53.710445] pstate: 20400009 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) > [ 53.717596] pc : string_nocheck+0x1c/0x64 > [ 53.721738] lr : string+0x54/0x60 > [ 53.725162] sp : ffffffc013d6b650 > [ 53.728590] pmr_save: 000000e0 > [ 53.731743] x29: ffffffc013d6b650 x28: 0000000000000002 x27: 0000000000ffffff > [ 53.739083] x26: ffffffc013d6b710 x25: ffffffd07a066ae0 x24: ffffffd07a419f97 > [ 53.746420] x23: ffffffd07a419f99 x22: ffffff81fef360d4 x21: ffffff81fef364d4 > [ 53.753760] x20: ffffffc013d6b6f8 x19: ffffffd07a06683c x18: 0000000000000000 > [ 53.761093] x17: 4020386678302f30 x16: 00000000000000b0 x15: ffffffd0797523c8 > [ 53.768429] x14: 0000000000000004 x13: ffff0000ffffff00 x12: ffffffd07a066b2c > [ 53.775780] x11: 0000000000000000 x10: 000000000000013c x9 : 0000000000000000 > [ 53.783117] x8 : ffffff81fef364d4 x7 : 0000000000000000 x6 : 0000000000000000 > [ 53.790445] x5 : 0000000000000000 x4 : ffff0a00ffffff04 x3 : ffff0a00ffffff04 > [ 53.797783] x2 : 0000000070018001 x1 : ffffffffffffffff x0 : ffffff81fef360d4 > [ 53.805136] Call trace: > [ 53.807667] string_nocheck+0x1c/0x64 > [ 53.811439] string+0x54/0x60 > [ 53.814498] vsnprintf+0x374/0x53c > [ 53.818009] pointer+0x3dc/0x40c > [ 53.821340] vsnprintf+0x398/0x53c > [ 53.824854] vscnprintf+0x3c/0x88 > [ 53.828274] __trace_array_vprintk+0xcc/0x2d4 > [ 53.832768] trace_array_printk+0x8c/0xb4 > [ 53.836900] drm_trace_printf+0x74/0x9c > [ 53.840875] drm_dev_dbg+0xfc/0x1b8 > [ 53.844480] dp_pm_suspend+0x70/0xf8 > [ 53.848164] dpm_run_callback+0x60/0x1a0 > [ 53.852222] __device_suspend+0x304/0x3f4 > [ 53.856363] dpm_suspend+0xf8/0x3a8 > [ 53.859959] dpm_suspend_start+0x8c/0xc0 > > Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > --- > drivers/gpu/drm/msm/dp/dp_display.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c > index 2b72639..02fff70 100644 > --- a/drivers/gpu/drm/msm/dp/dp_display.c > +++ b/drivers/gpu/drm/msm/dp/dp_display.c > @@ -316,6 +316,8 @@ static void dp_display_unbind(struct device *dev, struct device *master, > > dp_power_client_deinit(dp->power); > dp_aux_unregister(dp->aux); > + dp->drm_dev = NULL; > + dp->aux->drm_dev = NULL; > priv->dp[dp->id] = NULL; > } >
Quoting Kuogee Hsieh (2022-06-22 09:54:05) > During msm initialize phase, dp_display_unbind() will be called to undo > initializations had been done by dp_display_bind() previously if there is > error happen at msm_drm_bind. Under this kind of circumstance, drm_device > may not be populated completed which causes system crash at drm_dev_dbg(). > This patch reset drm_dev to NULL so that following drm_dev_dbg() will not > refer to any internal fields of drm_device to prevent system from crashing. > Below are panic stack trace, > > [ 53.584904] Unable to handle kernel paging request at virtual address 0000000070018001 > . > [ 53.702212] Hardware name: Qualcomm Technologies, Inc. sc7280 CRD platform (rev5+) (DT) > [ 53.710445] pstate: 20400009 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) > [ 53.717596] pc : string_nocheck+0x1c/0x64 > [ 53.721738] lr : string+0x54/0x60 > [ 53.725162] sp : ffffffc013d6b650 > [ 53.728590] pmr_save: 000000e0 > [ 53.731743] x29: ffffffc013d6b650 x28: 0000000000000002 x27: 0000000000ffffff > [ 53.739083] x26: ffffffc013d6b710 x25: ffffffd07a066ae0 x24: ffffffd07a419f97 > [ 53.746420] x23: ffffffd07a419f99 x22: ffffff81fef360d4 x21: ffffff81fef364d4 > [ 53.753760] x20: ffffffc013d6b6f8 x19: ffffffd07a06683c x18: 0000000000000000 > [ 53.761093] x17: 4020386678302f30 x16: 00000000000000b0 x15: ffffffd0797523c8 > [ 53.768429] x14: 0000000000000004 x13: ffff0000ffffff00 x12: ffffffd07a066b2c > [ 53.775780] x11: 0000000000000000 x10: 000000000000013c x9 : 0000000000000000 > [ 53.783117] x8 : ffffff81fef364d4 x7 : 0000000000000000 x6 : 0000000000000000 > [ 53.790445] x5 : 0000000000000000 x4 : ffff0a00ffffff04 x3 : ffff0a00ffffff04 > [ 53.797783] x2 : 0000000070018001 x1 : ffffffffffffffff x0 : ffffff81fef360d4 > [ 53.805136] Call trace: > [ 53.807667] string_nocheck+0x1c/0x64 > [ 53.811439] string+0x54/0x60 > [ 53.814498] vsnprintf+0x374/0x53c > [ 53.818009] pointer+0x3dc/0x40c > [ 53.821340] vsnprintf+0x398/0x53c > [ 53.824854] vscnprintf+0x3c/0x88 > [ 53.828274] __trace_array_vprintk+0xcc/0x2d4 > [ 53.832768] trace_array_printk+0x8c/0xb4 > [ 53.836900] drm_trace_printf+0x74/0x9c > [ 53.840875] drm_dev_dbg+0xfc/0x1b8 > [ 53.844480] dp_pm_suspend+0x70/0xf8 > [ 53.848164] dpm_run_callback+0x60/0x1a0 > [ 53.852222] __device_suspend+0x304/0x3f4 > [ 53.856363] dpm_suspend+0xf8/0x3a8 > [ 53.859959] dpm_suspend_start+0x8c/0xc0 > > Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com> > --- Any fixes tag? Reviewed-by: Stephen Boyd <swboyd@chromium.org>
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c index 2b72639..02fff70 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -316,6 +316,8 @@ static void dp_display_unbind(struct device *dev, struct device *master, dp_power_client_deinit(dp->power); dp_aux_unregister(dp->aux); + dp->drm_dev = NULL; + dp->aux->drm_dev = NULL; priv->dp[dp->id] = NULL; }
During msm initialize phase, dp_display_unbind() will be called to undo initializations had been done by dp_display_bind() previously if there is error happen at msm_drm_bind. Under this kind of circumstance, drm_device may not be populated completed which causes system crash at drm_dev_dbg(). This patch reset drm_dev to NULL so that following drm_dev_dbg() will not refer to any internal fields of drm_device to prevent system from crashing. Below are panic stack trace, [ 53.584904] Unable to handle kernel paging request at virtual address 0000000070018001 . [ 53.702212] Hardware name: Qualcomm Technologies, Inc. sc7280 CRD platform (rev5+) (DT) [ 53.710445] pstate: 20400009 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 53.717596] pc : string_nocheck+0x1c/0x64 [ 53.721738] lr : string+0x54/0x60 [ 53.725162] sp : ffffffc013d6b650 [ 53.728590] pmr_save: 000000e0 [ 53.731743] x29: ffffffc013d6b650 x28: 0000000000000002 x27: 0000000000ffffff [ 53.739083] x26: ffffffc013d6b710 x25: ffffffd07a066ae0 x24: ffffffd07a419f97 [ 53.746420] x23: ffffffd07a419f99 x22: ffffff81fef360d4 x21: ffffff81fef364d4 [ 53.753760] x20: ffffffc013d6b6f8 x19: ffffffd07a06683c x18: 0000000000000000 [ 53.761093] x17: 4020386678302f30 x16: 00000000000000b0 x15: ffffffd0797523c8 [ 53.768429] x14: 0000000000000004 x13: ffff0000ffffff00 x12: ffffffd07a066b2c [ 53.775780] x11: 0000000000000000 x10: 000000000000013c x9 : 0000000000000000 [ 53.783117] x8 : ffffff81fef364d4 x7 : 0000000000000000 x6 : 0000000000000000 [ 53.790445] x5 : 0000000000000000 x4 : ffff0a00ffffff04 x3 : ffff0a00ffffff04 [ 53.797783] x2 : 0000000070018001 x1 : ffffffffffffffff x0 : ffffff81fef360d4 [ 53.805136] Call trace: [ 53.807667] string_nocheck+0x1c/0x64 [ 53.811439] string+0x54/0x60 [ 53.814498] vsnprintf+0x374/0x53c [ 53.818009] pointer+0x3dc/0x40c [ 53.821340] vsnprintf+0x398/0x53c [ 53.824854] vscnprintf+0x3c/0x88 [ 53.828274] __trace_array_vprintk+0xcc/0x2d4 [ 53.832768] trace_array_printk+0x8c/0xb4 [ 53.836900] drm_trace_printf+0x74/0x9c [ 53.840875] drm_dev_dbg+0xfc/0x1b8 [ 53.844480] dp_pm_suspend+0x70/0xf8 [ 53.848164] dpm_run_callback+0x60/0x1a0 [ 53.852222] __device_suspend+0x304/0x3f4 [ 53.856363] dpm_suspend+0xf8/0x3a8 [ 53.859959] dpm_suspend_start+0x8c/0xc0 Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com> --- drivers/gpu/drm/msm/dp/dp_display.c | 2 ++ 1 file changed, 2 insertions(+)