[PATCH v2 5/6] drm/fb-helper: Schedule deferred-I/O worker after writing to framebuffer

Biju Das biju.das.jz at bp.renesas.com
Wed Nov 23 08:28:51 UTC 2022


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.

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>


More information about the dri-devel mailing list