|
@@ -921,6 +921,47 @@ int vmw_user_bo_lookup(struct ttm_object_file *tfile,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * vmw_user_bo_noref_lookup - Look up a vmw user buffer object without reference
|
|
|
+ * @tfile: The TTM object file the handle is registered with.
|
|
|
+ * @handle: The user buffer object handle.
|
|
|
+ *
|
|
|
+ * This function looks up a struct vmw_user_bo and returns a pointer to the
|
|
|
+ * struct vmw_buffer_object it derives from without refcounting the pointer.
|
|
|
+ * The returned pointer is only valid until vmw_user_bo_noref_release() is
|
|
|
+ * called, and the object pointed to by the returned pointer may be doomed.
|
|
|
+ * Any persistent usage of the object requires a refcount to be taken using
|
|
|
+ * ttm_bo_reference_unless_doomed(). Iff this function returns successfully it
|
|
|
+ * needs to be paired with vmw_user_bo_noref_release() and no sleeping-
|
|
|
+ * or scheduling functions may be called inbetween these function calls.
|
|
|
+ *
|
|
|
+ * Return: A struct vmw_buffer_object pointer if successful or negative
|
|
|
+ * error pointer on failure.
|
|
|
+ */
|
|
|
+struct vmw_buffer_object *
|
|
|
+vmw_user_bo_noref_lookup(struct ttm_object_file *tfile, u32 handle)
|
|
|
+{
|
|
|
+ struct vmw_user_buffer_object *vmw_user_bo;
|
|
|
+ struct ttm_base_object *base;
|
|
|
+
|
|
|
+ base = ttm_base_object_noref_lookup(tfile, handle);
|
|
|
+ if (!base) {
|
|
|
+ DRM_ERROR("Invalid buffer object handle 0x%08lx.\n",
|
|
|
+ (unsigned long)handle);
|
|
|
+ return ERR_PTR(-ESRCH);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (unlikely(ttm_base_object_type(base) != ttm_buffer_type)) {
|
|
|
+ ttm_base_object_noref_release();
|
|
|
+ DRM_ERROR("Invalid buffer object handle 0x%08lx.\n",
|
|
|
+ (unsigned long)handle);
|
|
|
+ return ERR_PTR(-EINVAL);
|
|
|
+ }
|
|
|
+
|
|
|
+ vmw_user_bo = container_of(base, struct vmw_user_buffer_object,
|
|
|
+ prime.base);
|
|
|
+ return &vmw_user_bo->vbo;
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
* vmw_user_bo_reference - Open a handle to a vmw user buffer object.
|