mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-18 06:33:43 -04:00
drm/ttm: add operation ctx to ttm_bo_validate v2
Give moving a BO into place an operation context to work with. v2: rebased Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de> Tested-by: Michel Dänzer <michel.daenzer@amd.com> Acked-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
750a25037c
commit
19be557010
@@ -47,6 +47,7 @@ int vmw_dmabuf_pin_in_placement(struct vmw_private *dev_priv,
|
||||
struct ttm_placement *placement,
|
||||
bool interruptible)
|
||||
{
|
||||
struct ttm_operation_ctx ctx = {interruptible, false };
|
||||
struct ttm_buffer_object *bo = &buf->base;
|
||||
int ret;
|
||||
uint32_t new_flags;
|
||||
@@ -65,7 +66,7 @@ int vmw_dmabuf_pin_in_placement(struct vmw_private *dev_priv,
|
||||
ret = ttm_bo_mem_compat(placement, &bo->mem,
|
||||
&new_flags) == true ? 0 : -EINVAL;
|
||||
else
|
||||
ret = ttm_bo_validate(bo, placement, interruptible, false);
|
||||
ret = ttm_bo_validate(bo, placement, &ctx);
|
||||
|
||||
if (!ret)
|
||||
vmw_bo_pin_reserved(buf, true);
|
||||
@@ -95,6 +96,7 @@ int vmw_dmabuf_pin_in_vram_or_gmr(struct vmw_private *dev_priv,
|
||||
struct vmw_dma_buffer *buf,
|
||||
bool interruptible)
|
||||
{
|
||||
struct ttm_operation_ctx ctx = {interruptible, false };
|
||||
struct ttm_buffer_object *bo = &buf->base;
|
||||
int ret;
|
||||
uint32_t new_flags;
|
||||
@@ -115,12 +117,11 @@ int vmw_dmabuf_pin_in_vram_or_gmr(struct vmw_private *dev_priv,
|
||||
goto out_unreserve;
|
||||
}
|
||||
|
||||
ret = ttm_bo_validate(bo, &vmw_vram_gmr_placement, interruptible,
|
||||
false);
|
||||
ret = ttm_bo_validate(bo, &vmw_vram_gmr_placement, &ctx);
|
||||
if (likely(ret == 0) || ret == -ERESTARTSYS)
|
||||
goto out_unreserve;
|
||||
|
||||
ret = ttm_bo_validate(bo, &vmw_vram_placement, interruptible, false);
|
||||
ret = ttm_bo_validate(bo, &vmw_vram_placement, &ctx);
|
||||
|
||||
out_unreserve:
|
||||
if (!ret)
|
||||
@@ -170,6 +171,7 @@ int vmw_dmabuf_pin_in_start_of_vram(struct vmw_private *dev_priv,
|
||||
struct vmw_dma_buffer *buf,
|
||||
bool interruptible)
|
||||
{
|
||||
struct ttm_operation_ctx ctx = {interruptible, false };
|
||||
struct ttm_buffer_object *bo = &buf->base;
|
||||
struct ttm_placement placement;
|
||||
struct ttm_place place;
|
||||
@@ -200,14 +202,16 @@ int vmw_dmabuf_pin_in_start_of_vram(struct vmw_private *dev_priv,
|
||||
if (bo->mem.mem_type == TTM_PL_VRAM &&
|
||||
bo->mem.start < bo->num_pages &&
|
||||
bo->mem.start > 0 &&
|
||||
buf->pin_count == 0)
|
||||
(void) ttm_bo_validate(bo, &vmw_sys_placement, false, false);
|
||||
buf->pin_count == 0) {
|
||||
ctx.interruptible = false;
|
||||
(void) ttm_bo_validate(bo, &vmw_sys_placement, &ctx);
|
||||
}
|
||||
|
||||
if (buf->pin_count > 0)
|
||||
ret = ttm_bo_mem_compat(&placement, &bo->mem,
|
||||
&new_flags) == true ? 0 : -EINVAL;
|
||||
else
|
||||
ret = ttm_bo_validate(bo, &placement, interruptible, false);
|
||||
ret = ttm_bo_validate(bo, &placement, &ctx);
|
||||
|
||||
/* For some reason we didn't end up at the start of vram */
|
||||
WARN_ON(ret == 0 && bo->offset != 0);
|
||||
@@ -286,6 +290,7 @@ void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *bo,
|
||||
*/
|
||||
void vmw_bo_pin_reserved(struct vmw_dma_buffer *vbo, bool pin)
|
||||
{
|
||||
struct ttm_operation_ctx ctx = { false, true };
|
||||
struct ttm_place pl;
|
||||
struct ttm_placement placement;
|
||||
struct ttm_buffer_object *bo = &vbo->base;
|
||||
@@ -314,7 +319,7 @@ void vmw_bo_pin_reserved(struct vmw_dma_buffer *vbo, bool pin)
|
||||
placement.num_placement = 1;
|
||||
placement.placement = &pl;
|
||||
|
||||
ret = ttm_bo_validate(bo, &placement, false, true);
|
||||
ret = ttm_bo_validate(bo, &placement, &ctx);
|
||||
|
||||
BUG_ON(ret != 0 || bo->mem.mem_type != old_mem_type);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user