/** * struct vmw_validation_context - Per command submission validation context * @ht: Hash table used to find resource- or buffer object duplicates * @resource_list: List head for resource validation metadata * @resource_ctx_list: List head for resource validation metadata for * resources that need to be validated before those in @resource_list * @bo_list: List head for buffer objects * @page_list: List of pages used by the memory allocator * @ticket: Ticked used for ww mutex locking * @res_mutex: Pointer to mutex used for resource reserving * @merge_dups: Whether to merge metadata for duplicate resources or * buffer objects * @mem_size_left: Free memory left in the last page in @page_list * @page_address: Kernel virtual address of the last page in @page_list
*/ struct vmw_validation_context { struct vmw_sw_context *sw_context; struct list_head resource_list; struct list_head resource_ctx_list; struct list_head bo_list; struct list_head page_list; struct ww_acquire_ctx ticket; struct mutex *res_mutex; unsignedint merge_dups; unsignedint mem_size_left;
u8 *page_address;
};
#if 0 /** * DECLARE_VAL_CONTEXT - Declare a validation context with initialization * @_name: The name of the variable * @_sw_context: Contains the hash table used to find dups or NULL if none * @_merge_dups: Whether to merge duplicate buffer object- or resource * entries. If set to true, ideally a hash table pointer should be supplied * as well unless the number of resources and buffer objects per validation * is known to be very small
*/ #endif #define DECLARE_VAL_CONTEXT(_name, _sw_context, _merge_dups) \ struct vmw_validation_context _name = \
{ .sw_context = _sw_context, \
.resource_list = LIST_HEAD_INIT((_name).resource_list), \
.resource_ctx_list = LIST_HEAD_INIT((_name).resource_ctx_list), \
.bo_list = LIST_HEAD_INIT((_name).bo_list), \
.page_list = LIST_HEAD_INIT((_name).page_list), \
.res_mutex = NULL, \
.merge_dups = _merge_dups, \
.mem_size_left = 0, \
}
/** * vmw_validation_has_bos - return whether the validation context has * any buffer objects registered. * * @ctx: The validation context * Returns: Whether any buffer objects are registered
*/ staticinlinebool
vmw_validation_has_bos(struct vmw_validation_context *ctx)
{ return !list_empty(&ctx->bo_list);
}
/** * vmw_validation_bo_reserve - Reserve buffer objects registered with a * validation context * @ctx: The validation context * @intr: Perform waits interruptible * * Return: Zero on success, -ERESTARTSYS when interrupted, negative error * code on failure
*/ staticinlineint
vmw_validation_bo_reserve(struct vmw_validation_context *ctx, bool intr)
{ return ttm_eu_reserve_buffers(&ctx->ticket, &ctx->bo_list, intr,
NULL);
}
/** * vmw_validation_bo_fence - Unreserve and fence buffer objects registered * with a validation context * @ctx: The validation context * * This function unreserves the buffer objects previously reserved using * vmw_validation_bo_reserve, and fences them with a fence object.
*/ staticinlinevoid
vmw_validation_bo_fence(struct vmw_validation_context *ctx, struct vmw_fence_obj *fence)
{
ttm_eu_fence_buffer_objects(&ctx->ticket, &ctx->bo_list,
(void *) fence);
}
/** * vmw_validation_align - Align a validation memory allocation * @val: The size to be aligned * * Returns: @val aligned to the granularity used by the validation memory * allocator.
*/ staticinlineunsignedint vmw_validation_align(unsignedint val)
{ return ALIGN(val, sizeof(long));
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.