[PATCH v2 5/6] drm/fb-helper: Schedule deferred-I/O worker after writing to framebuffer
Thomas Zimmermann
tzimmermann at suse.de
Wed Nov 23 08:41:58 UTC 2022
Hi
Am 23.11.22 um 09:28 schrieb Biju Das:
> Hi All,
>
> The below patch in Linux-next 20221123 is causing regression on Renesas {RZ/G2M, R-Car Gen-3}
> Platforms.
>
> Steps to reproduce:
>
> Use the arm64 defconfig to build the kernel and then boot the board.
>
> Is there any patch to fix the problem? I am happy to test.
A revert is already on the way. It should reach linux-next by next week.
Best regards
Thomas
>
> Logs:-
>
> [ 23.762999] Console: switching to colour frame buffer device 240x67
> [ 23.763128] ------------[ cut here ]------------
> [ 23.763133] WARNING: CPU: 3 PID: 278 at drivers/video/fbdev/core/fb_defio.c:340 fb_deferred_io_schedule_flush+0x38/0x40
> [ 23.763164] Modules linked in: cfg80211(+) rcar_du_drm(+) rcar_mipi_dsi rcar_cmm rcar_lvds snd_soc_hdmi_codec vsp1 dw_hdmi_cec dw_hdmi_i2s_audio rcar_fdp1 v4l2_mem2mem videobuf2_vmalloc rcar_dw_hdmi videobuf2_dma_contig dw_hdmi videobuf2_memops hci_uart videobuf2_v4l2 cec videobuf2_common crct10dif_ce btqca drm_display_helper snd_soc_audio_graph_card drm_dma_helper videodev snd_soc_simple_card_utils btbcm wlcore_sdio mc rcar_fcp display_connector bluetooth rcar_can drm_kms_helper ecdh_generic renesas_usb3 ecc snd_soc_rcar drm rfkill can_dev pwm_rcar usb_dmac renesas_usbhs phy_rcar_gen3_usb3 ipv6
> [ 23.763314] CPU: 3 PID: 278 Comm: systemd-udevd Not tainted 6.1.0-rc6-next-20221123-10432-g736b6d81d93c #314
> [ 23.763323] Hardware name: HopeRun HiHope RZ/G2M with sub board (DT)
> [ 23.763329] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 23.763337] pc : fb_deferred_io_schedule_flush+0x38/0x40
> [ 23.763344] lr : drm_fb_helper_sys_imageblit+0xa8/0xc4 [drm_kms_helper]
> [ 23.763474] sp : ffff80000ac5b3c0
> [ 23.763478] x29: ffff80000ac5b3c0 x28: 00000000ffffffff x27: 0000000000000010
> [ 23.763489] x26: ffff0005c1356000 x25: ffff0005c3a80800 x24: ffff0005c02528cc
> [ 23.763499] x23: 0000000000000000 x22: 0000000000000180 x21: 0000000000000008
> [ 23.763509] x20: 0000000000000010 x19: ffff0005c0252800 x18: 0000000000000001
> [ 23.763519] x17: 0000000000000004 x16: 0000000000000000 x15: 0000000000000000
> [ 23.763529] x14: 0000000000000020 x13: 0000000000000000 x12: 0000000000000020
> [ 23.763539] x11: 00000000ffffffff x10: 0000000000000001 x9 : 0000000000000001
> [ 23.763549] x8 : ffff0005c1356010 x7 : 0000000000000008 x6 : 0000000000000000
> [ 23.763559] x5 : 0000000000000190 x4 : 0000000000000180 x3 : 0000000000000008
> [ 23.763569] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0005c3a80800
> [ 23.763580] Call trace:
> [ 23.763585] fb_deferred_io_schedule_flush+0x38/0x40
> [ 23.763594] drm_fbdev_fb_imageblit+0x38/0x70 [drm_kms_helper]
> [ 23.763671] soft_cursor+0x15c/0x200
> [ 23.763680] bit_cursor+0x3ac/0x500
> [ 23.763687] fbcon_cursor+0xec/0x11c
> [ 23.763694] hide_cursor+0x3c/0xc0
> [ 23.763708] redraw_screen+0x128/0x240
> [ 23.763717] do_bind_con_driver.isra.0+0x2c8/0x39c
> [ 23.763726] do_take_over_console+0x140/0x200
> [ 23.763736] do_fbcon_takeover+0x6c/0xe4
> [ 23.763742] fbcon_fb_registered+0x1e4/0x1f0
> [ 23.763749] register_framebuffer+0x214/0x310
> [ 23.763761] __drm_fb_helper_initial_config_and_unlock+0x33c/0x534 [drm_kms_helper]
> [ 23.763837] drm_fb_helper_initial_config+0x4c/0x60 [drm_kms_helper]
> [ 23.763912] drm_fbdev_client_hotplug+0xc4/0x150 [drm_kms_helper]
> [ 23.763987] drm_fbdev_generic_setup+0x90/0x154 [drm_kms_helper]
> [ 23.764061] rcar_du_probe+0x154/0x184 [rcar_du_drm]
> [ 23.764103] platform_probe+0x68/0xe0
> [ 23.764115] really_probe+0xbc/0x2e0
> [ 23.764122] __driver_probe_device+0x78/0xe0
> [ 23.764129] driver_probe_device+0xd8/0x15c
> [ 23.764136] __driver_attach+0x94/0x19c
> [ 23.764143] bus_for_each_dev+0x70/0xd0
> [ 23.764149] driver_attach+0x24/0x30
> [ 23.764155] bus_add_driver+0x154/0x20c
> [ 23.764161] driver_register+0x78/0x130
> [ 23.764168] __platform_driver_register+0x28/0x34
> [ 23.764176] rcar_du_platform_driver_init+0x20/0x1000 [rcar_du_drm]
>
> Cheers,
> Biju
>
>> Subject: [PATCH v2 5/6] drm/fb-helper: Schedule deferred-I/O worker after
>> writing to framebuffer
>
>> Schedule the deferred-I/O worker instead of the damage worker after
>> writing to the fbdev framebuffer. The deferred-I/O worker then performs
>> the dirty-fb update. The fbdev emulation will initialize deferred I/O
>> for all drivers that require damage updates. It is therefore a valid
>> assumption that the deferred-I/O worker is present.
>
>> It would be possible to perform the damage handling directly from within
>> the write operation. But doing this could increase the overhead of the
>> write or interfere with a concurrently scheduled deferred-I/O worker.
>> Instead, scheduling the deferred-I/O worker with its regular delay of
>> 50 ms removes load off the write operation and allows the deferred-I/O
>> worker to handle multiple write operations that arrived during the delay
>> time window.
>
>> v2:
>> * keep drm_fb_helper_damage() (Daniel)
>> * use fb_deferred_io_schedule_flush() (Daniel)
>> * clarify comments (Daniel)
>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>> Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20221123/062f7bbc/attachment.sig>
More information about the dri-devel
mailing list