Commit d79025c7 authored by Christian König's avatar Christian König
Browse files

drm/ttm: always initialize the full ttm_resource v2



Init all fields in ttm_resource_alloc() when we create a new resource.

v2: use place->mem_type instead of res->mem_type

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210430092508.60710-2-christian.koenig@amd.com
parent b072b9cd
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -1018,8 +1018,6 @@ int amdgpu_ttm_alloc_gart(struct ttm_buffer_object *bo)
	} else {

		/* allocate GART space */
		tmp = bo->mem;
		tmp.mm_node = NULL;
		placement.num_placement = 1;
		placement.placement = &placements;
		placement.num_busy_placement = 1;
+4 −22
Original line number Diff line number Diff line
@@ -507,11 +507,6 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo,
		return ttm_tt_create(bo, false);
	}

	evict_mem = bo->mem;
	evict_mem.mm_node = NULL;
	evict_mem.bus.offset = 0;
	evict_mem.bus.addr = NULL;

	ret = ttm_bo_mem_space(bo, &placement, &evict_mem, ctx);
	if (ret) {
		if (ret != -ERESTARTSYS) {
@@ -867,12 +862,8 @@ static int ttm_bo_bounce_temp_buffer(struct ttm_buffer_object *bo,
				     struct ttm_place *hop)
{
	struct ttm_placement hop_placement;
	struct ttm_resource hop_mem;
	int ret;
	struct ttm_resource hop_mem = *mem;

	hop_mem.mm_node = NULL;
	hop_mem.mem_type = TTM_PL_SYSTEM;
	hop_mem.placement = 0;

	hop_placement.num_placement = hop_placement.num_busy_placement = 1;
	hop_placement.placement = hop_placement.busy_placement = hop;
@@ -894,19 +885,14 @@ static int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
			      struct ttm_placement *placement,
			      struct ttm_operation_ctx *ctx)
{
	int ret = 0;
	struct ttm_place hop;
	struct ttm_resource mem;
	int ret;

	dma_resv_assert_held(bo->base.resv);

	memset(&hop, 0, sizeof(hop));

	mem.num_pages = PAGE_ALIGN(bo->base.size) >> PAGE_SHIFT;
	mem.bus.offset = 0;
	mem.bus.addr = NULL;
	mem.mm_node = NULL;

	/*
	 * Determine where to move the buffer.
	 *
@@ -1027,6 +1013,7 @@ int ttm_bo_init_reserved(struct ttm_device *bdev,
			 struct dma_resv *resv,
			 void (*destroy) (struct ttm_buffer_object *))
{
	static const struct ttm_place sys_mem = { .mem_type = TTM_PL_SYSTEM };
	bool locked;
	int ret = 0;

@@ -1038,13 +1025,8 @@ int ttm_bo_init_reserved(struct ttm_device *bdev,
	bo->bdev = bdev;
	bo->type = type;
	bo->page_alignment = page_alignment;
	bo->mem.mem_type = TTM_PL_SYSTEM;
	bo->mem.num_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
	bo->mem.mm_node = NULL;
	bo->mem.bus.offset = 0;
	bo->mem.bus.addr = NULL;
	ttm_resource_alloc(bo, &sys_mem, &bo->mem);
	bo->moving = NULL;
	bo->mem.placement = 0;
	bo->pin_count = 0;
	bo->sg = sg;
	if (resv) {
+2 −2
Original line number Diff line number Diff line
@@ -664,6 +664,7 @@ EXPORT_SYMBOL(ttm_bo_move_accel_cleanup);

int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo)
{
	static const struct ttm_place sys_mem = { .mem_type = TTM_PL_SYSTEM };
	struct ttm_buffer_object *ghost;
	int ret;

@@ -676,8 +677,7 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo)
	if (ret)
		ttm_bo_wait(bo, false, false);

	memset(&bo->mem, 0, sizeof(bo->mem));
	bo->mem.mem_type = TTM_PL_SYSTEM;
	ttm_resource_alloc(bo, &sys_mem, &bo->mem);
	bo->ttm = NULL;

	dma_resv_unlock(&ghost->base._resv);
+10 −1
Original line number Diff line number Diff line
@@ -30,9 +30,18 @@ int ttm_resource_alloc(struct ttm_buffer_object *bo,
		       struct ttm_resource *res)
{
	struct ttm_resource_manager *man =
		ttm_manager_type(bo->bdev, res->mem_type);
		ttm_manager_type(bo->bdev, place->mem_type);

	res->mm_node = NULL;
	res->start = 0;
	res->num_pages = PFN_UP(bo->base.size);
	res->mem_type = place->mem_type;
	res->placement = place->flags;
	res->bus.addr = NULL;
	res->bus.offset = 0;
	res->bus.is_iomem = false;
	res->bus.caching = ttm_cached;

	return man->func->alloc(man, bo, place, res);
}