drm/vmwgfx: Make user resource lookups reference-free during validation
Make the process of looking up a user resource and adding it to the validation list reference-free unless when it's actually added to the validation list where a single reference is taken. This saves two locked atomic operations per command stream buffer object handle lookup, unless there is a lookup cache hit. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Sinclair Yeh <syeh@vmware.com>
This commit is contained in:
@@ -230,6 +230,41 @@ out_bad_resource:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* vmw_user_resource_lookup_handle - lookup a struct resource from a
|
||||
* TTM user-space handle and perform basic type checks
|
||||
*
|
||||
* @dev_priv: Pointer to a device private struct
|
||||
* @tfile: Pointer to a struct ttm_object_file identifying the caller
|
||||
* @handle: The TTM user-space handle
|
||||
* @converter: Pointer to an object describing the resource type
|
||||
* @p_res: On successful return the location pointed to will contain
|
||||
* a pointer to a refcounted struct vmw_resource.
|
||||
*
|
||||
* If the handle can't be found or is associated with an incorrect resource
|
||||
* type, -EINVAL will be returned.
|
||||
*/
|
||||
struct vmw_resource *
|
||||
vmw_user_resource_noref_lookup_handle(struct vmw_private *dev_priv,
|
||||
struct ttm_object_file *tfile,
|
||||
uint32_t handle,
|
||||
const struct vmw_user_resource_conv
|
||||
*converter)
|
||||
{
|
||||
struct ttm_base_object *base;
|
||||
|
||||
base = ttm_base_object_noref_lookup(tfile, handle);
|
||||
if (!base)
|
||||
return ERR_PTR(-ESRCH);
|
||||
|
||||
if (unlikely(ttm_base_object_type(base) != converter->object_type)) {
|
||||
ttm_base_object_noref_release();
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
return converter->base_obj_to_res(base);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function that looks either a surface or bo.
|
||||
*
|
||||
|
Reference in New Issue
Block a user