Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Nov 2020 20:21:30 +0000 (UTC)
From:      Jan Beich <jbeich@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r556348 - head/graphics/mesa-devel/files
Message-ID:  <202011262021.0AQKLU55015538@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jbeich
Date: Thu Nov 26 20:21:30 2020
New Revision: 556348
URL: https://svnweb.freebsd.org/changeset/ports/556348

Log:
  graphics/mesa-devel: work around userptr for anv on gen < 8 and iris compute
  
  Vulkan on Intel Broadwell or later uses softpin but older need userptr:
  
     /* We only allow 48-bit addresses with softpin because knowing the actual
      * address is required for the vertex cache flush workaround.
      */
     device->supports_48bit_addresses = (device->info.gen >= 8) &&
                                        device->has_softpin &&
                                        device->gtt_size > (4ULL << 30 /* GiB */);
  
     device->use_softpin = device->has_softpin &&
                           device->supports_48bit_addresses;
  
  PR:		244877
  Submitted by:	Austin Shafer <ashafer@badland.io>

Added:
  head/graphics/mesa-devel/files/patch-userptr   (contents, props changed)

Added: head/graphics/mesa-devel/files/patch-userptr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/mesa-devel/files/patch-userptr	Thu Nov 26 20:21:30 2020	(r556348)
@@ -0,0 +1,51 @@
+Try unsynchronized userptr if regular one fails.
+https://github.com/FreeBSDDesktop/kms-drm/issues/197
+
+--- src/gallium/drivers/iris/iris_bufmgr.c.orig	2020-11-25 20:08:15 UTC
++++ src/gallium/drivers/iris/iris_bufmgr.c
+@@ -624,8 +624,20 @@ iris_bo_create_userptr(struct iris_bufmgr *bufmgr, con
+       .user_ptr = (uintptr_t)ptr,
+       .user_size = size,
+    };
+-   if (gen_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_USERPTR, &arg))
++
++   int ret;
++retry:
++   ret = gen_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/intel/vulkan/anv_gem.c.orig	2020-11-25 20:08:15 UTC
+--- src/intel/vulkan/anv_gem.c
+@@ -146,9 +146,19 @@ anv_gem_userptr(struct anv_device *device, void *mem, 
+       .flags = 0,
+    };
+ 
+-   int ret = gen_ioctl(device->fd, DRM_IOCTL_I915_GEM_USERPTR, &userptr);
+-   if (ret == -1)
++   int ret;
++retry:
++   ret = gen_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;
+ }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202011262021.0AQKLU55015538>