aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Bakita <jbakita@cs.unc.edu>2024-12-19 13:32:30 -0500
committerJoshua Bakita <jbakita@cs.unc.edu>2024-12-19 13:32:30 -0500
commit147c69f31f25c3dc79b7943a0c56c171fe306682 (patch)
treee7b345b806871ac1ee3daf1eaab5bc54847dbaad
parentde331f42ab6efd7739c9d02594bc796421779a5f (diff)
Check for read() errors on procfs files during libsmctrl_get_gpc_info()
Also update a comment
-rw-r--r--libsmctrl.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/libsmctrl.c b/libsmctrl.c
index 7debe3a..30edb32 100644
--- a/libsmctrl.c
+++ b/libsmctrl.c
@@ -460,16 +460,20 @@ void libsmctrl_set_stream_mask_ext(void* stream, uint128_t mask) {
460// Read an integer from a file in `/proc` 460// Read an integer from a file in `/proc`
461static int read_int_procfile(char* filename, uint64_t* out) { 461static int read_int_procfile(char* filename, uint64_t* out) {
462 char f_data[18] = {0}; 462 char f_data[18] = {0};
463 size_t ret;
463 int fd = open(filename, O_RDONLY); 464 int fd = open(filename, O_RDONLY);
464 if (fd == -1) 465 if (fd == -1)
465 return errno; 466 return errno;
466 read(fd, f_data, 18); 467 ret = read(fd, f_data, 18);
468 if (ret == -1)
469 return errno;
467 close(fd); 470 close(fd);
468 *out = strtoll(f_data, NULL, 16); 471 *out = strtoll(f_data, NULL, 16);
469 return 0; 472 return 0;
470} 473}
471 474
472// We support up to 12 GPCs per GPU, and up to 16 GPUs. 475// We support up to 64 TPCs, up to 12 GPCs per GPU, and up to 16 GPUs.
476// TODO: Handle GPUs with greater than 64 TPCs (e.g. some H100 variants)
473static uint64_t tpc_mask_per_gpc_per_dev[16][12]; 477static uint64_t tpc_mask_per_gpc_per_dev[16][12];
474// Output mask is vtpc-indexed (virtual TPC) 478// Output mask is vtpc-indexed (virtual TPC)
475int libsmctrl_get_gpc_info(uint32_t* num_enabled_gpcs, uint64_t** tpcs_for_gpc, int dev) { 479int libsmctrl_get_gpc_info(uint32_t* num_enabled_gpcs, uint64_t** tpcs_for_gpc, int dev) {