gpudev: fix page alignment in communication list

Memory allocated for CPU mapping the status flag
in the communication list should be aligned to the
GPU page size, which can be different of CPU page alignment.

The GPU page size is added to the GPU info,
and is used when creating a communication list.

Fixes: 9b8cae4d99 ("gpudev: use CPU mapping in communication list")

Signed-off-by: Elena Agostini <eagostini@nvidia.com>
This commit is contained in:
Elena Agostini 2022-03-08 23:59:47 +00:00 committed by Thomas Monjalon
parent d78d21b983
commit 1fd3de64ff
3 changed files with 15 additions and 2 deletions

View File

@ -523,6 +523,8 @@ cuda_dev_info_get(struct rte_gpu *dev, struct rte_gpu_info *info)
}
dev->mpshared->info.total_memory = parent_info.total_memory;
dev->mpshared->info.page_size = parent_info.page_size;
/*
* GPU Device private info
*/
@ -1173,6 +1175,8 @@ cuda_gpu_probe(__rte_unused struct rte_pci_driver *pci_drv, struct rte_pci_devic
return -rte_errno;
}
dev->mpshared->info.page_size = (size_t)GPU_PAGE_SIZE;
/*
* GPU Device private info
*/

View File

@ -820,6 +820,7 @@ rte_gpu_comm_create_list(uint16_t dev_id,
uint32_t idx_l;
int ret;
struct rte_gpu *dev;
struct rte_gpu_info info;
if (num_comm_items == 0) {
rte_errno = EINVAL;
@ -833,6 +834,12 @@ rte_gpu_comm_create_list(uint16_t dev_id,
return NULL;
}
ret = rte_gpu_info_get(dev_id, &info);
if (ret < 0) {
rte_errno = ENODEV;
return NULL;
}
comm_list = rte_zmalloc(NULL,
sizeof(struct rte_gpu_comm_list) * num_comm_items, 0);
if (comm_list == NULL) {
@ -855,7 +862,7 @@ rte_gpu_comm_create_list(uint16_t dev_id,
*/
comm_list[0].status_d = rte_gpu_mem_alloc(dev_id,
sizeof(enum rte_gpu_comm_list_status) * num_comm_items,
rte_mem_page_size());
info.page_size);
if (ret < 0) {
rte_errno = ENOMEM;
return NULL;

View File

@ -59,7 +59,9 @@ struct rte_gpu_info {
uint32_t processor_count;
/** Total memory available on device. */
size_t total_memory;
/* Local NUMA memory ID. -1 if unknown. */
/** GPU memory page size. */
size_t page_size;
/** Local NUMA memory ID. -1 if unknown. */
int16_t numa_node;
};