mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-28 21:46:02 -04:00
drm/ttm: merge ttm_bo_api.h and ttm_bo_driver.h v2
Merge and cleanup the two headers into a single description of the object API. Also move all the documentation to the implementation and drop unnecessary includes from the header. No functional change. v2: minimal checkpatch.pl cleanup Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20221125102137.1801-4-christian.koenig@amd.com
This commit is contained in:
@@ -31,8 +31,10 @@
|
||||
|
||||
#define pr_fmt(fmt) "[TTM] " fmt
|
||||
|
||||
#include <drm/ttm/ttm_bo_driver.h>
|
||||
#include <drm/ttm/ttm_bo.h>
|
||||
#include <drm/ttm/ttm_placement.h>
|
||||
#include <drm/ttm/ttm_tt.h>
|
||||
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/sched.h>
|
||||
@@ -381,6 +383,13 @@ static void ttm_bo_release(struct kref *kref)
|
||||
bo->destroy(bo);
|
||||
}
|
||||
|
||||
/**
|
||||
* ttm_bo_put
|
||||
*
|
||||
* @bo: The buffer object.
|
||||
*
|
||||
* Unreference a buffer object.
|
||||
*/
|
||||
void ttm_bo_put(struct ttm_buffer_object *bo)
|
||||
{
|
||||
kref_put(&bo->kref, ttm_bo_release);
|
||||
@@ -467,6 +476,14 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* ttm_bo_eviction_valuable
|
||||
*
|
||||
* @bo: The buffer object to evict
|
||||
* @place: the placement we need to make room for
|
||||
*
|
||||
* Check if it is valuable to evict the BO to make room for the given placement.
|
||||
*/
|
||||
bool ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
|
||||
const struct ttm_place *place)
|
||||
{
|
||||
@@ -726,13 +743,23 @@ static int ttm_bo_mem_force_space(struct ttm_buffer_object *bo,
|
||||
return ttm_bo_add_move_fence(bo, man, *mem, ctx->no_wait_gpu);
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates space for memory region @mem according to its type.
|
||||
/**
|
||||
* ttm_bo_mem_space
|
||||
*
|
||||
* This function first searches for free space in compatible memory types in
|
||||
* the priority order defined by the driver. If free space isn't found, then
|
||||
* ttm_bo_mem_force_space is attempted in priority order to evict and find
|
||||
* space.
|
||||
* @bo: Pointer to a struct ttm_buffer_object. the data of which
|
||||
* we want to allocate space for.
|
||||
* @proposed_placement: Proposed new placement for the buffer object.
|
||||
* @mem: A struct ttm_resource.
|
||||
* @ctx: if and how to sleep, lock buffers and alloc memory
|
||||
*
|
||||
* Allocate memory space for the buffer object pointed to by @bo, using
|
||||
* the placement flags in @placement, potentially evicting other idle buffer objects.
|
||||
* This function may sleep while waiting for space to become available.
|
||||
* Returns:
|
||||
* -EBUSY: No space available (only if no_wait == 1).
|
||||
* -ENOMEM: Could not allocate memory for the buffer object, either due to
|
||||
* fragmentation or concurrent allocators.
|
||||
* -ERESTARTSYS: An interruptible sleep was interrupted by a signal.
|
||||
*/
|
||||
int ttm_bo_mem_space(struct ttm_buffer_object *bo,
|
||||
struct ttm_placement *placement,
|
||||
@@ -838,6 +865,21 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* ttm_bo_validate
|
||||
*
|
||||
* @bo: The buffer object.
|
||||
* @placement: Proposed placement for the buffer object.
|
||||
* @ctx: validation parameters.
|
||||
*
|
||||
* Changes placement and caching policy of the buffer object
|
||||
* according proposed placement.
|
||||
* Returns
|
||||
* -EINVAL on invalid proposed placement.
|
||||
* -ENOMEM on out-of-memory condition.
|
||||
* -EBUSY if no_wait is true and buffer busy.
|
||||
* -ERESTARTSYS if interrupted by a signal.
|
||||
*/
|
||||
int ttm_bo_validate(struct ttm_buffer_object *bo,
|
||||
struct ttm_placement *placement,
|
||||
struct ttm_operation_ctx *ctx)
|
||||
@@ -1030,6 +1072,11 @@ EXPORT_SYMBOL(ttm_bo_init_validate);
|
||||
* buffer object vm functions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ttm_bo_unmap_virtual
|
||||
*
|
||||
* @bo: tear down the virtual mappings for this BO
|
||||
*/
|
||||
void ttm_bo_unmap_virtual(struct ttm_buffer_object *bo)
|
||||
{
|
||||
struct ttm_device *bdev = bo->bdev;
|
||||
@@ -1039,6 +1086,20 @@ void ttm_bo_unmap_virtual(struct ttm_buffer_object *bo)
|
||||
}
|
||||
EXPORT_SYMBOL(ttm_bo_unmap_virtual);
|
||||
|
||||
/**
|
||||
* ttm_bo_wait - wait for buffer idle.
|
||||
*
|
||||
* @bo: The buffer object.
|
||||
* @interruptible: Use interruptible wait.
|
||||
* @no_wait: Return immediately if buffer is busy.
|
||||
*
|
||||
* This function must be called with the bo::mutex held, and makes
|
||||
* sure any previous rendering to the buffer is completed.
|
||||
* Note: It might be necessary to block validations before the
|
||||
* wait by reserving the buffer.
|
||||
* Returns -EBUSY if no_wait is true and the buffer is busy.
|
||||
* Returns -ERESTARTSYS if interrupted by a signal.
|
||||
*/
|
||||
int ttm_bo_wait(struct ttm_buffer_object *bo,
|
||||
bool interruptible, bool no_wait)
|
||||
{
|
||||
@@ -1063,6 +1124,12 @@ int ttm_bo_wait(struct ttm_buffer_object *bo,
|
||||
}
|
||||
EXPORT_SYMBOL(ttm_bo_wait);
|
||||
|
||||
int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx)
|
||||
{
|
||||
return ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu);
|
||||
}
|
||||
EXPORT_SYMBOL(ttm_bo_wait_ctx);
|
||||
|
||||
int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx,
|
||||
gfp_t gfp_flags)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user