mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-09 09:48:05 +02:00
read-only mirror of https://gitlab.freedesktop.org/mesa/drm
In i915_gem_object_wait_rendering, if the object write domain is being written by the GPU, the appropriate flushing commands are written to the device and an additional request queued to mark that flush. Finally, the function blocks on that new request. The bug was that the write_domain in the object was cleared before the function blocked. If the wait is interrupted by a signal, the flushing commands may still be pending. With the current write_domain information lost, the restarted syscall will drop right through the write_domain test as that value was lost, and so the function will not block at all. Oops. Fixed by simply moving the write_domain clear until after the wait_request succeeds. Note that the restarted system call will generate an additional flush sequence and request, but that should be 'harmless', aside from a slight performance impact. Someday we'll track flushing more accurately and clear write_domains more efficiently, but for now, this should suffice. This bug was discovered in the 2d gem development by running x11perf -copypixwin500 and noticing that the window got cleared accidentally. |
||
|---|---|---|
| bsd-core | ||
| libdrm | ||
| linux-core | ||
| scripts | ||
| shared-core | ||
| tests | ||
| .gitignore | ||
| autogen.sh | ||
| configure.ac | ||
| libdrm.pc.in | ||
| Makefile.am | ||
| README | ||
DRM README file There are two main parts to this package: the DRM client library/interface (libdrm.so) and kernel/hardware-specific device modules (such as i915.ko). Compiling --------- By default, libdrm and the DRM header files will install into /usr/local/. If you want to install this DRM to replace your system copy, say: ./configure --prefix=/usr --exec-prefix=/ Then, make install To build the device-specific kernel modules: cd linux-core/ make cp *.ko /lib/modules/VERSION/kernel/drivers/char/drm/ (where VERSION is your kernel version: uname -f) Or, cd bsd-core/ make copy the kernel modules to the appropriate place Tips & Trouble-shooting ----------------------- 1. You'll need kernel sources. If using Fedora Core 5, for example, you may need to install RPMs such as: kernel-smp-devel-2.6.15-1.2054_FC5.i686.rpm kernel-devel-2.6.15-1.2054_FC5.i686.rpm etc. 2. You may need to make a symlink from /lib/modules/VERSION/build to your kernel sources in /usr/src/kernels/VERSION (where version is `uname -r`): cd /lib/modules/VERSION ln -s /usr/src/kernels/VERSION build 3. If you've build the kernel modules but they won't load because of an error like this: $ /sbin/modprobe drm FATAL: Error inserting drm (/lib/modules/2.6.15-1.2054_FC5smp/kernel/drivers/char/drm/drm.ko): Invalid module format And 'dmesg|tail' says: drm: disagrees about version of symbol struct_module Try recompiling your drm modules without the Module.symvers file. That is rm the /usr/src/kernels/2.6.15-1.2054_FC5-smp-i686/Module.symvers file (or rename it). Then do a 'make clean' before rebuilding your drm modules.