[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