From 7244698ddc3f33158188adcb50291157a7e99b81 Mon Sep 17 00:00:00 2001 From: Jammy Zhou Date: Mon, 18 May 2015 20:27:24 +0800 Subject: [PATCH 1/1] amdgpu: add amdgpu_bo_list_update interface v2 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit v2: some minor improvement Signed-off-by: Jammy Zhou Reviewed-by: Michel Dänzer Reviewed-by: Christian König --- amdgpu/amdgpu.h | 19 +++++++++++++++++++ amdgpu/amdgpu_bo.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h index dacffec..32bf30e 100644 --- a/amdgpu/amdgpu.h +++ b/amdgpu/amdgpu.h @@ -781,6 +781,25 @@ int amdgpu_bo_list_create(amdgpu_device_handle dev, */ int amdgpu_bo_list_destroy(amdgpu_bo_list_handle handle); +/** + * Update resources for existing BO list + * + * \param handle - \c [in] BO list handle + * \param number_of_resources - \c [in] Number of BOs in the list + * \param resources - \c [in] List of BO handles + * \param resource_prios - \c [in] Optional priority for each handle + * + * \return 0 on success\n + * >0 - AMD specific error code\n + * <0 - Negative POSIX Error code + * + * \sa amdgpu_bo_list_update() +*/ +int amdgpu_bo_list_update(amdgpu_bo_list_handle handle, + uint32_t number_of_resources, + amdgpu_bo_handle *resources, + uint8_t *resource_prios); + /* * Special GPU Resources * diff --git a/amdgpu/amdgpu_bo.c b/amdgpu/amdgpu_bo.c index 3dfaf62..ec04955 100644 --- a/amdgpu/amdgpu_bo.c +++ b/amdgpu/amdgpu_bo.c @@ -715,3 +715,38 @@ int amdgpu_bo_list_destroy(amdgpu_bo_list_handle list) return r; } + +int amdgpu_bo_list_update(amdgpu_bo_list_handle handle, + uint32_t number_of_resources, + amdgpu_bo_handle *resources, + uint8_t *resource_prios) +{ + struct drm_amdgpu_bo_list_entry *list; + union drm_amdgpu_bo_list args; + unsigned i; + int r; + + list = calloc(number_of_resources, sizeof(struct drm_amdgpu_bo_list_entry)); + if (list == NULL) + return -ENOMEM; + + memset(&args, 0, sizeof(args)); + args.in.operation = AMDGPU_BO_LIST_OP_UPDATE; + args.in.list_handle = handle->handle; + args.in.bo_number = number_of_resources; + args.in.bo_info_size = sizeof(struct drm_amdgpu_bo_list_entry); + args.in.bo_info_ptr = (uintptr_t)list; + + for (i = 0; i < number_of_resources; i++) { + list[i].bo_handle = resources[i]->handle; + if (resource_prios) + list[i].bo_priority = resource_prios[i]; + else + list[i].bo_priority = 0; + } + + r = drmCommandWriteRead(handle->dev->fd, DRM_AMDGPU_BO_LIST, + &args, sizeof(args)); + free(list); + return r; +} -- 2.7.4