[2/2] drm/amdgpu: use amdgpu_bo_parm for amdgpu_bo_create

Submitted by Zhou, David(ChunMing) on April 16, 2018, 11:13 a.m.

Details

Message ID 20180416111305.640-2-david1.zhou@amd.com
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Zhou, David(ChunMing) April 16, 2018, 11:13 a.m.
after that, we can easily add new parameter when need.

Change-Id: I6e80039c3801f163129ecc605d931483fdbc91db
Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
Cc: christian.koenig@amd.com
Cc: Felix.Kuehling@amd.com
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c       | 12 ++++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 10 +++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c    | 15 +++++++---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c         | 16 ++++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c          | 11 +++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c       | 38 +++++++++++-------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.h       |  6 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c        | 12 ++++++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_test.c         | 16 ++++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c          | 15 ++++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c           | 24 ++++++++++-----
 11 files changed, 114 insertions(+), 61 deletions(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index 4d36203ffb11..f90405e572f9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -217,13 +217,19 @@  int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
 {
 	struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
 	struct amdgpu_bo *bo = NULL;
+	struct amdgpu_bo_param bp = {
+		.size = size,
+		.byte_align = PAGE_SIZE,
+		.domain = AMDGPU_GEM_DOMAIN_GTT,
+		.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC,
+		.type = ttm_bo_type_kernel,
+		.resv = NULL
+	};
 	int r;
 	uint64_t gpu_addr_tmp = 0;
 	void *cpu_ptr_tmp = NULL;
 
-	r = amdgpu_bo_create(adev, size, PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT,
-			     AMDGPU_GEM_CREATE_CPU_GTT_USWC, ttm_bo_type_kernel,
-			     NULL, &bo);
+	r = amdgpu_bo_create(adev, &bp, &bo);
 	if (r) {
 		dev_err(adev->dev,
 			"failed to allocate BO for amdkfd (%d)\n", r);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 1d6e1479da38..b7bd24c35b25 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -1004,6 +1004,7 @@  int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
 	struct amdgpu_device *adev = get_amdgpu_device(kgd);
 	struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
 	struct amdgpu_bo *bo;
+	struct amdgpu_bo_param bp;
 	int byte_align;
 	u32 alloc_domain;
 	u64 alloc_flags;
@@ -1069,8 +1070,13 @@  int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
 	pr_debug("\tcreate BO VA 0x%llx size 0x%llx domain %s\n",
 			va, size, domain_string(alloc_domain));
 
-	ret = amdgpu_bo_create(adev, size, byte_align,
-				alloc_domain, alloc_flags, ttm_bo_type_device, NULL, &bo);
+	bp.size = size;
+	bp.byte_align = byte_align;
+	bp.domain = alloc_domain;
+	bp.flags = alloc_flags;
+	bp.type = ttm_bo_type_device;
+	bp.resv = NULL;
+	ret = amdgpu_bo_create(adev, &bp, &bo);
 	if (ret) {
 		pr_debug("Failed to create BO on domain %s. ret %d\n",
 				domain_string(alloc_domain), ret);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
index 02b849be083b..96bdb454bdf6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
@@ -75,13 +75,20 @@  static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
 {
 	struct amdgpu_bo *dobj = NULL;
 	struct amdgpu_bo *sobj = NULL;
+	struct amdgpu_bo_param bp = {
+		.size = size,
+		.byte_align = PAGE_SIZE,
+		.domain = sdomain,
+		.flags = 0,
+		.type = ttm_bo_type_kernel,
+		.resv = NULL
+	};
 	uint64_t saddr, daddr;
 	int r, n;
 	int time;
 
 	n = AMDGPU_BENCHMARK_ITERATIONS;
-	r = amdgpu_bo_create(adev, size, PAGE_SIZE,sdomain, 0,
-			     ttm_bo_type_kernel, NULL, &sobj);
+	r = amdgpu_bo_create(adev, &bp, &sobj);
 	if (r) {
 		goto out_cleanup;
 	}
@@ -93,8 +100,8 @@  static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
 	if (r) {
 		goto out_cleanup;
 	}
-	r = amdgpu_bo_create(adev, size, PAGE_SIZE, ddomain, 0,
-			     ttm_bo_type_kernel, NULL, &dobj);
+	bp.domain = ddomain;
+	r = amdgpu_bo_create(adev, &bp, &dobj);
 	if (r) {
 		goto out_cleanup;
 	}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index cf0f186c6092..1f9b8ae7ad2b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -110,15 +110,19 @@  static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev)
  */
 int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev)
 {
+	struct amdgpu_bo_param bp = {
+		.size = adev->gart.table_size,
+		.byte_align = PAGE_SIZE,
+		.domain = AMDGPU_GEM_DOMAIN_VRAM,
+		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
+			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
+		.type = ttm_bo_type_kernel,
+		.resv = NULL
+	};
 	int r;
 
 	if (adev->gart.robj == NULL) {
-		r = amdgpu_bo_create(adev, adev->gart.table_size, PAGE_SIZE,
-				     AMDGPU_GEM_DOMAIN_VRAM,
-				     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
-				     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-				     ttm_bo_type_kernel, NULL,
-				     &adev->gart.robj);
+		r = amdgpu_bo_create(adev, &bp, &adev->gart.robj);
 		if (r) {
 			return r;
 		}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 28c2706e48d7..e8f947d3da53 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -48,6 +48,14 @@  int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
 			     struct drm_gem_object **obj)
 {
 	struct amdgpu_bo *bo;
+	struct amdgpu_bo_param bp = {
+		.size = size,
+		.byte_align = alignment,
+		.domain = initial_domain,
+		.flags = flags,
+		.type = type,
+		.resv = resv
+	};
 	int r;
 
 	*obj = NULL;
@@ -56,8 +64,7 @@  int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
 		alignment = PAGE_SIZE;
 	}
 
-	r = amdgpu_bo_create(adev, size, alignment, initial_domain,
-			     flags, type, resv, &bo);
+	r = amdgpu_bo_create(adev, &bp, &bo);
 	if (r) {
 		DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
 			  size, initial_domain, alignment, r);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index b557b63bb648..a7a73ea18704 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -191,14 +191,20 @@  int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
 			      u32 domain, struct amdgpu_bo **bo_ptr,
 			      u64 *gpu_addr, void **cpu_addr)
 {
+	struct amdgpu_bo_param bp = {
+		.size = size,
+		.byte_align = align,
+		.domain = domain,
+		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
+			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
+		.type = ttm_bo_type_kernel,
+		.resv = NULL
+	};
 	bool free = false;
 	int r;
 
 	if (!*bo_ptr) {
-		r = amdgpu_bo_create(adev, size, align, domain,
-				     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
-				     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-				     ttm_bo_type_kernel, NULL, bo_ptr);
+		r = amdgpu_bo_create(adev, &bp, bo_ptr);
 		if (r) {
 			dev_err(adev->dev, "(%d) failed to allocate kernel bo\n",
 				r);
@@ -509,34 +515,26 @@  static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
 	return r;
 }
 
-int amdgpu_bo_create(struct amdgpu_device *adev, unsigned long size,
-		     int byte_align, u32 domain,
-		     u64 flags, enum ttm_bo_type type,
-		     struct reservation_object *resv,
+int amdgpu_bo_create(struct amdgpu_device *adev,
+		     struct amdgpu_bo_param *bp,
 		     struct amdgpu_bo **bo_ptr)
 {
-	struct amdgpu_bo_param bp = {
-		.size = size,
-		.byte_align = byte_align,
-		.domain = domain,
-		.flags = flags & ~AMDGPU_GEM_CREATE_SHADOW,
-		.type = type,
-		.resv = resv
-	};
+	u64 flags = bp->flags;
 	int r;
 
-	r = amdgpu_bo_do_create(adev, &bp, bo_ptr);
+	bp->flags = bp->flags & ~AMDGPU_GEM_CREATE_SHADOW;
+	r = amdgpu_bo_do_create(adev, bp, bo_ptr);
 	if (r)
 		return r;
 
 	if ((flags & AMDGPU_GEM_CREATE_SHADOW) && amdgpu_need_backup(adev)) {
-		if (!resv)
+		if (!bp->resv)
 			WARN_ON(reservation_object_lock((*bo_ptr)->tbo.resv,
 							NULL));
 
-		r = amdgpu_bo_create_shadow(adev, size, byte_align, (*bo_ptr));
+		r = amdgpu_bo_create_shadow(adev, bp->size, bp->byte_align, (*bo_ptr));
 
-		if (!resv)
+		if (!bp->resv)
 			reservation_object_unlock((*bo_ptr)->tbo.resv);
 
 		if (r)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
index 4bb6f0a8d799..e9a21d991e77 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
@@ -233,10 +233,8 @@  static inline bool amdgpu_bo_explicit_sync(struct amdgpu_bo *bo)
 	return bo->flags & AMDGPU_GEM_CREATE_EXPLICIT_SYNC;
 }
 
-int amdgpu_bo_create(struct amdgpu_device *adev, unsigned long size,
-		     int byte_align, u32 domain,
-		     u64 flags, enum ttm_bo_type type,
-		     struct reservation_object *resv,
+int amdgpu_bo_create(struct amdgpu_device *adev,
+		     struct amdgpu_bo_param *bp,
 		     struct amdgpu_bo **bo_ptr);
 int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
 			      unsigned long size, int align,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
index 4b584cb75bf4..e0f1f2512780 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
@@ -102,12 +102,18 @@  amdgpu_gem_prime_import_sg_table(struct drm_device *dev,
 	struct reservation_object *resv = attach->dmabuf->resv;
 	struct amdgpu_device *adev = dev->dev_private;
 	struct amdgpu_bo *bo;
+	struct amdgpu_bo_param bp = {
+		.size = attach->dmabuf->size,
+		.byte_align = PAGE_SIZE,
+		.domain = AMDGPU_GEM_DOMAIN_CPU,
+		.flags = 0,
+		.type = ttm_bo_type_sg,
+		.resv = resv
+	};
 	int ret;
 
 	ww_mutex_lock(&resv->lock, NULL);
-	ret = amdgpu_bo_create(adev, attach->dmabuf->size, PAGE_SIZE,
-			       AMDGPU_GEM_DOMAIN_CPU, 0, ttm_bo_type_sg,
-			       resv, &bo);
+	ret = amdgpu_bo_create(adev, &bp, &bo);
 	if (ret)
 		goto error;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
index 2dbe87591f81..57f27f096a9e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
@@ -33,6 +33,13 @@  static void amdgpu_do_test_moves(struct amdgpu_device *adev)
 	struct amdgpu_ring *ring = adev->mman.buffer_funcs_ring;
 	struct amdgpu_bo *vram_obj = NULL;
 	struct amdgpu_bo **gtt_obj = NULL;
+	struct amdgpu_bo_param bp = {
+		.byte_align = PAGE_SIZE,
+		.domain = AMDGPU_GEM_DOMAIN_VRAM,
+		.flags = 0,
+		.type = ttm_bo_type_kernel,
+		.resv = NULL
+	};
 	uint64_t gart_addr, vram_addr;
 	unsigned n, size;
 	int i, r;
@@ -58,9 +65,9 @@  static void amdgpu_do_test_moves(struct amdgpu_device *adev)
 		r = 1;
 		goto out_cleanup;
 	}
+	bp.size = size;
 
-	r = amdgpu_bo_create(adev, size, PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM, 0,
-			     ttm_bo_type_kernel, NULL, &vram_obj);
+	r = amdgpu_bo_create(adev, &bp, &vram_obj);
 	if (r) {
 		DRM_ERROR("Failed to create VRAM object\n");
 		goto out_cleanup;
@@ -79,9 +86,8 @@  static void amdgpu_do_test_moves(struct amdgpu_device *adev)
 		void **vram_start, **vram_end;
 		struct dma_fence *fence = NULL;
 
-		r = amdgpu_bo_create(adev, size, PAGE_SIZE,
-				     AMDGPU_GEM_DOMAIN_GTT, 0,
-				     ttm_bo_type_kernel, NULL, gtt_obj + i);
+		bp.domain = AMDGPU_GEM_DOMAIN_GTT;
+		r = amdgpu_bo_create(adev, &bp, gtt_obj + i);
 		if (r) {
 			DRM_ERROR("Failed to create GTT object %d\n", i);
 			goto out_lclean;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 29efaac6e3ed..262baa98f8c4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1316,6 +1316,15 @@  static void amdgpu_ttm_fw_reserve_vram_fini(struct amdgpu_device *adev)
 static int amdgpu_ttm_fw_reserve_vram_init(struct amdgpu_device *adev)
 {
 	struct ttm_operation_ctx ctx = { false, false };
+	struct amdgpu_bo_param bp = {
+		.size = adev->fw_vram_usage.size,
+		.byte_align = PAGE_SIZE,
+		.domain = AMDGPU_GEM_DOMAIN_VRAM,
+		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
+			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
+		.type = ttm_bo_type_kernel,
+		.resv = NULL
+	};
 	int r = 0;
 	int i;
 	u64 vram_size = adev->gmc.visible_vram_size;
@@ -1329,11 +1338,7 @@  static int amdgpu_ttm_fw_reserve_vram_init(struct amdgpu_device *adev)
 	if (adev->fw_vram_usage.size > 0 &&
 		adev->fw_vram_usage.size <= vram_size) {
 
-		r = amdgpu_bo_create(adev, adev->fw_vram_usage.size, PAGE_SIZE,
-				     AMDGPU_GEM_DOMAIN_VRAM,
-				     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
-				     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-				     ttm_bo_type_kernel, NULL,
+		r = amdgpu_bo_create(adev, &bp,
 				     &adev->fw_vram_usage.reserved_bo);
 		if (r)
 			goto error_create;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index da55a78d7380..675fd8e59d59 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -412,11 +412,15 @@  static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev,
 		struct amdgpu_bo *pt;
 
 		if (!entry->base.bo) {
-			r = amdgpu_bo_create(adev,
-					     amdgpu_vm_bo_size(adev, level),
-					     AMDGPU_GPU_PAGE_SIZE,
-					     AMDGPU_GEM_DOMAIN_VRAM, flags,
-					     ttm_bo_type_kernel, resv, &pt);
+			struct amdgpu_bo_param bp = {
+				.size = amdgpu_vm_bo_size(adev, level),
+				.byte_align = AMDGPU_GPU_PAGE_SIZE,
+				.domain = AMDGPU_GEM_DOMAIN_VRAM,
+				.flags = flags,
+				.type = ttm_bo_type_kernel,
+				.resv = resv
+			};
+			r = amdgpu_bo_create(adev, &bp, &pt);
 			if (r)
 				return r;
 
@@ -2355,6 +2359,7 @@  void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t vm_size,
 int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
 		   int vm_context, unsigned int pasid)
 {
+	struct amdgpu_bo_param bp;
 	const unsigned align = min(AMDGPU_VM_PTB_ALIGN_SIZE,
 		AMDGPU_VM_PTE_COUNT(adev) * 8);
 	unsigned ring_instance;
@@ -2409,8 +2414,13 @@  int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
 		flags |= AMDGPU_GEM_CREATE_SHADOW;
 
 	size = amdgpu_vm_bo_size(adev, adev->vm_manager.root_level);
-	r = amdgpu_bo_create(adev, size, align, AMDGPU_GEM_DOMAIN_VRAM, flags,
-			     ttm_bo_type_kernel, NULL, &vm->root.base.bo);
+	bp.size = size;
+	bp.byte_align = align;
+	bp.domain = AMDGPU_GEM_DOMAIN_VRAM;
+	bp.flags = flags;
+	bp.type = ttm_bo_type_kernel;
+	bp.resv = NULL;
+	r = amdgpu_bo_create(adev, &bp, &vm->root.base.bo);
 	if (r)
 		goto error_free_sched_entity;
 

Comments

On Mon, Apr 16, 2018 at 07:13:05PM +0800, Chunming Zhou wrote:
> after that, we can easily add new parameter when need.
> 
> Change-Id: I6e80039c3801f163129ecc605d931483fdbc91db
> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
> Cc: christian.koenig@amd.com
> Cc: Felix.Kuehling@amd.com
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c       | 12 ++++++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 10 +++++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c    | 15 +++++++---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c         | 16 ++++++----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c          | 11 +++++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c       | 38 +++++++++++-------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.h       |  6 ++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c        | 12 ++++++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_test.c         | 16 ++++++----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c          | 15 ++++++----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c           | 24 ++++++++++-----
>  11 files changed, 114 insertions(+), 61 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> index 4d36203ffb11..f90405e572f9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -217,13 +217,19 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
>  {
>  	struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
>  	struct amdgpu_bo *bo = NULL;
> +	struct amdgpu_bo_param bp = {
> +		.size = size,
> +		.byte_align = PAGE_SIZE,
> +		.domain = AMDGPU_GEM_DOMAIN_GTT,
> +		.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC,
> +		.type = ttm_bo_type_kernel,
> +		.resv = NULL
> +	};
>  	int r;
>  	uint64_t gpu_addr_tmp = 0;
>  	void *cpu_ptr_tmp = NULL;
>  
> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT,
> -			     AMDGPU_GEM_CREATE_CPU_GTT_USWC, ttm_bo_type_kernel,
> -			     NULL, &bo);
> +	r = amdgpu_bo_create(adev, &bp, &bo);
>  	if (r) {
>  		dev_err(adev->dev,
>  			"failed to allocate BO for amdkfd (%d)\n", r);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index 1d6e1479da38..b7bd24c35b25 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -1004,6 +1004,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>  	struct amdgpu_device *adev = get_amdgpu_device(kgd);
>  	struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
>  	struct amdgpu_bo *bo;
> +	struct amdgpu_bo_param bp;
>  	int byte_align;
>  	u32 alloc_domain;
>  	u64 alloc_flags;
> @@ -1069,8 +1070,13 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>  	pr_debug("\tcreate BO VA 0x%llx size 0x%llx domain %s\n",
>  			va, size, domain_string(alloc_domain));
>  
> -	ret = amdgpu_bo_create(adev, size, byte_align,
> -				alloc_domain, alloc_flags, ttm_bo_type_device, NULL, &bo);
> +	bp.size = size;
> +	bp.byte_align = byte_align;
> +	bp.domain = alloc_domain;
> +	bp.flags = alloc_flags;
> +	bp.type = ttm_bo_type_device;
> +	bp.resv = NULL;
> +	ret = amdgpu_bo_create(adev, &bp, &bo);
>  	if (ret) {
>  		pr_debug("Failed to create BO on domain %s. ret %d\n",
>  				domain_string(alloc_domain), ret);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
> index 02b849be083b..96bdb454bdf6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
> @@ -75,13 +75,20 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
>  {
>  	struct amdgpu_bo *dobj = NULL;
>  	struct amdgpu_bo *sobj = NULL;
> +	struct amdgpu_bo_param bp = {
> +		.size = size,
> +		.byte_align = PAGE_SIZE,
> +		.domain = sdomain,
> +		.flags = 0,
> +		.type = ttm_bo_type_kernel,
> +		.resv = NULL
> +	};
>  	uint64_t saddr, daddr;
>  	int r, n;
>  	int time;
>  
>  	n = AMDGPU_BENCHMARK_ITERATIONS;
> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE,sdomain, 0,
> -			     ttm_bo_type_kernel, NULL, &sobj);
> +	r = amdgpu_bo_create(adev, &bp, &sobj);
>  	if (r) {
>  		goto out_cleanup;
>  	}
> @@ -93,8 +100,8 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
>  	if (r) {
>  		goto out_cleanup;
>  	}
> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE, ddomain, 0,
> -			     ttm_bo_type_kernel, NULL, &dobj);
> +	bp.domain = ddomain;
> +	r = amdgpu_bo_create(adev, &bp, &dobj);
>  	if (r) {
>  		goto out_cleanup;
>  	}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> index cf0f186c6092..1f9b8ae7ad2b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> @@ -110,15 +110,19 @@ static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev)
>   */
>  int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev)
>  {
> +	struct amdgpu_bo_param bp = {
> +		.size = adev->gart.table_size,
> +		.byte_align = PAGE_SIZE,
> +		.domain = AMDGPU_GEM_DOMAIN_VRAM,
> +		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
> +			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
> +		.type = ttm_bo_type_kernel,
> +		.resv = NULL
> +	};
>  	int r;
>  
>  	if (adev->gart.robj == NULL) {
> -		r = amdgpu_bo_create(adev, adev->gart.table_size, PAGE_SIZE,
> -				     AMDGPU_GEM_DOMAIN_VRAM,
> -				     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
> -				     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
> -				     ttm_bo_type_kernel, NULL,
> -				     &adev->gart.robj);
> +		r = amdgpu_bo_create(adev, &bp, &adev->gart.robj);
>  		if (r) {
>  			return r;
>  		}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index 28c2706e48d7..e8f947d3da53 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -48,6 +48,14 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
>  			     struct drm_gem_object **obj)
>  {
>  	struct amdgpu_bo *bo;
> +	struct amdgpu_bo_param bp = {
> +		.size = size,
> +		.byte_align = alignment,
> +		.domain = initial_domain,
> +		.flags = flags,
> +		.type = type,
> +		.resv = resv
> +	};
>  	int r;
>  
>  	*obj = NULL;
> @@ -56,8 +64,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
>  		alignment = PAGE_SIZE;
>  	}
>  
> -	r = amdgpu_bo_create(adev, size, alignment, initial_domain,
> -			     flags, type, resv, &bo);
> +	r = amdgpu_bo_create(adev, &bp, &bo);
>  	if (r) {
>  		DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
>  			  size, initial_domain, alignment, r);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index b557b63bb648..a7a73ea18704 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -191,14 +191,20 @@ int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
>  			      u32 domain, struct amdgpu_bo **bo_ptr,
>  			      u64 *gpu_addr, void **cpu_addr)
>  {
> +	struct amdgpu_bo_param bp = {
> +		.size = size,
> +		.byte_align = align,
> +		.domain = domain,
> +		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
> +			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
> +		.type = ttm_bo_type_kernel,
> +		.resv = NULL
> +	};

Others looks good.
How about also use amdgpu_bo_param for amdgpu_bo_create_kernel function?

Thanks,
Ray
Am 16.04.2018 um 13:43 schrieb Huang Rui:
> On Mon, Apr 16, 2018 at 07:13:05PM +0800, Chunming Zhou wrote:
>> after that, we can easily add new parameter when need.
>>
>> Change-Id: I6e80039c3801f163129ecc605d931483fdbc91db
>> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
>> Cc: christian.koenig@amd.com
>> Cc: Felix.Kuehling@amd.com
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c       | 12 ++++++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 10 +++++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c    | 15 +++++++---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c         | 16 ++++++----
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c          | 11 +++++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c       | 38 +++++++++++-------------
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h       |  6 ++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c        | 12 ++++++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_test.c         | 16 ++++++----
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c          | 15 ++++++----
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c           | 24 ++++++++++-----
>>   11 files changed, 114 insertions(+), 61 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> index 4d36203ffb11..f90405e572f9 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>> @@ -217,13 +217,19 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
>>   {
>>   	struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
>>   	struct amdgpu_bo *bo = NULL;
>> +	struct amdgpu_bo_param bp = {
>> +		.size = size,
>> +		.byte_align = PAGE_SIZE,
>> +		.domain = AMDGPU_GEM_DOMAIN_GTT,
>> +		.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC,
>> +		.type = ttm_bo_type_kernel,
>> +		.resv = NULL
>> +	};
>>   	int r;
>>   	uint64_t gpu_addr_tmp = 0;
>>   	void *cpu_ptr_tmp = NULL;
>>   
>> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT,
>> -			     AMDGPU_GEM_CREATE_CPU_GTT_USWC, ttm_bo_type_kernel,
>> -			     NULL, &bo);
>> +	r = amdgpu_bo_create(adev, &bp, &bo);
>>   	if (r) {
>>   		dev_err(adev->dev,
>>   			"failed to allocate BO for amdkfd (%d)\n", r);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> index 1d6e1479da38..b7bd24c35b25 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> @@ -1004,6 +1004,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>>   	struct amdgpu_device *adev = get_amdgpu_device(kgd);
>>   	struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
>>   	struct amdgpu_bo *bo;
>> +	struct amdgpu_bo_param bp;
>>   	int byte_align;
>>   	u32 alloc_domain;
>>   	u64 alloc_flags;
>> @@ -1069,8 +1070,13 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>>   	pr_debug("\tcreate BO VA 0x%llx size 0x%llx domain %s\n",
>>   			va, size, domain_string(alloc_domain));
>>   
>> -	ret = amdgpu_bo_create(adev, size, byte_align,
>> -				alloc_domain, alloc_flags, ttm_bo_type_device, NULL, &bo);
>> +	bp.size = size;
>> +	bp.byte_align = byte_align;
>> +	bp.domain = alloc_domain;
>> +	bp.flags = alloc_flags;
>> +	bp.type = ttm_bo_type_device;
>> +	bp.resv = NULL;
>> +	ret = amdgpu_bo_create(adev, &bp, &bo);
>>   	if (ret) {
>>   		pr_debug("Failed to create BO on domain %s. ret %d\n",
>>   				domain_string(alloc_domain), ret);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
>> index 02b849be083b..96bdb454bdf6 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
>> @@ -75,13 +75,20 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
>>   {
>>   	struct amdgpu_bo *dobj = NULL;
>>   	struct amdgpu_bo *sobj = NULL;
>> +	struct amdgpu_bo_param bp = {
>> +		.size = size,
>> +		.byte_align = PAGE_SIZE,
>> +		.domain = sdomain,
>> +		.flags = 0,
>> +		.type = ttm_bo_type_kernel,
>> +		.resv = NULL
>> +	};
>>   	uint64_t saddr, daddr;
>>   	int r, n;
>>   	int time;
>>   
>>   	n = AMDGPU_BENCHMARK_ITERATIONS;
>> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE,sdomain, 0,
>> -			     ttm_bo_type_kernel, NULL, &sobj);
>> +	r = amdgpu_bo_create(adev, &bp, &sobj);
>>   	if (r) {
>>   		goto out_cleanup;
>>   	}
>> @@ -93,8 +100,8 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
>>   	if (r) {
>>   		goto out_cleanup;
>>   	}
>> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE, ddomain, 0,
>> -			     ttm_bo_type_kernel, NULL, &dobj);
>> +	bp.domain = ddomain;
>> +	r = amdgpu_bo_create(adev, &bp, &dobj);
>>   	if (r) {
>>   		goto out_cleanup;
>>   	}
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
>> index cf0f186c6092..1f9b8ae7ad2b 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
>> @@ -110,15 +110,19 @@ static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev)
>>    */
>>   int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev)
>>   {
>> +	struct amdgpu_bo_param bp = {
>> +		.size = adev->gart.table_size,
>> +		.byte_align = PAGE_SIZE,
>> +		.domain = AMDGPU_GEM_DOMAIN_VRAM,
>> +		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
>> +			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
>> +		.type = ttm_bo_type_kernel,
>> +		.resv = NULL
>> +	};
>>   	int r;
>>   
>>   	if (adev->gart.robj == NULL) {
>> -		r = amdgpu_bo_create(adev, adev->gart.table_size, PAGE_SIZE,
>> -				     AMDGPU_GEM_DOMAIN_VRAM,
>> -				     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
>> -				     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
>> -				     ttm_bo_type_kernel, NULL,
>> -				     &adev->gart.robj);
>> +		r = amdgpu_bo_create(adev, &bp, &adev->gart.robj);
>>   		if (r) {
>>   			return r;
>>   		}
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> index 28c2706e48d7..e8f947d3da53 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> @@ -48,6 +48,14 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
>>   			     struct drm_gem_object **obj)
>>   {
>>   	struct amdgpu_bo *bo;
>> +	struct amdgpu_bo_param bp = {
>> +		.size = size,
>> +		.byte_align = alignment,
>> +		.domain = initial_domain,
>> +		.flags = flags,
>> +		.type = type,
>> +		.resv = resv
>> +	};
>>   	int r;
>>   
>>   	*obj = NULL;
>> @@ -56,8 +64,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
>>   		alignment = PAGE_SIZE;
>>   	}
>>   
>> -	r = amdgpu_bo_create(adev, size, alignment, initial_domain,
>> -			     flags, type, resv, &bo);
>> +	r = amdgpu_bo_create(adev, &bp, &bo);
>>   	if (r) {
>>   		DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
>>   			  size, initial_domain, alignment, r);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> index b557b63bb648..a7a73ea18704 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> @@ -191,14 +191,20 @@ int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
>>   			      u32 domain, struct amdgpu_bo **bo_ptr,
>>   			      u64 *gpu_addr, void **cpu_addr)
>>   {
>> +	struct amdgpu_bo_param bp = {
>> +		.size = size,
>> +		.byte_align = align,
>> +		.domain = domain,
>> +		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
>> +			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
>> +		.type = ttm_bo_type_kernel,
>> +		.resv = NULL
>> +	};
> Others looks good.
> How about also use amdgpu_bo_param for amdgpu_bo_create_kernel function?

I really wanted to keep the _kernel and _reserved variant simple enough 
to not need that.

Anyway patch is Reviewed-by: Christian K├Ânig <christian.koenig@amd.com>.

Regards,
Christian.

>
> Thanks,
> Ray
On Mon, Apr 16, 2018 at 08:20:59PM +0800, Koenig, Christian wrote:
> Am 16.04.2018 um 13:43 schrieb Huang Rui:
> > On Mon, Apr 16, 2018 at 07:13:05PM +0800, Chunming Zhou wrote:
> >> after that, we can easily add new parameter when need.
> >>
> >> Change-Id: I6e80039c3801f163129ecc605d931483fdbc91db
> >> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
> >> Cc: christian.koenig@amd.com
> >> Cc: Felix.Kuehling@amd.com
> >> ---
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c       | 12 ++++++--
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 10 +++++--
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c    | 15 +++++++---
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c         | 16 ++++++----
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c          | 11 +++++--
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c       | 38 +++++++++++-------------
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h       |  6 ++--
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c        | 12 ++++++--
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_test.c         | 16 ++++++----
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c          | 15 ++++++----
> >>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c           | 24 ++++++++++-----
> >>   11 files changed, 114 insertions(+), 61 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> >> index 4d36203ffb11..f90405e572f9 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> >> @@ -217,13 +217,19 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
> >>   {
> >>   	struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
> >>   	struct amdgpu_bo *bo = NULL;
> >> +	struct amdgpu_bo_param bp = {
> >> +		.size = size,
> >> +		.byte_align = PAGE_SIZE,
> >> +		.domain = AMDGPU_GEM_DOMAIN_GTT,
> >> +		.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC,
> >> +		.type = ttm_bo_type_kernel,
> >> +		.resv = NULL
> >> +	};
> >>   	int r;
> >>   	uint64_t gpu_addr_tmp = 0;
> >>   	void *cpu_ptr_tmp = NULL;
> >>   
> >> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT,
> >> -			     AMDGPU_GEM_CREATE_CPU_GTT_USWC, ttm_bo_type_kernel,
> >> -			     NULL, &bo);
> >> +	r = amdgpu_bo_create(adev, &bp, &bo);
> >>   	if (r) {
> >>   		dev_err(adev->dev,
> >>   			"failed to allocate BO for amdkfd (%d)\n", r);
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> >> index 1d6e1479da38..b7bd24c35b25 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> >> @@ -1004,6 +1004,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
> >>   	struct amdgpu_device *adev = get_amdgpu_device(kgd);
> >>   	struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
> >>   	struct amdgpu_bo *bo;
> >> +	struct amdgpu_bo_param bp;
> >>   	int byte_align;
> >>   	u32 alloc_domain;
> >>   	u64 alloc_flags;
> >> @@ -1069,8 +1070,13 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
> >>   	pr_debug("\tcreate BO VA 0x%llx size 0x%llx domain %s\n",
> >>   			va, size, domain_string(alloc_domain));
> >>   
> >> -	ret = amdgpu_bo_create(adev, size, byte_align,
> >> -				alloc_domain, alloc_flags, ttm_bo_type_device, NULL, &bo);
> >> +	bp.size = size;
> >> +	bp.byte_align = byte_align;
> >> +	bp.domain = alloc_domain;
> >> +	bp.flags = alloc_flags;
> >> +	bp.type = ttm_bo_type_device;
> >> +	bp.resv = NULL;
> >> +	ret = amdgpu_bo_create(adev, &bp, &bo);
> >>   	if (ret) {
> >>   		pr_debug("Failed to create BO on domain %s. ret %d\n",
> >>   				domain_string(alloc_domain), ret);
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
> >> index 02b849be083b..96bdb454bdf6 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
> >> @@ -75,13 +75,20 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
> >>   {
> >>   	struct amdgpu_bo *dobj = NULL;
> >>   	struct amdgpu_bo *sobj = NULL;
> >> +	struct amdgpu_bo_param bp = {
> >> +		.size = size,
> >> +		.byte_align = PAGE_SIZE,
> >> +		.domain = sdomain,
> >> +		.flags = 0,
> >> +		.type = ttm_bo_type_kernel,
> >> +		.resv = NULL
> >> +	};
> >>   	uint64_t saddr, daddr;
> >>   	int r, n;
> >>   	int time;
> >>   
> >>   	n = AMDGPU_BENCHMARK_ITERATIONS;
> >> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE,sdomain, 0,
> >> -			     ttm_bo_type_kernel, NULL, &sobj);
> >> +	r = amdgpu_bo_create(adev, &bp, &sobj);
> >>   	if (r) {
> >>   		goto out_cleanup;
> >>   	}
> >> @@ -93,8 +100,8 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
> >>   	if (r) {
> >>   		goto out_cleanup;
> >>   	}
> >> -	r = amdgpu_bo_create(adev, size, PAGE_SIZE, ddomain, 0,
> >> -			     ttm_bo_type_kernel, NULL, &dobj);
> >> +	bp.domain = ddomain;
> >> +	r = amdgpu_bo_create(adev, &bp, &dobj);
> >>   	if (r) {
> >>   		goto out_cleanup;
> >>   	}
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> >> index cf0f186c6092..1f9b8ae7ad2b 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> >> @@ -110,15 +110,19 @@ static void amdgpu_gart_dummy_page_fini(struct amdgpu_device *adev)
> >>    */
> >>   int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev)
> >>   {
> >> +	struct amdgpu_bo_param bp = {
> >> +		.size = adev->gart.table_size,
> >> +		.byte_align = PAGE_SIZE,
> >> +		.domain = AMDGPU_GEM_DOMAIN_VRAM,
> >> +		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
> >> +			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
> >> +		.type = ttm_bo_type_kernel,
> >> +		.resv = NULL
> >> +	};
> >>   	int r;
> >>   
> >>   	if (adev->gart.robj == NULL) {
> >> -		r = amdgpu_bo_create(adev, adev->gart.table_size, PAGE_SIZE,
> >> -				     AMDGPU_GEM_DOMAIN_VRAM,
> >> -				     AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
> >> -				     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
> >> -				     ttm_bo_type_kernel, NULL,
> >> -				     &adev->gart.robj);
> >> +		r = amdgpu_bo_create(adev, &bp, &adev->gart.robj);
> >>   		if (r) {
> >>   			return r;
> >>   		}
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> >> index 28c2706e48d7..e8f947d3da53 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> >> @@ -48,6 +48,14 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
> >>   			     struct drm_gem_object **obj)
> >>   {
> >>   	struct amdgpu_bo *bo;
> >> +	struct amdgpu_bo_param bp = {
> >> +		.size = size,
> >> +		.byte_align = alignment,
> >> +		.domain = initial_domain,
> >> +		.flags = flags,
> >> +		.type = type,
> >> +		.resv = resv
> >> +	};
> >>   	int r;
> >>   
> >>   	*obj = NULL;
> >> @@ -56,8 +64,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
> >>   		alignment = PAGE_SIZE;
> >>   	}
> >>   
> >> -	r = amdgpu_bo_create(adev, size, alignment, initial_domain,
> >> -			     flags, type, resv, &bo);
> >> +	r = amdgpu_bo_create(adev, &bp, &bo);
> >>   	if (r) {
> >>   		DRM_DEBUG("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
> >>   			  size, initial_domain, alignment, r);
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> >> index b557b63bb648..a7a73ea18704 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> >> @@ -191,14 +191,20 @@ int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
> >>   			      u32 domain, struct amdgpu_bo **bo_ptr,
> >>   			      u64 *gpu_addr, void **cpu_addr)
> >>   {
> >> +	struct amdgpu_bo_param bp = {
> >> +		.size = size,
> >> +		.byte_align = align,
> >> +		.domain = domain,
> >> +		.flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
> >> +			AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
> >> +		.type = ttm_bo_type_kernel,
> >> +		.resv = NULL
> >> +	};
> > Others looks good.
> > How about also use amdgpu_bo_param for amdgpu_bo_create_kernel function?
> 
> I really wanted to keep the _kernel and _reserved variant simple enough 
> to not need that.
> 

That's fine. I have no problem.

Reviewed-by: Huang Rui <ray.huang@amd.com>