graphics/mesa-devel: drop userptr workaround after 2ad6d0d7f8
UNSYNCHRONIZED doesn't work on FreeBSD since drm-515-kmod.
https://github.com/torvalds/linux/commit/c6bcc0c2fdfd
This reverts commit 058e5ba0ff.
PR: 244877
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
PORTNAME= mesa
|
||||
DISTVERSION= 26.1-branchpoint-1298
|
||||
DISTVERSIONSUFFIX= -gf6debb842d7
|
||||
PORTREVISION= 2
|
||||
PORTREVISION= 3
|
||||
CATEGORIES= graphics
|
||||
PKGNAMESUFFIX= -devel
|
||||
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
Try unsynchronized userptr if regular one fails.
|
||||
https://github.com/FreeBSDDesktop/kms-drm/issues/197
|
||||
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13162
|
||||
|
||||
--- src/gallium/drivers/crocus/crocus_bufmgr.c.orig 2023-07-19 23:28:31 UTC
|
||||
+++ src/gallium/drivers/crocus/crocus_bufmgr.c
|
||||
@@ -487,8 +487,20 @@ crocus_bo_create_userptr(struct crocus_bufmgr *bufmgr,
|
||||
.user_ptr = (uintptr_t)ptr,
|
||||
.user_size = size,
|
||||
};
|
||||
- if (intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_USERPTR, &arg))
|
||||
+
|
||||
+ int ret;
|
||||
+retry:
|
||||
+ ret = intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_USERPTR, &arg);
|
||||
+ if (ret) {
|
||||
+ if (errno == ENODEV && arg.flags == 0) {
|
||||
+ arg.flags = I915_USERPTR_UNSYNCHRONIZED;
|
||||
+ goto retry;
|
||||
+ }
|
||||
+ if (geteuid() != 0) {
|
||||
+ fprintf(stderr, "%s", "ioctl(I915_GEM_USERPTR) failed. Try running as root but expect poor stability.\n");
|
||||
+ }
|
||||
goto err_free;
|
||||
+ }
|
||||
bo->gem_handle = arg.handle;
|
||||
|
||||
/* Check the buffer for validity before we try and use it in a batch */
|
||||
--- src/gallium/drivers/iris/i915/iris_kmd_backend.c.orig 2023-07-31 18:56:34 UTC
|
||||
+++ src/gallium/drivers/iris/i915/iris_kmd_backend.c
|
||||
@@ -430,8 +430,20 @@ i915_gem_create_userptr(struct iris_bufmgr *bufmgr, vo
|
||||
.user_size = size,
|
||||
.flags = devinfo->has_userptr_probe ? I915_USERPTR_PROBE : 0,
|
||||
};
|
||||
- if (intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_I915_GEM_USERPTR, &arg))
|
||||
+
|
||||
+ int ret;
|
||||
+retry:
|
||||
+ ret = intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_I915_GEM_USERPTR, &arg);
|
||||
+ if (ret) {
|
||||
+ if (errno == ENODEV && arg.flags == 0) {
|
||||
+ arg.flags = I915_USERPTR_UNSYNCHRONIZED;
|
||||
+ goto retry;
|
||||
+ }
|
||||
+ if (geteuid() != 0) {
|
||||
+ fprintf(stderr, "%s", "ioctl(I915_GEM_USERPTR) failed. Try running as root but expect poor stability.\n");
|
||||
+ }
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
if (!devinfo->has_userptr_probe) {
|
||||
/* Check the buffer for validity before we try and use it in a batch */
|
||||
--- src/intel/vulkan_hasvk/anv_gem.c.orig 2023-07-19 23:28:31 UTC
|
||||
+++ src/intel/vulkan_hasvk/anv_gem.c
|
||||
@@ -150,9 +150,19 @@ anv_gem_userptr(struct anv_device *device, void *mem,
|
||||
if (device->physical->info.has_userptr_probe)
|
||||
userptr.flags |= I915_USERPTR_PROBE;
|
||||
|
||||
- int ret = intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_USERPTR, &userptr);
|
||||
- if (ret == -1)
|
||||
+ int ret;
|
||||
+retry:
|
||||
+ ret = intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_USERPTR, &userptr);
|
||||
+ if (ret == -1) {
|
||||
+ if (errno == ENODEV && userptr.flags == 0) {
|
||||
+ userptr.flags = I915_USERPTR_UNSYNCHRONIZED;
|
||||
+ goto retry;
|
||||
+ }
|
||||
+ if (geteuid() != 0) {
|
||||
+ fprintf(stderr, "%s", "ioctl(I915_GEM_USERPTR) failed. Try running as root but expect poor stability.\n");
|
||||
+ }
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
return userptr.handle;
|
||||
}
|
||||
--- src/intel/vulkan/i915/anv_kmd_backend.c.orig 2023-07-19 23:28:31 UTC
|
||||
+++ src/intel/vulkan/i915/anv_kmd_backend.c
|
||||
@@ -191,9 +191,19 @@ i915_gem_create_userptr(struct anv_device *device, voi
|
||||
if (device->physical->info.has_userptr_probe)
|
||||
userptr.flags |= I915_USERPTR_PROBE;
|
||||
|
||||
- int ret = intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_USERPTR, &userptr);
|
||||
- if (ret == -1)
|
||||
+ int ret;
|
||||
+retry:
|
||||
+ ret = intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_USERPTR, &userptr);
|
||||
+ if (ret == -1) {
|
||||
+ if (errno == ENODEV && userptr.flags == 0) {
|
||||
+ userptr.flags = I915_USERPTR_UNSYNCHRONIZED;
|
||||
+ goto retry;
|
||||
+ }
|
||||
+ if (geteuid() != 0) {
|
||||
+ fprintf(stderr, "%s", "ioctl(I915_GEM_USERPTR) failed. Try running as root but expect poor stability.\n");
|
||||
+ }
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
return userptr.handle;
|
||||
}
|
||||
Reference in New Issue
Block a user