From 147c69f31f25c3dc79b7943a0c56c171fe306682 Mon Sep 17 00:00:00 2001 From: Joshua Bakita Date: Thu, 19 Dec 2024 13:32:30 -0500 Subject: Check for read() errors on procfs files during libsmctrl_get_gpc_info() Also update a comment --- libsmctrl.c | 8 ++++++-- 1 file 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) { // Read an integer from a file in `/proc` static int read_int_procfile(char* filename, uint64_t* out) { char f_data[18] = {0}; + size_t ret; int fd = open(filename, O_RDONLY); if (fd == -1) return errno; - read(fd, f_data, 18); + ret = read(fd, f_data, 18); + if (ret == -1) + return errno; close(fd); *out = strtoll(f_data, NULL, 16); return 0; } -// We support up to 12 GPCs per GPU, and up to 16 GPUs. +// We support up to 64 TPCs, up to 12 GPCs per GPU, and up to 16 GPUs. +// TODO: Handle GPUs with greater than 64 TPCs (e.g. some H100 variants) static uint64_t tpc_mask_per_gpc_per_dev[16][12]; // Output mask is vtpc-indexed (virtual TPC) int libsmctrl_get_gpc_info(uint32_t* num_enabled_gpcs, uint64_t** tpcs_for_gpc, int dev) { -- cgit v1.2.2