linux/drivers/gpu/drm
Huacai Chen 4408b59eea drm/amd/display: Protect FPU in dml21_copy()
Commit 7da55c27e7 ("drm/amd/display: Remove incorrect FP context
start") removes the FP context protection of dml2_create(), and it said
"All the DC_FP_START/END should be used before call anything from DML2".

However, dml21_copy() are not protected from their callers, causing such
errors:

 do_fpu invoked from kernel context![#1]:
 CPU: 0 UID: 0 PID: 240 Comm: kworker/0:5 Not tainted 6.14.0-rc6+ #1
 Workqueue: events work_for_cpu_fn
 pc ffff80000318bd2c ra ffff80000315750c tp 9000000105910000 sp 9000000105913810
 a0 0000000000000000 a1 0000000000000002 a2 900000013140d728 a3 900000013140d720
 a4 0000000000000000 a5 9000000131592d98 a6 0000000000017ae8 a7 00000000001312d0
 t0 9000000130751ff0 t1 ffff800003790000 t2 ffff800003790000 t3 9000000131592e28
 t4 000000000004c6a8 t5 00000000001b7740 t6 0000000000023e38 t7 0000000000249f00
 t8 0000000000000002 u0 0000000000000000 s9 900000012b010000 s0 9000000131400000
 s1 9000000130751fd8 s2 ffff800003408000 s3 9000000130752c78 s4 9000000131592da8
 s5 9000000131592120 s6 9000000130751ff0 s7 9000000131592e28 s8 9000000131400008
    ra: ffff80000315750c dml2_top_soc15_initialize_instance+0x20c/0x300 [amdgpu]
   ERA: ffff80000318bd2c mcg_dcn4_build_min_clock_table+0x14c/0x600 [amdgpu]
  CRMD: 000000b0 (PLV0 -IE -DA +PG DACF=CC DACM=CC -WE)
  PRMD: 00000004 (PPLV0 +PIE -PWE)
  EUEN: 00000000 (-FPE -SXE -ASXE -BTE)
  ECFG: 00071c1d (LIE=0,2-4,10-12 VS=7)
 ESTAT: 000f0000 [FPD] (IS= ECode=15 EsubCode=0)
  PRID: 0014d010 (Loongson-64bit, Loongson-3C6000/S)
 Process kworker/0:5 (pid: 240, threadinfo=00000000f1700428, task=0000000020d2e962)
 Stack : 0000000000000000 0000000000000000 0000000000000000 9000000130751fd8
         9000000131400000 ffff8000031574e0 9000000130751ff0 0000000000000000
         9000000131592e28 0000000000000000 0000000000000000 0000000000000000
         0000000000000000 0000000000000000 0000000000000000 0000000000000000
         0000000000000000 0000000000000000 0000000000000000 0000000000000000
         0000000000000000 0000000000000000 0000000000000000 f9175936df5d7fd2
         900000012b00ff08 900000012b000000 ffff800003409000 ffff8000034a1780
         90000001019634c0 900000012b000010 90000001307beeb8 90000001306b0000
         0000000000000001 ffff8000031942b4 9000000130780000 90000001306c0000
         9000000130780000 ffff8000031c276c 900000012b044bd0 ffff800003408000
         ...
 Call Trace:
 [<ffff80000318bd2c>] mcg_dcn4_build_min_clock_table+0x14c/0x600 [amdgpu]
 [<ffff800003157508>] dml2_top_soc15_initialize_instance+0x208/0x300 [amdgpu]
 [<ffff8000031942b0>] dml21_create_copy+0x30/0x60 [amdgpu]
 [<ffff8000031c2768>] dc_state_create_copy+0x68/0xe0 [amdgpu]
 [<ffff800002e98ea0>] amdgpu_dm_init+0x8c0/0x2060 [amdgpu]
 [<ffff800002e9a658>] dm_hw_init+0x18/0x60 [amdgpu]
 [<ffff800002b0a738>] amdgpu_device_init+0x1938/0x27e0 [amdgpu]
 [<ffff800002b0ce80>] amdgpu_driver_load_kms+0x20/0xa0 [amdgpu]
 [<ffff800002b008f0>] amdgpu_pci_probe+0x1b0/0x580 [amdgpu]
 [<9000000003c7eae4>] local_pci_probe+0x44/0xc0
 [<90000000032f2b18>] work_for_cpu_fn+0x18/0x40
 [<90000000032f5da0>] process_one_work+0x160/0x300
 [<90000000032f6718>] worker_thread+0x318/0x440
 [<9000000003301b8c>] kthread+0x12c/0x220
 [<90000000032b1484>] ret_from_kernel_thread+0x8/0xa4

Unfortunately, protecting dml21_copy() out of DML2 causes "sleeping
function called from invalid context", so protect them with DC_FP_START()
and DC_FP_END() inside.

Fixes: 7da55c27e7 ("drm/amd/display: Remove incorrect FP context start")
Cc: stable@vger.kernel.org
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Reviewed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2025-04-07 14:34:32 -04:00
..
adp drm: adp: Remove unnecessary print function dev_err() 2025-03-05 08:39:12 -05:00
amd drm/amd/display: Protect FPU in dml21_copy() 2025-04-07 14:34:32 -04:00
arm Merge drm/drm-next into drm-misc-next 2025-02-18 07:43:43 +01:00
armada drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
aspeed drm/aspeed: move to devm_platform_ioremap_resource() usage 2025-02-26 15:27:06 +01:00
ast drm/ast: cursor: Move implementation to separate source file 2025-02-20 08:38:34 +01:00
atmel-hlcdc drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
bridge drm/bridge: Fix spelling mistake "gettin" -> "getting" 2025-03-03 10:41:29 +01:00
ci drm/ci: update expectation files 2025-02-05 10:10:51 -03:00
clients drm/log: select CONFIG_FONT_SUPPORT 2024-12-12 18:26:32 +01:00
display drm-misc-next for v6.15: 2025-02-28 12:36:01 +10:00
etnaviv drm/sched: Use struct for drm_sched_init() params 2025-02-12 11:59:52 +01:00
exynos drm/connector: make mode_valid take a const struct drm_display_mode 2025-01-07 12:45:19 +02:00
fsl-dcu drm/connector: make mode_valid take a const struct drm_display_mode 2025-01-07 12:45:19 +02:00
gma500 drm/gma500: fix inconsistent indenting warning 2025-03-06 10:29:31 +01:00
gud drm: remove driver date from struct drm_driver and all drivers 2024-12-05 12:35:42 +02:00
hisilicon drm/hisilicon/hibmc: select CONFIG_DRM_DISPLAY_DP_HELPER 2025-02-09 03:56:34 +02:00
hyperv drm: remove driver date from struct drm_driver and all drivers 2024-12-05 12:35:42 +02:00
i915 Merge tag 'drm-intel-gt-next-2025-03-12' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-next 2025-03-25 08:21:07 +10:00
imagination Linux 6.14-rc6 2025-03-12 09:43:12 +10:00
imx drm/connector: make mode_valid take a const struct drm_display_mode 2025-01-07 12:45:19 +02:00
ingenic drm/bridge: Pass full state to atomic_disable 2025-02-19 16:59:12 +01:00
kmb drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
lib
lima drm/sched: Use struct for drm_sched_init() params 2025-02-12 11:59:52 +01:00
logicvc drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
loongson drm/atomic: Let drivers decide which planes to async flip 2025-02-14 00:54:29 +02:00
mcde drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
mediatek Mediatek DRM Next for Linux 6.15 2025-03-14 14:28:56 +10:00
meson drm/bridge: Pass full state to atomic_disable 2025-02-19 16:59:12 +01:00
mgag200 drm/mgag200: Added support for the new device G200eH5 2025-02-11 10:53:53 +01:00
msm drm/msm/dpu: drop wb2_formats_rgb 2025-03-08 02:16:49 +02:00
mxsfb drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
nouveau Linux 6.14-rc6 2025-03-12 09:43:12 +10:00
omapdrm drm/bridge: Pass full state to atomic_disable 2025-02-19 16:59:12 +01:00
panel drm/panel: fix Visionox RM692E5 dependencies 2025-03-05 19:52:02 +01:00
panfrost drm/sched: Use struct for drm_sched_init() params 2025-02-12 11:59:52 +01:00
panthor drm/panthor: Clean up FW version information display 2025-03-05 14:15:04 +00:00
pl111 drm: remove driver date from struct drm_driver and all drivers 2024-12-05 12:35:42 +02:00
qxl drm/connector: make mode_valid take a const struct drm_display_mode 2025-01-07 12:45:19 +02:00
radeon drm/radeon/uvd: Replace nested max() with single max3() 2025-03-19 15:51:40 -04:00
renesas drm/bridge: Pass full state to atomic_disable 2025-02-19 16:59:12 +01:00
rockchip drm/rockchip: lvds: lower log severity for missing pinctrl settings 2025-03-04 16:59:58 +01:00
scheduler Linux 6.14-rc6 2025-03-12 09:43:12 +10:00
solomon drm/ssd130x: ensure ssd132x pitch is correct 2025-01-16 10:48:47 +01:00
sprd drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
sti drm/connector: make mode_valid take a const struct drm_display_mode 2025-01-07 12:45:19 +02:00
stm drm/stm: move to devm_platform_ioremap_resource() usage 2025-02-26 15:27:07 +01:00
sun4i drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
tegra drm/atomic: Let drivers decide which planes to async flip 2025-02-14 00:54:29 +02:00
tests drm/format-helper: Add conversion from XRGB8888 to BGR888 2025-03-03 16:13:33 +01:00
tidss drm/tidss: Fix typos 2025-01-24 09:41:01 +02:00
tilcdc drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
tiny Short summary of fixes pull: 2025-03-24 17:52:28 +10:00
ttm drm/ttm: Add helpers for shrinking 2025-03-05 17:08:59 +01:00
tve200 drm-misc-next for 6.14: 2024-12-13 08:48:09 +10:00
udl drm: remove driver date from struct drm_driver and all drivers 2024-12-05 12:35:42 +02:00
v3d drm/v3d: Add clock handling 2025-02-12 09:55:50 -03:00
vboxvideo drm/vboxvideo: Remove unused hgsmi_cursor_position 2025-02-28 09:05:10 +01:00
vc4 drm/vc4: hdmi: Fix some NULL vs IS_ERR() bugs 2025-03-03 14:25:14 +01:00
vgem drm: remove driver date from struct drm_driver and all drivers 2024-12-05 12:35:42 +02:00
virtio drm/virtio: Add drm_panic support 2025-02-09 20:36:51 +03:00
vkms Linux 6.14-rc6 2025-03-12 09:43:12 +10:00
vmwgfx Merge drm/drm-next into drm-misc-next 2025-02-06 13:47:32 +01:00
xe drm/xe: Use correct type width for alignment in fb pinning code 2025-03-12 20:56:58 -07:00
xen drm: remove driver date from struct drm_driver and all drivers 2024-12-05 12:35:42 +02:00
xlnx drm/bridge: Pass full state to atomic_disable 2025-02-19 16:59:12 +01:00
drm_atomic_helper.c drm/atomic-helper: Add a note in drm_atomic_helper_reset_crtc() kernel-doc 2025-02-21 10:57:21 +01:00
drm_atomic_state_helper.c
drm_atomic_uapi.c drm/atomic: Let drivers decide which planes to async flip 2025-02-14 00:54:29 +02:00
drm_atomic.c
drm_auth.c
drm_blend.c
drm_bridge.c drm/bridge: Change parameter name of drm_atomic_bridge_chain_enable() 2025-02-19 16:59:20 +01:00
drm_buddy.c drm/buddy: Add a testcase to verify the multiroot fini 2025-01-14 20:43:19 +05:30
drm_cache.c
drm_client_event.c drm/client: Send pending hotplug events after resume 2025-03-05 21:48:49 +01:00
drm_client_modeset.c drm/client: Handle tiled displays better 2025-01-21 11:41:05 +01:00
drm_client.c
drm_color_mgmt.c
drm_connector.c Linux 6.13 2025-01-23 14:42:21 +01:00
drm_crtc_helper_internal.h drm/connector: make mode_valid take a const struct drm_display_mode 2025-01-07 12:45:19 +02:00
drm_crtc_helper.c
drm_crtc_internal.h
drm_crtc.c drm: add clone mode check for CRTC 2025-01-08 01:39:58 +02:00
drm_damage_helper.c drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() 2025-03-03 14:45:40 +02:00
drm_debugfs_crc.c
drm_debugfs.c drm/debugfs: fix printk format for bridge index 2025-02-17 14:17:53 +01:00
drm_displayid_internal.h
drm_displayid.c
drm_draw_internal.h drm/panic: Move drawing functions to drm_draw 2024-12-10 14:36:41 +01:00
drm_draw.c drm/panic: Move drawing functions to drm_draw 2024-12-10 14:36:41 +01:00
drm_drv.c drm: Introduce device wedged event 2025-02-13 12:15:43 -05:00
drm_dumb_buffers.c
drm_edid_load.c
drm_edid.c drm/connector: add mutex to protect ELD from concurrent access 2024-12-16 18:02:07 +02:00
drm_eld.c
drm_encoder.c
drm_exec.c
drm_fb_dma_helper.c drm/fb-dma-helper: Test for imported buffers with drm_gem_is_imported() 2025-03-06 08:59:17 +01:00
drm_fb_helper.c drm/fb-helper: Remove struct drm_fb_helper.fb_probe 2025-03-05 21:48:50 +01:00
drm_fbdev_dma.c drm/fbdev-dma: Add shadow buffering for deferred I/O 2025-02-27 09:37:55 +01:00
drm_fbdev_shmem.c
drm_fbdev_ttm.c
drm_file.c drm/file: Add fdinfo helper for printing regions with prefix 2025-02-07 15:23:36 +01:00
drm_flip_work.c
drm_format_helper.c drm/format-helper: Add conversion from XRGB8888 to BGR888 2025-03-03 16:13:33 +01:00
drm_fourcc.c
drm_framebuffer.c - The series "resource: A couple of cleanups" from Andy Shevchenko 2024-11-25 16:09:48 -08:00
drm_gem_atomic_helper.c
drm_gem_dma_helper.c drm/gem-dma: Use dma_buf from GEM object instance 2025-03-06 08:59:01 +01:00
drm_gem_framebuffer_helper.c drm/gem-framebuffer: Use dma_buf from GEM object instance 2025-03-06 08:59:14 +01:00
drm_gem_shmem_helper.c drm/gem-shmem: Use dma_buf from GEM object instance 2025-03-06 08:59:07 +01:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c
drm_gem.c drm/gem: Test for imported GEM buffers with helper 2025-03-06 08:58:27 +01:00
drm_gpusvm.c drm/gpusvm: Fix kernel-doc 2025-03-12 20:53:47 -07:00
drm_gpuvm.c
drm_internal.h
drm_ioc32.c
drm_ioctl.c
drm_kms_helper_common.c
drm_lease.c
drm_managed.c drm/managed: Add DRM-managed alloc_ordered_workqueue 2025-01-21 10:32:31 +01:00
drm_mipi_dbi.c drm/mipi-dbi: Test for imported buffers with drm_gem_is_imported() 2025-03-06 08:59:20 +01:00
drm_mipi_dsi.c drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends 2025-03-04 17:00:24 +02:00
drm_mm.c
drm_mode_config.c drm/connector: Add FIXME for GETRESOURCES ioctl wrt. uninited connectors 2024-12-17 15:43:04 +02:00
drm_mode_object.c
drm_modes.c Linux 6.13-rc6 2025-01-10 14:24:17 +10:00
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c drm: of: drm_of_find_panel_or_bridge: move misplaced comment 2025-02-17 14:17:55 +01:00
drm_panel_backlight_quirks.c
drm_panel_orientation_quirks.c drm: panel-orientation-quirks: Add quirk for OneXPlayer Mini (Intel) 2025-02-17 09:19:07 +01:00
drm_panel.c drm/bridge: panel: forbid initializing a panel with unknown connector type 2025-02-17 14:17:59 +01:00
drm_panic_qr.rs drm/panic: Better binary encoding in QR code 2025-02-07 17:52:09 +01:00
drm_panic.c drm/panic: Better binary encoding in QR code 2025-02-07 17:52:09 +01:00
drm_pci.c
drm_plane_helper.c
drm_plane.c
drm_prime.c drm/prime: Use dma_buf from GEM object instance 2025-03-06 08:59:36 +01:00
drm_print.c drm/print: add drm_print_hex_dump() 2024-12-10 14:08:40 +02:00
drm_privacy_screen_x86.c
drm_privacy_screen.c
drm_probe_helper.c drm/probe-helper: Call connector detect functions in single helper 2025-01-14 11:20:49 +01:00
drm_property.c
drm_rect.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c
drm_suballoc.c
drm_syncobj.c
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vblank_work.c treewide: Introduce kthread_run_worker[_on_cpu]() 2025-01-08 18:15:03 +01:00
drm_vblank.c
drm_vma_manager.c
drm_writeback.c drm: writeback: Fix kernel doc name 2025-02-20 15:02:09 +01:00
Kconfig UAPI Changes: 2025-03-11 10:26:17 +10:00
Makefile UAPI Changes: 2025-03-11 10:26:17 +10:00