From 7745f4f6c92fcd13aa55822b1287bee92151409c Mon Sep 17 00:00:00 2001 From: "Pryor, Adam" Date: Wed, 26 Feb 2025 17:16:41 -0600 Subject: [PATCH] SWDEV-495057 Check video and render groups (#121) Change-Id: I0a96dfbd84ae84fa29f41e1fe5ea89c05c5e5e7e Signed-off-by: adapryor --- amdsmi_cli/amdsmi_commands.py | 23 +++++++++++++++++++++++ amdsmi_cli/amdsmi_helpers.py | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/amdsmi_cli/amdsmi_commands.py b/amdsmi_cli/amdsmi_commands.py index 806102af45..c4ac8ac1ac 100644 --- a/amdsmi_cli/amdsmi_commands.py +++ b/amdsmi_cli/amdsmi_commands.py @@ -49,6 +49,7 @@ class AMDSMICommands(): self.cpu_handles = [] self.core_handles = [] self.stop = '' + self.group_check_printed = False amdsmi_init_flag = self.helpers.get_amdsmi_init_flag() logging.debug(f"AMDSMI Init Flag: {amdsmi_init_flag}") @@ -199,6 +200,8 @@ class AMDSMICommands(): if args.gpu == None: args.gpu = self.device_handles + self.helpers.check_required_groups() + # Handle multiple GPUs handled_multiple_gpus, device_handle = self.helpers.handle_gpus(args, self.logger, self.list) if handled_multiple_gpus: @@ -382,6 +385,8 @@ class AMDSMICommands(): args.vram, args.cache, args.board, args.process_isolation, args.clock] + self.helpers.check_required_groups() + if self.helpers.is_linux() and self.helpers.is_baremetal(): if partition: args.partition = partition @@ -1445,6 +1450,10 @@ class AMDSMICommands(): if args.gpu == None: args.gpu = self.device_handles + if not self.group_check_printed: + self.helpers.check_required_groups() + self.group_check_printed = True + # Handle watch logic, will only enter this block once if args.watch: self.helpers.handle_watch(args=args, subcommand=self.metric_gpu, logger=self.logger) @@ -3297,6 +3306,8 @@ class AMDSMICommands(): # Clear the table header self.logger.table_header = ''.rjust(12) + self.helpers.check_required_groups() + # Populate the possible gpus topo_values = [] for src_gpu_index, src_gpu in enumerate(args.gpu): @@ -4571,6 +4582,8 @@ class AMDSMICommands(): if core: args.core = core + self.helpers.check_required_groups() + # Check if a GPU argument has been set gpu_args_enabled = False gpu_attributes = ["fan", "perf_level", "profile", "perf_determinism", "compute_partition", @@ -4715,6 +4728,8 @@ class AMDSMICommands(): if args.gpu == None: args.gpu = self.device_handles + self.helpers.check_required_groups() + # Handle multiple GPUs handled_multiple_gpus, device_handle = self.helpers.handle_gpus(args, self.logger, self.reset) if handled_multiple_gpus: @@ -4951,6 +4966,10 @@ class AMDSMICommands(): if args.gpu == None: args.gpu = self.device_handles + if not self.group_check_printed: + self.helpers.check_required_groups() + self.group_check_printed = True + # If all arguments are False, the print all values # Don't include process in this logic as it's an optional edge case if not any([args.power_usage, args.temperature, args.gfx, args.mem, @@ -5507,6 +5526,8 @@ class AMDSMICommands(): # Clear the table header self.logger.table_header = ''.rjust(7) + self.helpers.check_required_groups() + # Populate the possible gpus and their bdfs xgmi_values = [] for gpu in args.gpu: @@ -5751,6 +5772,8 @@ class AMDSMICommands(): if accelerator: args.accelerator = accelerator + self.helpers.check_required_groups() + ########################################### # amd-smi partition (no args) # ########################################### diff --git a/amdsmi_cli/amdsmi_helpers.py b/amdsmi_cli/amdsmi_helpers.py index 67a4f09d46..65c4ac8679 100644 --- a/amdsmi_cli/amdsmi_helpers.py +++ b/amdsmi_cli/amdsmi_helpers.py @@ -22,6 +22,7 @@ import logging import math import os +import grp import platform import sys import time @@ -985,3 +986,24 @@ class AMDSMIHelpers(): title += ": " for i in self.progressbar(range(timeInSeconds), title, 40): time.sleep(1) + + def check_required_groups(self): + """ + Check if the current user is a member of the required groups. + If not, log a warning. + """ + required_groups = {'video', 'render'} + try: + user_groups = {grp.getgrgid(gid).gr_name for gid in os.getgroups()} + except Exception as e: + logging.warning("Unable to determine group memberships: %s", e) + return + + missing_groups = required_groups - user_groups + if missing_groups: + msg = ( + "WARNING: User is missing the following required groups: %s. " + "Please add user to these groups." + ) % ", ".join(sorted(missing_groups)) + print(msg) + logging.warning(msg)