amdgpu: add amdgpu_bo_list_update interface v2
v2: some minor improvement Signed-off-by: Jammy Zhou <Jammy.Zhou@amd.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>main
parent
3f1ca0f939
commit
7244698ddc
|
@ -781,6 +781,25 @@ int amdgpu_bo_list_create(amdgpu_device_handle dev,
|
||||||
*/
|
*/
|
||||||
int amdgpu_bo_list_destroy(amdgpu_bo_list_handle handle);
|
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
|
* Special GPU Resources
|
||||||
*
|
*
|
||||||
|
|
|
@ -715,3 +715,38 @@ int amdgpu_bo_list_destroy(amdgpu_bo_list_handle list)
|
||||||
|
|
||||||
return r;
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue