[igt-dev] [PATCH i-g-t v2] lib/xe/xe_query: Extern xe_supports_faults()
Niranjana Vishwanathapura
niranjana.vishwanathapura at intel.com
Tue Mar 28 05:22:38 UTC 2023
Do not check for supports_faults in xe_device_get() as
it creates a VM in fault mode which prohibits creation
of any other VM in non-fault mode until this fault mode
VM is closed. This leads to test failures in multi threaded
cases.
v2: Rebase and add some documentation as per review feedback.
Signed-off-by: Niranjana Vishwanathapura <niranjana.vishwanathapura at intel.com>
Reviewed-by: Matthew Brost <matthew.brost at intel.com>
---
lib/xe/xe_query.c | 54 +++++++++++++++++++++++------------------------
lib/xe/xe_query.h | 3 ---
2 files changed, 27 insertions(+), 30 deletions(-)
diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
index 82a7e36e3..f281bc4a3 100644
--- a/lib/xe/xe_query.c
+++ b/lib/xe/xe_query.c
@@ -160,23 +160,6 @@ static uint32_t __mem_default_alignment(struct drm_xe_query_mem_usage *mem_usage
return alignment;
}
-static bool xe_check_supports_faults(int fd)
-{
- bool supports_faults;
-
- struct drm_xe_vm_create create = {
- .flags = DRM_XE_VM_CREATE_ASYNC_BIND_OPS |
- DRM_XE_VM_CREATE_FAULT_MODE,
- };
-
- supports_faults = !igt_ioctl(fd, DRM_IOCTL_XE_VM_CREATE, &create);
-
- if (supports_faults)
- xe_vm_destroy(fd, create.vm_id);
-
- return supports_faults;
-}
-
/**
* xe_engine_class_string:
* @engine_class: engine class
@@ -268,7 +251,6 @@ struct xe_device *xe_device_get(int fd)
xe_dev->gts, gt);
xe_dev->default_alignment = __mem_default_alignment(xe_dev->mem_usage);
xe_dev->has_vram = __mem_has_vram(xe_dev->mem_usage);
- xe_dev->supports_faults = xe_check_supports_faults(fd);
/* We may get here from multiple threads, use first cached xe_dev */
pthread_mutex_lock(&cache.cache_mutex);
@@ -303,6 +285,33 @@ void xe_device_put(int fd)
pthread_mutex_unlock(&cache.cache_mutex);
}
+/**
+ * xe_supports_faults:
+ * @fd: xe device fd
+ *
+ * Returns true if xe device @fd allows creating vm in fault mode otherwise
+ * false.
+ *
+ * NOTE: This function temporarily creates a VM in fault mode. Hence, while
+ * this function is executing, no non-fault mode VMs can be created.
+ */
+bool xe_supports_faults(int fd)
+{
+ bool supports_faults;
+
+ struct drm_xe_vm_create create = {
+ .flags = DRM_XE_VM_CREATE_ASYNC_BIND_OPS |
+ DRM_XE_VM_CREATE_FAULT_MODE,
+ };
+
+ supports_faults = !igt_ioctl(fd, DRM_IOCTL_XE_VM_CREATE, &create);
+
+ if (supports_faults)
+ xe_vm_destroy(fd, create.vm_id);
+
+ return supports_faults;
+}
+
static void xe_device_destroy_cache(void)
{
pthread_mutex_lock(&cache.cache_mutex);
@@ -458,15 +467,6 @@ uint64_t xe_vram_size(int fd, int gt)
*/
xe_dev_FN(xe_get_default_alignment, default_alignment, uint32_t);
-/**
- * xe_supports_faults:
- * @fd: xe device fd
- *
- * Returns true if xe device @fd allows creating vm in fault mode otherwise
- * false.
- */
-xe_dev_FN(xe_supports_faults, supports_faults, bool);
-
/**
* xe_va_bits:
* @fd: xe device fd
diff --git a/lib/xe/xe_query.h b/lib/xe/xe_query.h
index 70de183cc..3a00ecd1c 100644
--- a/lib/xe/xe_query.h
+++ b/lib/xe/xe_query.h
@@ -53,9 +53,6 @@ struct xe_device {
/** @has_vram: true if gpu has vram, false if system memory only */
bool has_vram;
- /** @supports_faults: true if gpu supports faults, otherwise false */
- bool supports_faults;
-
/** @va_bits: va length in bits */
uint32_t va_bits;
--
2.21.0.rc0.32.g243a4c7e27
More information about the igt-dev
mailing list