diff options
author | Joshua Bakita <bakitajoshua@gmail.com> | 2023-03-15 18:33:32 -0400 |
---|---|---|
committer | Joshua Bakita <bakitajoshua@gmail.com> | 2023-03-15 18:33:32 -0400 |
commit | d827c6c152c8dd52463f82ef11ccdfc66083a9db (patch) | |
tree | 642cc6684b1e8d026a088f7151dc522bc681b5ac /libsmctrl.c | |
parent | 7db0d3088a6e25c7c64999a20267f55751571dee (diff) |
Correct a sign-extension issue in libsmctrl_get_gpc_info()
This function would previously would yield invalid results for
GPUs with more than 31 TPCs.
Diffstat (limited to 'libsmctrl.c')
-rw-r--r-- | libsmctrl.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libsmctrl.c b/libsmctrl.c index 69b19a1..640001a 100644 --- a/libsmctrl.c +++ b/libsmctrl.c | |||
@@ -281,6 +281,7 @@ static int read_int_procfile(char* filename, uint64_t* out) { | |||
281 | } | 281 | } |
282 | 282 | ||
283 | static uint64_t tpc_mask_per_gpc_per_dev[16][12]; | 283 | static uint64_t tpc_mask_per_gpc_per_dev[16][12]; |
284 | // Output mask is vtpc-indexed (virtual TPC) | ||
284 | int libsmctrl_get_gpc_info(uint32_t* num_enabled_gpcs, uint64_t** tpcs_for_gpc, int dev) { | 285 | int libsmctrl_get_gpc_info(uint32_t* num_enabled_gpcs, uint64_t** tpcs_for_gpc, int dev) { |
285 | uint32_t i, j, vtpc_idx = 0; | 286 | uint32_t i, j, vtpc_idx = 0; |
286 | uint64_t gpc_mask, num_tpc_per_gpc, max_gpcs, gpc_tpc_mask; | 287 | uint64_t gpc_mask, num_tpc_per_gpc, max_gpcs, gpc_tpc_mask; |
@@ -322,7 +323,7 @@ int libsmctrl_get_gpc_info(uint32_t* num_enabled_gpcs, uint64_t** tpcs_for_gpc, | |||
322 | // Skip disabled TPCs | 323 | // Skip disabled TPCs |
323 | if ((1 << j) & gpc_tpc_mask) | 324 | if ((1 << j) & gpc_tpc_mask) |
324 | continue; | 325 | continue; |
325 | *tpc_mask |= (1 << vtpc_idx); | 326 | *tpc_mask |= (1ull << vtpc_idx); |
326 | vtpc_idx++; | 327 | vtpc_idx++; |
327 | } | 328 | } |
328 | } | 329 | } |