mirror-linux/drivers/gpu/drm
Maíra Canal c91acda3a3
drm/gem: Check for valid formats
Currently, drm_gem_fb_create() doesn't check if the pixel format is
supported, which can lead to the acceptance of invalid pixel formats
e.g. the acceptance of invalid modifiers. Therefore, add a check for
valid formats on drm_gem_fb_create().

Note that this check is only valid for atomic drivers, because, for
non-atomic drivers, checking drm_any_plane_has_format() is not
possible since the format list for the primary plane is fake, and we'd
therefore reject valid formats.

Adding this check to drm_gem_fb_create() will guarantee that the
igt@kms_addfb_basic@addfb25-bad-modifier IGT test passes for drivers
using this callback.

This commit is a recapture of a series sent a while ago. Initially,
I sent a patch [1] similar to this one in which I introduced the
format check to drm_gem_fb_create().

Based on the feedback on the patch, I placed the check inside
framebuffer_check() [2] so that it wouldn't be needed to hit any
driver-specific code path when the check fails. Therefore, we could
remove the check from the specific drivers (i915, amdgpu, and vmwgfx).

But, with some new feedback, it was shown that introducing this check
inside framebuffer_check() is problematic for the i915 driver [3].
For the i915 driver, in the legacy case, in which we don't get the
modifier from the userspace, i915's fb_create hook computes the right
modifier, which isn't necessarily linear.  Therefore, if we check the
modifier before that point, we might get wrong answers.

So, I kept the check inside the i915 driver and removed the check from
amdgpu and vmwgfx [4]. But, this yet hasn't solved the i915 problem [5].

As we cannot add the check inside framebuffer_check() without
affecting the i915 behavior, this commit went back to the original
patch. This way we can guarantee a more uniform behavior from the
drivers that use the drm_gem_fb_create() callback.

[1] https://lore.kernel.org/dri-devel/20230103125322.855089-1-mcanal@igalia.com/T/
[2] https://lore.kernel.org/dri-devel/20230109105807.18172-1-mcanal@igalia.com/T/
[3] https://lore.kernel.org/dri-devel/Y8AAdW2y7zN7DCUZ@intel.com/
[4] https://lore.kernel.org/dri-devel/20230113112743.188486-1-mcanal@igalia.com/T/
[5] https://lore.kernel.org/dri-devel/Y8FXWvEhO7GCRKVJ@intel.com/

Signed-off-by: Maíra Canal <mcanal@igalia.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Maíra Canal <mairacanal@riseup.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20230412142923.136707-1-mcanal@igalia.com
2023-04-19 20:19:27 -03:00
..
amd Merge tag 'amd-drm-next-6.4-2023-03-31' of https://gitlab.freedesktop.org/agd5f/linux into drm-next 2023-04-03 10:25:45 +02:00
arm drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
armada drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
aspeed drm/aspeed: Use GEM DMA fbdev emulation 2023-03-14 17:07:47 +01:00
ast drm/ast: Use drm_aperture_remove_conflicting_pci_framebuffers 2023-04-04 14:55:50 +02:00
atmel-hlcdc drm/atmel-hlcdc: Use GEM DMA fbdev emulation 2023-03-14 17:07:47 +01:00
bridge Merge drm/drm-next into drm-misc-next 2023-04-16 20:11:53 +02:00
display drm/scdc-helper: Pimp SCDC debugs 2023-04-06 01:30:12 +03:00
etnaviv - Daniel Verkamp has contributed a memfd series ("mm/memfd: add 2023-02-23 17:09:35 -08:00
exynos drm: bridge: Generalize Exynos-DSI driver into a Samsung DSIM bridge 2023-03-28 09:05:41 +09:00
fsl-dcu drm/fsl-dcu: Use GEM DMA fbdev emulation 2023-03-14 17:07:48 +01:00
gma500 video/aperture: Provide a VGA helper for gma500 and internal use 2023-04-16 14:18:10 +02:00
gud drm/gud: use new debugfs device-centered functions 2023-01-06 16:15:08 -03:00
hisilicon drm: Only select I2C_ALGOBIT for drivers that actually need it 2023-01-10 11:15:44 +01:00
hyperv drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
i2c drm-misc-next for $kernel-version: 2023-01-24 17:36:29 +01:00
i915 drm/i915: disable sampler indirect state in bindless heap 2023-04-12 11:36:09 +03:00
imx drm/imx/lcdc: fix a NULL vs IS_ERR() bug in probe 2023-04-15 23:48:48 +02:00
ingenic drm/ingenic: Remove unnecessary include statements for drm_crtc_helper.h 2023-01-18 09:25:31 +01:00
kmb drm/kmb: Use GEM DMA fbdev emulation 2023-03-14 17:07:48 +01:00
lib
lima Revert "drm/lima: add usage counting method to ctx_mgr" 2023-04-05 08:40:47 +08:00
logicvc drm/logicvc: Use GEM DMA fbdev emulation 2023-03-14 17:07:48 +01:00
mcde drm/mcde: Use GEM DMA fbdev emulation 2023-03-14 17:07:49 +01:00
mediatek drm/mediatek: dp: Change the aux retries times when receiving AUX_DEFER 2023-04-03 16:49:49 +00:00
meson drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
mgag200 drm/mgag200: Implement struct drm_plane_helper_funcs.atomic_enable 2023-02-20 15:20:41 +01:00
msm Merge drm/drm-next into drm-misc-next 2023-04-16 20:11:53 +02:00
mxsfb drm/mxsfb: Use GEM DMA fbdev emulation 2023-03-14 17:07:48 +01:00
nouveau drm/nouveau/therm: Move an assignment statement behind a null pointer check in two functions 2023-04-17 19:08:04 +02:00
omapdrm drm/omapdrm: Implement fbdev emulation as in-kernel client 2023-04-06 15:50:10 +03:00
panel drm/panel: nt36523: Add Lenovo J606F panel 2023-04-17 17:27:27 +02:00
panfrost drm/panfrost: Add basic support for speed binning 2023-03-31 11:44:11 +02:00
pl111 drm/pl111: Use GEM DMA fbdev emulation 2023-03-14 17:07:49 +01:00
qxl drm/qxl: handle NULL bo->resource in move callback 2023-02-23 10:29:14 +01:00
radeon drm/radeon: Only build fbdev if DRM_FBDEV_EMULATION is set 2023-03-31 11:18:42 -04:00
rcar-du drm: rcar-du: Fix a NULL vs IS_ERR() bug 2023-03-25 22:38:10 +02:00
rockchip drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
scheduler drm/scheduler: set entity to NULL in drm_sched_entity_pop_job() 2023-04-18 22:09:41 -04:00
shmobile drm/shmobile: Remove unnecessary include statements for drm_crtc_helper.h 2023-01-18 09:25:32 +01:00
solomon drm next for 6.3-rc1 2023-02-22 18:28:03 -08:00
sprd drm/sprd: Remove unnecessary include statements for drm_crtc_helper.h 2023-01-18 09:25:32 +01:00
sti drm/sti: Use GEM DMA fbdev emulation 2023-03-14 17:07:48 +01:00
stm drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
sun4i drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
tegra Merge drm/drm-next into drm-misc-next 2023-04-16 20:11:53 +02:00
tests drm/format-helper: Use drm_format_info_min_pitch() in tests helper 2023-03-17 16:59:54 +01:00
tidss drm/tidss: Use GEM DMA fbdev emulation 2023-03-14 17:07:49 +01:00
tilcdc drm/tilcdc: Use GEM DMA fbdev emulation 2023-03-14 17:07:49 +01:00
tiny drm: Use of_property_read_bool() for boolean properties 2023-03-30 13:46:07 -05:00
ttm drm/ttm: Make the call to ttm_tt_populate() interruptible when faulting 2023-04-06 10:01:42 +02:00
tve200 drm/tve200: Use GEM DMA fbdev emulation 2023-03-14 17:07:49 +01:00
udl drm/udl: Remove unnecessary include statements for drm_crtc_helper.h 2023-01-18 09:25:32 +01:00
v3d drm/v3d: Use drm_sched_job_add_syncobj_dependency() 2023-02-24 17:23:43 -03:00
vboxvideo drm/vboxvideo: Remove unnecessary include statements for drm_crtc_helper.h 2023-01-18 09:25:32 +01:00
vc4 drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
vgem drm/vgem: Drop struct drm_vgem_gem_object 2023-03-20 08:14:27 -03:00
virtio Linux 6.3-rc4 2023-03-29 16:00:23 +02:00
vkms drm/vkms: Use drmm_mode_config_init() 2023-04-12 10:38:34 -03:00
vmwgfx drm/vmwgfx: remove unused vmw_overlay function 2023-04-11 13:48:55 -04:00
xen mm: replace vma->vm_flags direct modifications with modifier calls 2023-02-09 16:51:39 -08:00
xlnx drm/xlnx: Use GEM DMA fbdev emulation 2023-03-14 17:07:49 +01:00
Kconfig Merge tag 'drm-misc-next-2023-03-07' of git://anongit.freedesktop.org/drm/drm-misc into drm-next 2023-03-14 12:18:54 +10:00
Makefile drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers 2023-03-14 17:07:47 +01:00
drm_agpsupport.c
drm_aperture.c video/aperture: Drop primary argument 2023-04-16 14:17:55 +02:00
drm_atomic.c Merge remote-tracking branch 'drm/drm-next' into msm-next 2023-03-20 10:31:25 -07:00
drm_atomic_helper.c drm/atomic-helper: Don't set deadline for modesets 2023-04-06 07:33:25 +02:00
drm_atomic_state_helper.c drm/atomic-helper: fix kernel-doc problems 2023-01-19 09:16:04 +01:00
drm_atomic_uapi.c
drm_auth.c
drm_blend.c drm/drm_blend: Remove usage of deprecated DRM_DEBUG_ATOMIC 2023-01-10 16:14:13 +01:00
drm_bridge.c
drm_bridge_connector.c drm/bridge_connector: drop drm_bridge_connector_en/disable_hpd() 2023-01-05 15:08:10 +01:00
drm_buddy.c drm: Optimize drm buddy top-down allocation method 2023-01-12 13:50:28 +01:00
drm_bufs.c drm/nouveau: Remove support for legacy contexts/buffers 2023-01-13 09:22:02 +01:00
drm_cache.c
drm_client.c drm next for 6.3-rc1 2023-02-22 18:28:03 -08:00
drm_client_modeset.c
drm_color_mgmt.c
drm_connector.c drm: fix typo in margin connector properties docs 2023-03-18 15:59:37 +01:00
drm_context.c drm/nouveau: Remove support for legacy contexts/buffers 2023-01-13 09:22:02 +01:00
drm_crtc.c
drm_crtc_helper.c
drm_crtc_helper_internal.h
drm_crtc_internal.h
drm_damage_helper.c
drm_debugfs.c drm: Track clients by tgid and not tid 2023-03-15 14:03:00 +01:00
drm_debugfs_crc.c
drm_displayid.c drm/displayid: provide access to DisplayID version and primary use case 2023-02-27 02:58:38 +03:00
drm_dma.c
drm_drv.c drm: remove drm_dev_set_unique 2023-03-22 10:24:47 +01:00
drm_dumb_buffers.c drm: remove dumb_destroy callback 2023-02-10 12:19:27 +01:00
drm_edid.c Linux 6.3-rc4 2023-03-29 16:00:23 +02:00
drm_edid_load.c
drm_encoder.c
drm_encoder_slave.c
drm_fb_dma_helper.c
drm_fb_helper.c drm/fb-helper: fix input validation gaps in check_var 2023-04-05 22:43:08 +02:00
drm_fbdev_dma.c drm/fb-helper: Consolidate CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM 2023-03-22 13:32:52 +01:00
drm_fbdev_generic.c drm/fbdev-generic: Rename symbols 2023-03-22 13:32:54 +01:00
drm_file.c drm: Track clients by tgid and not tid 2023-03-15 14:03:00 +01:00
drm_flip_work.c
drm_format_helper.c drm/format-helper: Support the AB24/XB24 formats 2023-01-23 15:02:41 +01:00
drm_fourcc.c
drm_framebuffer.c
drm_gem.c Merge tag 'drm-msm-next-2023-04-10' of https://gitlab.freedesktop.org/drm/msm into drm-next 2023-04-11 12:21:50 +02:00
drm_gem_atomic_helper.c
drm_gem_dma_helper.c - Daniel Verkamp has contributed a memfd series ("mm/memfd: add 2023-02-23 17:09:35 -08:00
drm_gem_framebuffer_helper.c drm/gem: Check for valid formats 2023-04-19 20:19:27 -03:00
drm_gem_shmem_helper.c Linux 6.3-rc4 2023-03-29 16:00:23 +02:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c drm/gem-vram: handle NULL bo->resource in move callback 2023-02-23 10:29:00 +01:00
drm_hashtab.c
drm_internal.h drm: remove dumb_destroy callback 2023-02-10 12:19:27 +01:00
drm_ioc32.c drm: Replace DRM_DEBUG with drm_dbg_core in file and ioctl handling 2023-01-03 18:20:57 +01:00
drm_ioctl.c drm: Replace DRM_DEBUG with drm_dbg_core in file and ioctl handling 2023-01-03 18:20:57 +01:00
drm_irq.c
drm_kms_helper_common.c
drm_lease.c drm: Remove unnecessary include statements for drm_crtc_helper.h 2023-01-18 09:25:30 +01:00
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: Use of_property_present() for testing DT property presence 2023-03-28 14:55:33 -05:00
drm_mm.c
drm_mode_config.c
drm_mode_object.c
drm_modes.c drm: Fix comment on mode parsing 2023-02-20 14:56:52 +01:00
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c drm: of: Add drm_of_get_dsi_bus helper function 2023-01-27 09:39:21 +01:00
drm_panel.c
drm_panel_orientation_quirks.c drm: panel-orientation-quirks: Add quirk for Lenovo Yoga Book X90F 2023-03-21 11:40:04 +01:00
drm_pci.c
drm_plane.c drm/docs: Explicitly document default CRTC background behavior 2023-01-04 16:12:15 +00:00
drm_plane_helper.c drm: Remove unnecessary include statements for drm_crtc_helper.h 2023-01-18 09:25:30 +01:00
drm_prime.c drm/prime: reject DMA-BUF attach when get_sg_table is missing 2023-04-03 14:31:24 +02:00
drm_print.c
drm_privacy_screen.c
drm_privacy_screen_x86.c
drm_probe_helper.c drm/probe-helper: Cancel previous job before starting new one 2023-02-27 16:19:14 +01:00
drm_property.c
drm_rect.c
drm_scatter.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c
drm_suballoc.c drm/suballoc: Extract amdgpu_sa.c as generic suballocation helper 2023-03-01 17:18:19 +01:00
drm_syncobj.c
drm_sysfs.c
drm_trace.h
drm_trace_points.c
drm_vblank.c drm/vblank: Fix for drivers that do not drm_vblank_init() 2023-04-04 22:38:03 +02:00
drm_vblank_work.c
drm_vm.c mm: replace vma->vm_flags direct modifications with modifier calls 2023-02-09 16:51:39 -08:00
drm_vma_manager.c drm/drm_vma_manager: Add drm_vma_node_allow_once() 2023-01-19 14:16:55 +01:00
drm_writeback.c