libhsakmt: Revert "libhsakmt: Update FD creation logic"

This reverts commit fd48f14ceb.
Current amdgpu exposes one render node for one gpu node/partition,
revert to previous way to open render node at Thunk.

Signed-off-by: Xiaogang Chen<Xiaogang.Chen@amd.com>
Change-Id: I436be74f8e872a7ab5c4a1420b4ea884f5a00e57
This commit is contained in:
Xiaogang Chen
2023-05-24 15:58:14 -05:00
committed by Xiaogang Chen
parent 478a68d49c
commit cc4fb2d1a9
3 changed files with 15 additions and 27 deletions
+13 -25
View File
@@ -1933,32 +1933,23 @@ static HSAKMT_STATUS get_process_apertures(
*/
#define DRM_FIRST_RENDER_NODE 128
#define DRM_LAST_RENDER_NODE 255
#define DRM_MAX_PARTITIONS 8
static int drm_render_fds[DRM_LAST_RENDER_NODE + 1 - DRM_FIRST_RENDER_NODE][DRM_MAX_PARTITIONS];
static uint32_t gpu_id_fd_map[DRM_LAST_RENDER_NODE + 1 - DRM_FIRST_RENDER_NODE][DRM_MAX_PARTITIONS];
static int drm_render_fds[DRM_LAST_RENDER_NODE + 1 - DRM_FIRST_RENDER_NODE];
int open_drm_render_device(int minor, uint32_t gpu_id)
int open_drm_render_device(int minor)
{
char path[128];
int fd, render_idx, gpu_id_idx;
int index, fd;
if (minor < DRM_FIRST_RENDER_NODE || minor > DRM_LAST_RENDER_NODE) {
pr_err("DRM render minor %d out of range [%d, %d]\n", minor,
DRM_FIRST_RENDER_NODE, DRM_LAST_RENDER_NODE);
return -EINVAL;
}
render_idx = minor - DRM_FIRST_RENDER_NODE;
index = minor - DRM_FIRST_RENDER_NODE;
/* If the render node was already opened, keep using the same FD */
for (gpu_id_idx = 0; gpu_id_idx < DRM_MAX_PARTITIONS &&
gpu_id_fd_map[render_idx][gpu_id_idx] != 0; gpu_id_idx++)
if (gpu_id_fd_map[render_idx][gpu_id_idx] == gpu_id)
return drm_render_fds[render_idx][gpu_id_idx];
if (gpu_id_idx >= DRM_MAX_PARTITIONS) {
pr_err("Requesting more FDs for same render node than max supported partitions!\n");
return -EINVAL;
}
if (drm_render_fds[index])
return drm_render_fds[index];
sprintf(path, "/dev/dri/renderD%d", minor);
fd = open(path, O_RDWR | O_CLOEXEC);
@@ -1970,8 +1961,7 @@ int open_drm_render_device(int minor, uint32_t gpu_id)
}
return -errno;
}
gpu_id_fd_map[render_idx][gpu_id_idx] = gpu_id;
drm_render_fds[render_idx][gpu_id_idx] = fd;
drm_render_fds[index] = fd;
return fd;
}
@@ -2362,7 +2352,7 @@ HSAKMT_STATUS fmm_init_process_apertures(unsigned int NumNodes)
/* Skip non-GPU nodes */
if (props.KFDGpuID) {
int fd = open_drm_render_device(props.DrmRenderMinor, props.KFDGpuID);
int fd = open_drm_render_device(props.DrmRenderMinor);
if (fd <= 0) {
ret = HSAKMT_STATUS_ERROR;
goto gpu_mem_init_failed;
@@ -3962,17 +3952,15 @@ static void fmm_clear_aperture(manageable_aperture_t *app)
*/
void fmm_clear_all_mem(void)
{
uint32_t i, j;
uint32_t i;
void *map_addr;
/* Close render node FDs. The child process needs to open new ones */
for (i = 0; i <= DRM_LAST_RENDER_NODE - DRM_FIRST_RENDER_NODE; i++) {
for (j = 0; j < DRM_MAX_PARTITIONS && drm_render_fds[i][j] != 0; j++) {
close(drm_render_fds[i][j]);
drm_render_fds[i][j] = 0;
gpu_id_fd_map[i][j] = 0;
for (i = 0; i <= DRM_LAST_RENDER_NODE - DRM_FIRST_RENDER_NODE; i++)
if (drm_render_fds[i]) {
close(drm_render_fds[i]);
drm_render_fds[i] = 0;
}
}
fmm_clear_aperture(&cpuvm_aperture);
fmm_clear_aperture(&svm.apertures[SVM_DEFAULT]);
+1 -1
View File
@@ -97,7 +97,7 @@ HSAKMT_STATUS fmm_register_shared_memory(const HsaSharedMemoryHandle *SharedMemo
HSAKMT_STATUS fmm_map_to_gpu_nodes(void *address, uint64_t size,
uint32_t *nodes_to_map, uint64_t num_of_nodes, uint64_t *gpuvm_address);
int open_drm_render_device(int minor, uint32_t gpu_id);
int open_drm_render_device(int minor);
void *mmap_allocate_aligned(int prot, int flags, uint64_t size, uint64_t align,
uint64_t guard_size, void *aper_base, void *aper_limit);
+1 -1
View File
@@ -694,7 +694,7 @@ static HSAKMT_STATUS topology_sysfs_check_node_supported(uint32_t sysfs_node_id,
}
/* Open DRM Render device */
ret_value = open_drm_render_device(drm_render_minor, gpu_id);
ret_value = open_drm_render_device(drm_render_minor);
if (ret_value > 0)
*is_node_supported = true;
else if (ret_value != -ENOENT && ret_value != -EPERM)