mirror-linux/include/drm
Tvrtko Ursulin 1c7a387ffe drm: Update file owner during use
With the typical model where the display server opens the file descriptor
and then hands it over to the client(*), we were showing stale data in
debugfs.

Fix it by updating the drm_file->pid on ioctl access from a different
process.

The field is also made RCU protected to allow for lockless readers. Update
side is protected with dev->filelist_mutex.

Before:

$ cat /sys/kernel/debug/dri/0/clients
             command   pid dev master a   uid      magic
                Xorg  2344   0   y    y     0          0
                Xorg  2344   0   n    y     0          2
                Xorg  2344   0   n    y     0          3
                Xorg  2344   0   n    y     0          4

After:

$ cat /sys/kernel/debug/dri/0/clients
             command  tgid dev master a   uid      magic
                Xorg   830   0   y    y     0          0
       xfce4-session   880   0   n    y     0          1
               xfwm4   943   0   n    y     0          2
           neverball  1095   0   n    y     0          3

*)
More detailed and historically accurate description of various handover
implementation kindly provided by Emil Velikov:

"""
The traditional model, the server was the orchestrator managing the
primary device node. From the fd, to the master status and
authentication. But looking at the fd alone, this has varied across
the years.

IIRC in the DRI1 days, Xorg (libdrm really) would have a list of open
fd(s) and reuse those whenever needed, DRI2 the client was responsible
for open() themselves and with DRI3 the fd was passed to the client.

Around the inception of DRI3 and systemd-logind, the latter became
another possible orchestrator. Whereby Xorg and Wayland compositors
could ask it for the fd. For various reasons (hysterical and genuine
ones) Xorg has a fallback path going the open(), whereas Wayland
compositors are moving to solely relying on logind... some never had
fallback even.

Over the past few years, more projects have emerged which provide
functionality similar (be that on API level, Dbus, or otherwise) to
systemd-logind.
"""

v2:
 * Fixed typo in commit text and added a fine historical explanation
   from Emil.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Tested-by: Rob Clark <robdclark@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230621094824.2348732-1-tvrtko.ursulin@linux.intel.com
Signed-off-by: Christian König <christian.koenig@amd.com>
2023-09-20 15:27:44 +02:00
..
bridge drm: bridge: samsung-dsim: Fix waiting for empty cmd transfer FIFO on older Exynos 2023-08-11 14:54:05 +02:00
display drm/mst: Refactor the flow for payload allocation/removement 2023-09-08 17:00:57 -04:00
i2c
ttm drm/ttm: Remove two unused function declarations 2023-08-10 09:12:08 +02:00
amd_asic_type.h
drm_accel.h drm/debugfs: rework debugfs directory creation v5 2023-09-01 08:51:18 +02:00
drm_aperture.h drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02:00
drm_atomic.h drm/bridge: Fix kernel-doc typo in desc of output_bus_cfg in drm_bridge_state 2023-08-21 10:01:04 +02:00
drm_atomic_helper.h drm/atomic-helper: Add atomic_enable plane-helper callback 2023-02-20 15:19:23 +01:00
drm_atomic_state_helper.h drm/atomic-helper: Add an analog TV atomic_check implementation 2022-11-24 12:42:40 +01:00
drm_atomic_uapi.h
drm_audio_component.h drm/audio: make drm_audio_component.h self-contained 2022-11-29 14:14:51 +02:00
drm_auth.h
drm_blend.h
drm_bridge.h drm/bridge: Drop conditionals around of_node pointers 2023-09-06 08:32:37 -07:00
drm_bridge_connector.h drm/bridge_connector: drop drm_bridge_connector_en/disable_hpd() 2023-01-05 15:08:10 +01:00
drm_buddy.h drm/buddy: Improve contiguous memory allocation 2023-09-11 20:18:00 +02:00
drm_cache.h
drm_client.h drm/debugfs: rework debugfs directory creation v5 2023-09-01 08:51:18 +02:00
drm_color_mgmt.h
drm_connector.h drm/connector: document DRM_MODE_COLORIMETRY_COUNT 2023-09-07 16:32:21 +02:00
drm_crtc.h drm: Remove references to removed transitional helpers 2023-07-29 21:25:16 +02:00
drm_crtc_helper.h drm/crtc-helper: Remove most include statements from drm_crtc_helper.h 2023-01-18 09:25:32 +01:00
drm_damage_helper.h
drm_debugfs.h drm/debugfs: Fix drm_debugfs_remove_files() stub 2023-09-14 07:51:45 +02:00
drm_debugfs_crc.h
drm_device.h drm/debugfs: remove dev->debugfs_list and debugfs_mutex v2 2023-09-01 08:53:05 +02:00
drm_displayid.h drm/displayid: provide access to DisplayID version and primary use case 2023-02-27 02:58:38 +03:00
drm_drv.h drm/debugfs: Add inline to drm_debugfs_dev_init() to suppres -Wunused-function 2023-09-08 17:23:31 -03:00
drm_edid.h drm/edid: add drm_edid_read_switcheroo() 2023-06-02 13:23:10 +03:00
drm_encoder.h
drm_encoder_slave.h
drm_exec.h drm/exec: use unique instead of local label 2023-08-10 08:38:52 +02:00
drm_fb_dma_helper.h
drm_fb_helper.h drm/i915: Implement dedicated fbdev I/O helpers 2023-06-01 12:41:40 +02:00
drm_fbdev_dma.h drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers 2023-03-14 17:07:47 +01:00
drm_fbdev_generic.h drm/fb-helper: Move generic fbdev emulation into separate source file 2022-11-05 17:12:04 +01:00
drm_file.h drm: Update file owner during use 2023-09-20 15:27:44 +02:00
drm_fixed.h drm: Add fixed-point helper to get rounded integer values 2023-05-15 10:58:10 -03:00
drm_flip_work.h
drm_format_helper.h drm/format-helper: Simplify drm_fb_build_fourcc_list() 2023-01-03 14:27:39 +01:00
drm_fourcc.h
drm_framebuffer.h
drm_gem.h drm/gem: fix lockdep check for dma-resv lock 2023-08-04 20:34:31 +02:00
drm_gem_atomic_helper.h drm/simple-kms: Remove drm_gem_simple_display_pipe_prepare_fb() 2022-12-05 13:35:37 +01:00
drm_gem_dma_helper.h drm: Clear fd/handle callbacks in struct drm_driver 2023-06-26 11:08:41 +02:00
drm_gem_framebuffer_helper.h
drm_gem_shmem_helper.h drm: Clear fd/handle callbacks in struct drm_driver 2023-06-26 11:08:41 +02:00
drm_gem_ttm_helper.h drm/ttm: merge ttm_bo_api.h and ttm_bo_driver.h v2 2022-12-06 12:54:14 +01:00
drm_gem_vram_helper.h drm: Clear fd/handle callbacks in struct drm_driver 2023-06-26 11:08:41 +02:00
drm_gpuva_mgr.h drm: manager to keep track of GPUs VA mappings 2023-07-20 05:15:53 +02:00
drm_ioctl.h
drm_kunit_helpers.h drm/tests: helpers: Create a helper to allocate an atomic state 2023-07-31 14:19:57 +02:00
drm_lease.h
drm_legacy.h
drm_managed.h drm: fix drmm_mutex_init() 2023-05-22 12:23:50 +02:00
drm_mipi_dbi.h drm/mipi-dbi: Support separate I/O regulator 2022-12-14 14:57:09 +01:00
drm_mipi_dsi.h Driver core changes for 6.3-rc1 2023-02-24 12:58:55 -08:00
drm_mm.h
drm_mode_config.h drm/fbdev-generic: Remove unused prefer_shadow_fbdev flag 2023-03-22 13:32:47 +01:00
drm_mode_object.h
drm_modes.h drm/modes: Add a function to generate analog display modes 2022-11-24 12:42:39 +01:00
drm_modeset_helper.h
drm_modeset_helper_vtables.h drm: Remove references to removed transitional helpers 2023-07-29 21:25:16 +02:00
drm_modeset_lock.h
drm_module.h
drm_of.h drm: of: Add drm_of_get_dsi_bus helper function 2023-01-27 09:39:21 +01:00
drm_panel.h drm/panel: Fix kernel-doc typo for `follower_lock` 2023-08-03 10:21:27 +02:00
drm_pciids.h drm: Remove some obsolete drm pciids(tdfx, mga, i810, savage, r128, sis, via) 2023-01-13 09:44:56 +01:00
drm_plane.h drm/drm_plane.h: fix grammar of the comment 2023-08-03 11:06:03 +02:00
drm_plane_helper.h drm/plane-helper: Add the missing declaration of drm_atomic_state 2022-12-16 10:23:11 +01:00
drm_prime.h drm/prime: Unexport helpers for fd/handle conversion 2023-06-26 11:08:46 +02:00
drm_print.h Merge tag 'amd-drm-next-6.3-2023-01-27' of https://gitlab.freedesktop.org/agd5f/linux into drm-next 2023-01-30 15:37:57 +10:00
drm_privacy_screen_consumer.h
drm_privacy_screen_driver.h
drm_privacy_screen_machine.h
drm_probe_helper.h drm/probe-helper: Provide a TV get_modes helper 2022-11-24 12:42:40 +01:00
drm_property.h
drm_rect.h
drm_self_refresh_helper.h
drm_simple_kms_helper.h drm/simple-kms: Remove drm_gem_simple_display_pipe_prepare_fb() 2022-12-05 13:35:37 +01:00
drm_suballoc.h drm/suballoc: Extract amdgpu_sa.c as generic suballocation helper 2023-03-01 17:18:19 +01:00
drm_syncobj.h drm/syncobj: add IOCTL to register an eventfd 2023-07-20 12:01:03 +02:00
drm_sysfs.h drm/sysfs: rename drm_sysfs_connector_status_event() 2023-06-23 15:54:00 +02:00
drm_util.h
drm_utils.h
drm_vblank.h drm/vblank: Add helper to get next vblank time 2023-03-28 14:52:59 -07:00
drm_vblank_work.h
drm_vma_manager.h drm/drm_vma_manager: Add drm_vma_node_allow_once() 2023-01-19 14:16:55 +01:00
drm_writeback.h
gma_drm.h
gpu_scheduler.h Linux 6.5-rc1 2023-07-11 09:23:20 +02:00
gud.h
i915_component.h drm/i915/mtl: Define GSC Proxy component interface 2023-05-04 02:57:28 -07:00
i915_drm.h drm/i915_drm.h: fix a typo 2023-06-02 20:05:45 +03:00
i915_gsc_proxy_mei_interface.h drm/i915/mtl: Define GSC Proxy component interface 2023-05-04 02:57:28 -07:00
i915_hdcp_interface.h drm/i915/hdcp: Move away from master naming to arbiter 2023-05-31 10:22:13 +05:30
i915_pciids.h drm/i915: Add RPL-U sub platform 2023-02-16 12:29:51 +02:00
i915_pxp_tee_interface.h mei: pxp: add command streamer API to the PXP driver 2022-10-03 11:29:11 -07:00
intel-gtt.h
intel_lpe_audio.h
spsc_queue.h
task_barrier.h drm: Spelling s/randevouz/rendez-vous/ 2023-07-29 21:11:54 +02:00