Skip to contentSkip to conversation

gpudev: add GPU page_size to info

PATCH Superseded [email protected] 2 participants 5 messages Mar 1, 2022 – Mar 8, 2022 DRM drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 gpudev: add GPU page_size to info

From: Elena Agostini <[email protected]>

Page alignment on the GPU can be different from
the CPU page alignment.

---
 drivers/gpu/cuda/cuda.c | 4 ++++
 lib/gpudev/rte_gpudev.h | 2 ++
 2 files changed, 6 insertions(+)
drivers/gpu/cuda/cuda.c +4 -0
index efb5d146f6..2f8c4684ce 100644
@@ -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
 	 */
lib/gpudev/rte_gpudev.h +2 -0
index 7e2401a4b7..971aeacfff 100644
@@ -61,6 +61,8 @@ struct rte_gpu_info {
 	size_t total_memory;
 	/* Local NUMA memory ID. -1 if unknown. */
 	int16_t numa_node;
+	/* Get GPU memory page size. */
+	size_t page_size;
 };
 
 /** Flags passed in notification callback. */
Signature · 1 line
2.17.1
#1 lore raw

PATCH 2/2 gpudev: use page_size in comm_list creation

From: Elena Agostini <[email protected]>

Memory allocated for CPU mapping the status flag in the communication list should be aligned to the GPU page size.

---
 lib/gpudev/gpudev.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
lib/gpudev/gpudev.c +8 -1
index fb1bee344c..56033f4a5f 100644
@@ -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;
Signature · 1 line
2.17.1
#2 lore raw

PATCH v2 1/2 gpudev: add GPU page_size to info

In reply to [email protected]

From: Elena Agostini <[email protected]>

Page alignment on the GPU can be different from
the CPU page alignment.

Fixes 9b8cae4d991e ("gpudev: use CPU mapping in communication list")
---
 drivers/gpu/cuda/cuda.c | 4 ++++
 lib/gpudev/rte_gpudev.h | 2 ++
 2 files changed, 6 insertions(+)
drivers/gpu/cuda/cuda.c +4 -0
index cf9e59535c..8505d39d64 100644
@@ -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
 	 */
lib/gpudev/rte_gpudev.h +2 -0
index 7e2401a4b7..971aeacfff 100644
@@ -61,6 +61,8 @@ struct rte_gpu_info {
 	size_t total_memory;
 	/* Local NUMA memory ID. -1 if unknown. */
 	int16_t numa_node;
+	/* Get GPU memory page size. */
+	size_t page_size;
 };
 
 /** Flags passed in notification callback. */
Signature · 1 line
2.17.1
#3 lore raw

PATCH v2 2/2 gpudev: use page_size in comm_list creation

From: Elena Agostini <[email protected]>

Memory allocated for CPU mapping the status flag in the communication list should be aligned to the GPU page size.

Fixes 9b8cae4d991e ("gpudev: use CPU mapping in communication list")
---
 lib/gpudev/gpudev.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
lib/gpudev/gpudev.c +8 -1
index fb1bee344c..56033f4a5f 100644
@@ -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;
Signature · 1 line
2.17.1
#4 lore raw

Re: [PATCH v2 2/2] gpudev: use page_size in comm_list creation

09/03/2022 00:59, [email protected]:

Quoted 8 lines

From: Elena Agostini <[email protected]>

Memory allocated for CPU mapping the status flag in the communication list should be aligned to the GPU page size.

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

Patches squashed and applied, thanks.