linux/drivers/gpu/drm
Thomas Zimmermann 56c134f7f1 fbdev: Track deferred-I/O pages in pageref struct
Store the per-page state for fbdev's deferred I/O in struct
fb_deferred_io_pageref. Maintain a list of pagerefs for the pages
that have to be written back to video memory. Update all affected
drivers.

As with pages before, fbdev acquires a pageref when an mmaped page
of the framebuffer is being written to. It holds the pageref in a
list of all currently written pagerefs until it flushes the written
pages to video memory. Writeback occurs periodically. After writeback
fbdev releases all pagerefs and builds up a new dirty list until the
next writeback occurs.

Using pagerefs has a number of benefits.

For pages of the framebuffer, the deferred I/O code used struct
page.lru as an entry into the list of dirty pages. The lru field is
owned by the page cache, which makes deferred I/O incompatible with
some memory pages (e.g., most notably DRM's GEM SHMEM allocator).
struct fb_deferred_io_pageref now provides an entry into a list of
dirty framebuffer pages, freeing lru for use with the page cache.

Drivers also assumed that struct page.index is the page offset into
the framebuffer. This is not true for DRM buffers, which are located
at various offset within a mapped area. struct fb_deferred_io_pageref
explicitly stores an offset into the framebuffer. struct page.index
is now only the page offset into the mapped area.

These changes will allow DRM to use fbdev deferred I/O without an
intermediate shadow buffer.

v3:
	* use pageref->offset for sorting
	* fix grammar in comment
v2:
	* minor fixes in commit message

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220429100834.18898-3-tzimmermann@suse.de
2022-05-03 16:04:22 +02:00
..
amd Linux 5.18-rc5 2022-05-03 16:08:48 +10:00
arm malidp: Fix NULL vs IS_ERR() checking 2022-04-28 16:08:19 +01:00
armada Driver core changes for 5.18-rc1 2022-03-28 12:41:28 -07:00
aspeed drm/aspeed: Add AST2600 chip support 2022-03-03 09:08:35 +10:30
ast drm/ast: Create the driver for ASPEED proprietory Display-Port 2022-05-03 16:04:03 +02:00
atmel-hlcdc
bridge drm/bridge: tfp410: Make tfp410_fini() return void 2022-05-02 16:51:13 +02:00
display drm/display: Select DP helper for DRM_DP_AUX_CHARDEV and DRM_DP_CEC 2022-04-29 10:11:08 +02:00
etnaviv dma-buf: specify usage while adding fences to dma_resv obj v7 2022-04-07 12:53:53 +02:00
exynos drm/display: Introduce a DRM display-helper module 2022-04-25 11:19:21 +02:00
fsl-dcu
gma500 drm: Rename dp/ to display/ 2022-04-25 11:17:45 +02:00
gud
hisilicon Driver core changes for 5.18-rc1 2022-03-28 12:41:28 -07:00
hyperv drm-misc-next for v5.18: 2022-02-25 05:50:18 +10:00
i2c
i810
i915 Linux 5.18-rc5 2022-05-03 16:08:48 +10:00
imx drm-misc-next for 5.19: 2022-04-12 17:44:27 +10:00
ingenic drm/ingenic: Add dw-hdmi driver specialization for jz4780 2022-04-11 16:04:39 +01:00
kmb drm-misc-next for v5.18: 2022-02-25 05:50:18 +10:00
lib drm/selftests: add drm buddy alloc range testcase 2022-02-23 10:44:43 +01:00
lima dma-buf: specify usage while adding fences to dma_resv obj v7 2022-04-07 12:53:53 +02:00
mcde Merge drm/drm-next into drm-misc-next 2022-04-05 11:06:58 +02:00
mediatek Merge drm/drm-next into drm-misc-next 2022-04-05 11:06:58 +02:00
meson Merge drm/drm-next into drm-misc-next 2022-04-05 11:06:58 +02:00
mga
mgag200 drm for 5.18-rc1 2022-03-24 16:19:43 -07:00
msm Linux 5.18-rc5 2022-05-03 16:08:48 +10:00
mxsfb drm: mxsfb: Obtain bus flags from bridge state 2022-04-26 00:03:21 +02:00
nouveau drm/nouveau: use drm_gem_plane_helper_prepare_fb 2022-05-02 09:02:54 +02:00
omapdrm Merge drm/drm-next into drm-misc-next 2022-04-05 11:06:58 +02:00
panel Merge drm/drm-next into drm-misc-next 2022-05-03 11:53:42 +02:00
panfrost dma-buf: specify usage while adding fences to dma_resv obj v7 2022-04-07 12:53:53 +02:00
pl111
qxl drm/qxl: Use TTM builtin resource manager debugfs code 2022-04-20 21:06:02 -04:00
r128
radeon Linux 5.18-rc5 2022-05-03 16:08:48 +10:00
rcar-du drm-misc-next for v5.18: 2022-03-04 13:41:57 +10:00
rockchip drm/rockchip: dw_hdmi: add regulator support 2022-05-03 12:56:05 +02:00
savage
scheduler drm/sched: use __string in tracepoints 2022-04-26 15:11:00 -04:00
selftests drm: Rename dp/ to display/ 2022-04-25 11:17:45 +02:00
shmobile
sis
solomon drm/ssd130x: Make ssd130x_remove() return void 2022-04-26 09:43:37 +02:00
sprd Driver core changes for 5.18-rc1 2022-03-28 12:41:28 -07:00
sti drm/sti: fix typos in comments 2022-04-07 11:31:52 +02:00
stm stm: ltdc: fix two incorrect NULL checks on list iterator 2022-04-07 10:26:59 +02:00
sun4i Merge drm/drm-next into drm-misc-next 2022-05-03 11:53:42 +02:00
tdfx
tegra drm/display: Move SCDC helpers into display-helper library 2022-04-25 11:19:37 +02:00
tidss drm/tidss: Soft Reset DISPC on startup 2022-04-19 15:09:45 +03:00
tilcdc drm/tilcdc: fix typos in comment 2022-04-25 10:18:52 +03:00
tiny Merge drm/drm-next into drm-misc-next 2022-04-05 11:06:58 +02:00
ttm drm/ttm: use kvcalloc() instead of kvmalloc_array() in ttm_tt v2 2022-04-21 14:47:30 +02:00
tve200
udl
v3d drm/v3d: Fix null pointer dereference of pointer perfmon 2022-04-26 11:55:28 -01:00
vboxvideo drm-misc-next for v5.18: 2022-02-25 05:50:18 +10:00
vc4 Merge drm/drm-next into drm-misc-next 2022-05-03 11:53:42 +02:00
vgem dma-buf: specify usage while adding fences to dma_resv obj v7 2022-04-07 12:53:53 +02:00
via
virtio dma-buf: specify usage while adding fences to dma_resv obj v7 2022-04-07 12:53:53 +02:00
vkms Merge tag 'drm-intel-gt-next-2022-02-17' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-next 2022-02-23 15:03:51 -05:00
vmwgfx fbdev: Track deferred-I/O pages in pageref struct 2022-05-03 16:04:22 +02:00
xen xen: branch for v5.18-rc1 2022-03-28 14:32:39 -07:00
xlnx drm/display: Introduce a DRM display-helper module 2022-04-25 11:19:21 +02:00
drm_agpsupport.c
drm_aperture.c
drm_atomic.c drm/atomic: Add atomic_print_state to private objects 2022-03-31 10:19:45 +02:00
drm_atomic_helper.c
drm_atomic_state_helper.c drm/object: Add default color encoding and range value at reset 2022-02-25 17:57:14 +01:00
drm_atomic_uapi.c drm: handle kernel fences in drm_gem_plane_helper_prepare_fb v2 2022-05-02 09:01:51 +02:00
drm_auth.c
drm_blend.c drm/blend: fix typo in the comment 2022-03-16 09:36:13 +01:00
drm_bridge.c
drm_bridge_connector.c drm/bridge_connector: enable HPD by default if supported 2022-03-04 19:34:24 +00:00
drm_buddy.c drm: add a check to verify the size alignment 2022-04-11 15:35:47 +02:00
drm_bufs.c
drm_cache.c drm for 5.18-rc1 2022-03-24 16:19:43 -07:00
drm_client.c
drm_client_modeset.c
drm_color_mgmt.c
drm_connector.c drm/display: Move HDMI helpers into display-helper module 2022-04-25 11:19:36 +02:00
drm_context.c
drm_crtc.c
drm_crtc_helper.c drm: Use drm_mode_copy() 2022-04-12 09:27:20 +03:00
drm_crtc_helper_internal.h
drm_crtc_internal.h
drm_damage_helper.c
drm_debugfs.c
drm_debugfs_crc.c
drm_displayid.c
drm_dma.c
drm_drv.c
drm_dumb_buffers.c
drm_edid.c drm/edid: drop kernel-doc for static functions 2022-04-29 14:04:55 +03:00
drm_edid_load.c
drm_encoder.c
drm_encoder_slave.c
drm_fb_cma_helper.c
drm_fb_helper.c fbdev: Track deferred-I/O pages in pageref struct 2022-05-03 16:04:22 +02:00
drm_file.c
drm_flip_work.c
drm_format_helper.c drm/format-helper: Add RGB565-to-XRGB8888 conversion 2022-04-27 08:52:06 +02:00
drm_fourcc.c
drm_framebuffer.c
drm_gem.c dma-buf: add enum dma_resv_usage v4 2022-04-07 12:53:53 +02:00
drm_gem_atomic_helper.c drm: handle kernel fences in drm_gem_plane_helper_prepare_fb v2 2022-05-02 09:01:51 +02:00
drm_gem_cma_helper.c Linux 5.17-rc6 2022-02-28 14:57:14 +10:00
drm_gem_framebuffer_helper.c
drm_gem_shmem_helper.c drm-misc-next for v5.18: 2022-02-25 05:50:18 +10:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c Merge drm/drm-next into drm-misc-next 2022-04-05 11:06:58 +02:00
drm_hashtab.c
drm_internal.h
drm_ioc32.c
drm_ioctl.c
drm_irq.c
drm_kms_helper_common.c
drm_lease.c
drm_legacy.h
drm_legacy_misc.c
drm_lock.c
drm_managed.c
drm_memory.c
drm_mipi_dbi.c
drm_mipi_dsi.c drm/display: Move DSC header and helpers into display-helper module 2022-04-25 11:19:36 +02:00
drm_mm.c
drm_mode_config.c
drm_mode_object.c drm/object: Add drm_object_property_get_default_value() function 2022-02-25 17:55:42 +01:00
drm_modes.c drm/modes: Make width-mm/height-mm check in of_get_drm_panel_display_mode() mandatory 2022-04-24 23:54:05 +02:00
drm_modeset_helper.c
drm_modeset_lock.c
drm_nomodeset.c
drm_of.c Revert "drm: of: Lookup if child node has panel or bridge" 2022-04-21 09:18:08 +02:00
drm_panel.c
drm_panel_orientation_quirks.c
drm_pci.c
drm_plane.c drm/plane: Move range check for format_count earlier 2022-04-28 16:13:04 +01:00
drm_plane_helper.c
drm_prime.c
drm_print.c
drm_privacy_screen.c drm-misc-next for v5.18: 2022-02-25 05:50:18 +10:00
drm_privacy_screen_x86.c
drm_probe_helper.c
drm_property.c
drm_rect.c
drm_scatter.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c
drm_syncobj.c
drm_sysfs.c
drm_trace.h
drm_trace_points.c
drm_vblank.c drm: Use drm_mode_copy() 2022-04-12 09:27:20 +03:00
drm_vblank_work.c
drm_vm.c
drm_vma_manager.c
drm_writeback.c
Kconfig drm/display: Move HDMI helpers into display-helper module 2022-04-25 11:19:36 +02:00
Makefile drm/display: Move SCDC helpers into display-helper library 2022-04-25 11:19:37 +02:00