From: Quanyang Wang <quanyang.w...@windriver.com> The delay work should be initialize before enables interrupts, because the irq handler will call this delay work, or else there will be calltrace as below:
WARNING: CPU: 0 PID: 120 at kernel/workqueue.c:1627 __queue_delayed_work+0xd8/0x100 Modules linked in: CPU: 0 PID: 120 Comm: irq/44-fd4a0000 Not tainted 5.2.0-rc7-yoctodev-standard #75 Hardware name: ZynqMP ZCU102 Rev1.0 (DT) pstate: 00000085 (nzcv daIf -PAN -UAO) pc : __queue_delayed_work+0xd8/0x100 lr : queue_delayed_work_on+0xbc/0xc8 sp : ffffff801179bd00 x29: ffffff801179bd00 x28: 0000000000000000 x27: ffffff8010110000 x26: ffffff8011108000 x25: ffffffc87a04fed4 x24: 0000000000000000 x23: ffffffc87a826600 x22: 0000000000000000 x21: 0000000000000100 x20: ffffffc87a826600 x19: ffffffc879373a50 x18: ffffffffffffffff x17: 0000000000000000 x16: 0000000000000001 x15: ffffff80111085c8 x14: ffffffc878841085 x13: ffffffc878841084 x12: 0000000000000028 x11: 0101010101010101 x10: 0000000000000930 x9 : ffffff801179bd20 x8 : ffffffc878858990 x7 : 00000005a2ffd48c x6 : 0000000000001c19 x5 : 00000005a2ffd48c x4 : 000000486e667000 x3 : 0000000000000000 x2 : ffffff80100cdb08 x1 : 0000000000000000 x0 : ffffffc879373a70 Call trace: __queue_delayed_work+0xd8/0x100 queue_delayed_work_on+0xbc/0xc8 zynqmp_dp_irq_handler+0x110/0x140 irq_thread_fn+0x30/0x80 irq_thread+0x12c/0x1c8 kthread+0x130/0x138 ret_from_fork+0x10/0x1c ---[ end trace d28f065f559a242d ]--- Signed-off-by: Quanyang Wang <quanyang.w...@windriver.com> --- drivers/gpu/drm/xlnx/zynqmp_dp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/xlnx/zynqmp_dp.c b/drivers/gpu/drm/xlnx/zynqmp_dp.c index efad58bee0a4..c3c86dacac97 100644 --- a/drivers/gpu/drm/xlnx/zynqmp_dp.c +++ b/drivers/gpu/drm/xlnx/zynqmp_dp.c @@ -1711,13 +1711,14 @@ int zynqmp_dp_bind(struct device *dev, struct device *master, void *data) ret ? ret : 8); zynqmp_dp_update_bpp(dp); + INIT_DELAYED_WORK(&dp->hpd_work, zynqmp_dp_hpd_work_func); + /* This enables interrupts, so should be called after DRM init */ ret = zynqmp_dp_init_aux(dp); if (ret) { dev_err(dp->dev, "failed to initialize DP aux"); goto error_prop; } - INIT_DELAYED_WORK(&dp->hpd_work, zynqmp_dp_hpd_work_func); return 0; -- 2.17.1 -- _______________________________________________ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto