mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-05 22:58:04 +02:00
read-only mirror of https://gitlab.freedesktop.org/mesa/drm
It is possible to hit a race condition in create_from_prime, when trying to import a BO that's currently being freed. In case of prime sharing we'll succesfully get a handle, but fail on get_tiling call, potentially confusing the caller (and requiring different locking scheme than with sharing using flink). Wrap fd_to_handle with struct_mutex to force a more consistent behaviour between prime/flink, convert fprintf to DBG when handling errors. (From Chris: The race is that the kernel returns us the same file-private handle as the first thread, but that first thread is about to call gem_close (thereby removing the handle from the file completely) and does so between us acquiring the handle and taking the mutex. If we take the mutex, then we acquire the refcnt on the bo prior to the first thread completing its unref (and so preventing the early close). Or we acquire the handle after the earlier close, in which case we are the new owner. ) Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Testcase: igt/drm_import_export/import-close-race-prime Signed-off-by: Rafał Sapała <rafal.a.sapala@intel.com> Signed-off-by: Michał Winiarski <michal.winiarski@intel.com> |
||
|---|---|---|
| amdgpu | ||
| exynos | ||
| freedreno | ||
| include/drm | ||
| intel | ||
| libkms | ||
| m4 | ||
| man | ||
| nouveau | ||
| omap | ||
| radeon | ||
| tegra | ||
| tests | ||
| .gitignore | ||
| Android.mk | ||
| autogen.sh | ||
| CleanSpec.mk | ||
| configure.ac | ||
| libdrm.pc.in | ||
| libdrm_lists.h | ||
| libdrm_macros.h | ||
| Makefile.am | ||
| Makefile.sources | ||
| README | ||
| RELEASING | ||
| util_double_list.h | ||
| util_math.h | ||
| xf86atomic.h | ||
| xf86drm.c | ||
| xf86drm.h | ||
| xf86drmHash.c | ||
| xf86drmHash.h | ||
| xf86drmMode.c | ||
| xf86drmMode.h | ||
| xf86drmRandom.c | ||
| xf86drmRandom.h | ||
| xf86drmSL.c | ||
libdrm - userspace library for drm This is libdrm, a userspace library for accessing the DRM, direct rendering manager, on Linux, BSD and other operating systes that support the ioctl interface. The library provides wrapper functions for the ioctls to avoid exposing the kernel interface directly, and for chipsets with drm memory manager, support for tracking relocations and buffers. libdrm is a low-level library, typically used by graphics drivers such as the Mesa DRI drivers, the X drivers, libva and similar projects. New functionality in the kernel DRM drivers typically requires a new libdrm, but a new libdrm will always work with an older kernel. Compiling --------- libdrm is a standard autotools packages and follows the normal configure, build and install steps. The first step is to configure the package, which is done by running the configure shell script: ./configure By default, libdrm will install into the /usr/local/ prefix. If you want to install this DRM to replace your system copy, pass --prefix=/usr and --exec-prefix=/ to configure. If you are building libdrm from a git checkout, you first need to run the autogen.sh script. You can pass any options to autogen.sh that you would other wise pass to configure, or you can just re-run configure with the options you need once autogen.sh finishes. Next step is to build libdrm: make and once make finishes successfully, install the package using make install If you are install into a system location, you will need to be root to perform the install step.