From 615270502c7e7083e41080d3ea3cc57a29458f66 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 29 Apr 2020 13:47:57 -0700 Subject: [PATCH] intel: Move anv_gem_supports_syncobj_wait to common code. This will let me use this in iris. We leave the existing anv function for anv_gem_stubs.c faking, but move the contents to a helper in a new src/intel/common/gen_gem.c file. Part-of: --- src/intel/Makefile.sources | 1 + src/intel/common/gen_gem.c | 57 ++++++++++++++++++++++++++++++++++++ src/intel/common/gen_gem.h | 3 ++ src/intel/common/meson.build | 1 + src/intel/vulkan/anv_gem.c | 29 +----------------- 5 files changed, 63 insertions(+), 28 deletions(-) create mode 100644 src/intel/common/gen_gem.c diff --git a/src/intel/Makefile.sources b/src/intel/Makefile.sources index d7428c3c446..68412e005ae 100644 --- a/src/intel/Makefile.sources +++ b/src/intel/Makefile.sources @@ -18,6 +18,7 @@ COMMON_FILES = \ common/gen_disasm.c \ common/gen_disasm.h \ common/gen_defines.h \ + common/gen_gem.c \ common/gen_gem.h \ common/gen_guardband.h \ common/gen_l3_config.c \ diff --git a/src/intel/common/gen_gem.c b/src/intel/common/gen_gem.c new file mode 100644 index 00000000000..e485a5617d8 --- /dev/null +++ b/src/intel/common/gen_gem.c @@ -0,0 +1,57 @@ +/* + * Copyright © 2020 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "gen_gem.h" +#include "drm-uapi/i915_drm.h" + +bool +gen_gem_supports_syncobj_wait(int fd) +{ + int ret; + + struct drm_syncobj_create create = { + .flags = 0, + }; + ret = gen_ioctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &create); + if (ret) + return false; + + uint32_t syncobj = create.handle; + + struct drm_syncobj_wait wait = { + .handles = (uint64_t)(uintptr_t)&create, + .count_handles = 1, + .timeout_nsec = 0, + .flags = DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT, + }; + ret = gen_ioctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &wait); + + struct drm_syncobj_destroy destroy = { + .handle = syncobj, + }; + gen_ioctl(fd, DRM_IOCTL_SYNCOBJ_DESTROY, &destroy); + + /* If it timed out, then we have the ioctl and it supports the + * DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT flag. + */ + return ret == -1 && errno == ETIME; +} diff --git a/src/intel/common/gen_gem.h b/src/intel/common/gen_gem.h index fc48d54386b..cfcc59c2069 100644 --- a/src/intel/common/gen_gem.h +++ b/src/intel/common/gen_gem.h @@ -25,6 +25,7 @@ #define GEN_GEM_H #include +#include #include #include #include @@ -71,4 +72,6 @@ gen_ioctl(int fd, unsigned long request, void *arg) return ret; } +bool gen_gem_supports_syncobj_wait(int fd); + #endif /* GEN_GEM_H */ diff --git a/src/intel/common/meson.build b/src/intel/common/meson.build index fc6f9039011..0134dfb4597 100644 --- a/src/intel/common/meson.build +++ b/src/intel/common/meson.build @@ -30,6 +30,7 @@ files_libintel_common = files( 'gen_decoder.h', 'gen_disasm.c', 'gen_disasm.h', + 'gen_gem.c', 'gen_gem.h', 'gen_guardband.h', 'gen_l3_config.c', diff --git a/src/intel/vulkan/anv_gem.c b/src/intel/vulkan/anv_gem.c index 050b2fa9944..bea6a6803c4 100644 --- a/src/intel/vulkan/anv_gem.c +++ b/src/intel/vulkan/anv_gem.c @@ -572,34 +572,7 @@ anv_gem_syncobj_reset(struct anv_device *device, uint32_t handle) bool anv_gem_supports_syncobj_wait(int fd) { - int ret; - - struct drm_syncobj_create create = { - .flags = 0, - }; - ret = gen_ioctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &create); - if (ret) - return false; - - uint32_t syncobj = create.handle; - - struct drm_syncobj_wait wait = { - .handles = (uint64_t)(uintptr_t)&create, - .count_handles = 1, - .timeout_nsec = 0, - .flags = DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT, - }; - ret = gen_ioctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &wait); - - struct drm_syncobj_destroy destroy = { - .handle = syncobj, - }; - gen_ioctl(fd, DRM_IOCTL_SYNCOBJ_DESTROY, &destroy); - - /* If it timed out, then we have the ioctl and it supports the - * DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT flag. - */ - return ret == -1 && errno == ETIME; + return gen_gem_supports_syncobj_wait(fd); } int -- 2.30.2