@@ -1116,69 +1116,95 @@ def test_power_module(
11161116 print_verbose (
11171117 " Skipping power set operations due to insufficient permissions"
11181118 )
1119- elif properties .canControl :
1120- if limit_ext2_available and requested_limit is not None :
1121- rc = pz .zesPowerSetLimitsExt2 (power_handles [i ], requested_limit )
1122- if check_rc (f"zesPowerSetLimitsExt2(power { i } , { requested_limit } )" , rc ):
1123- print_verbose (f" Power limit (Ext2) set to { requested_limit } mW" )
1124- read_back = c_uint32 (0 )
1125- rc = pz .zesPowerGetLimitsExt2 (power_handles [i ], byref (read_back ))
1126- if check_rc (f"zesPowerGetLimitsExt2(power { i } , verify)" , rc ):
1127- if read_back .value == requested_limit :
1128- print_verbose (
1129- f" Read back power limit (Ext2): { read_back .value } mW (OK)"
1130- )
1131- else :
1132- print_verbose (
1133- f" Warning: requested power limit { requested_limit } mW "
1134- f"does not match applied limit { read_back .value } mW"
1135- )
1136-
1137- # Restore the limit read before the test
1138- rc = pz .zesPowerSetLimitsExt2 (power_handles [i ], limit_ext2 .value )
1139- if check_rc (f"zesPowerSetLimitsExt2(power { i } , restore)" , rc ):
1119+ else :
1120+ # Power limit control and energy threshold support are reported independently
1121+ if requested_limit is not None :
1122+ if not properties .canControl :
11401123 print_verbose (
1141- f " Restored power limit (Ext2) to { limit_ext2 . value } mW "
1124+ " Skipping zesPowerSetLimitsExt2 since the domain cannot be controlled "
11421125 )
1143-
1144- if energy_threshold is not None and requested_threshold is not None :
1145- rc = pz .zesPowerSetEnergyThreshold (
1146- power_handles [i ], requested_threshold
1147- )
1148- if check_rc (
1149- f"zesPowerSetEnergyThreshold(power { i } , { requested_threshold } )" , rc
1150- ):
1126+ elif not limit_ext2_available :
11511127 print_verbose (
1152- f" Energy threshold set to { requested_threshold } J"
1153- )
1154- read_back_threshold = pz .zes_energy_threshold_t ()
1155- rc = pz .zesPowerGetEnergyThreshold (
1156- power_handles [i ], byref (read_back_threshold )
1128+ " Skipping zesPowerSetLimitsExt2 since zesPowerGetLimitsExt2 is not available"
11571129 )
1158- if check_rc (f"zesPowerGetEnergyThreshold(power { i } , verify)" , rc ):
1130+ else :
1131+ rc = pz .zesPowerSetLimitsExt2 (power_handles [i ], requested_limit )
1132+ if check_rc (
1133+ f"zesPowerSetLimitsExt2(power { i } , { requested_limit } )" , rc
1134+ ):
1135+ print_verbose (
1136+ f" Power limit (Ext2) set to { requested_limit } mW"
1137+ )
1138+ read_back = c_uint32 (0 )
1139+ rc = pz .zesPowerGetLimitsExt2 (
1140+ power_handles [i ], byref (read_back )
1141+ )
1142+ if check_rc (f"zesPowerGetLimitsExt2(power { i } , verify)" , rc ):
1143+ if read_back .value == requested_limit :
1144+ print_verbose (
1145+ f" Read back power limit (Ext2): { read_back .value } mW (OK)"
1146+ )
1147+ else :
1148+ print_verbose (
1149+ f" Warning: requested power limit { requested_limit } mW "
1150+ f"does not match applied limit { read_back .value } mW"
1151+ )
1152+
1153+ # Restore the limit read before the test
1154+ rc = pz .zesPowerSetLimitsExt2 (power_handles [i ], limit_ext2 .value )
1155+ if check_rc (f"zesPowerSetLimitsExt2(power { i } , restore)" , rc ):
11591156 print_verbose (
1160- f" Read back energy threshold: { read_back_threshold .threshold } J "
1161- f"(enabled: { bool (read_back_threshold .enable )} , "
1162- f"process ID: 0x{ read_back_threshold .processId :X} )"
1157+ f" Restored power limit (Ext2) to { limit_ext2 .value } mW"
11631158 )
11641159
1165- # An energy threshold cannot be disabled, so only an enabled one can be restored
1166- if energy_threshold .enable :
1160+ if requested_threshold is not None :
1161+ if not properties .isEnergyThresholdSupported :
1162+ print_verbose (
1163+ " Skipping zesPowerSetEnergyThreshold since the domain does not support energy thresholds"
1164+ )
1165+ elif energy_threshold is None :
1166+ print_verbose (
1167+ " Skipping zesPowerSetEnergyThreshold since zesPowerGetEnergyThreshold failed"
1168+ )
1169+ else :
11671170 rc = pz .zesPowerSetEnergyThreshold (
1168- power_handles [i ], energy_threshold . threshold
1171+ power_handles [i ], requested_threshold
11691172 )
1170- if check_rc (f"zesPowerSetEnergyThreshold(power { i } , restore)" , rc ):
1173+ if check_rc (
1174+ f"zesPowerSetEnergyThreshold(power { i } , { requested_threshold } )" ,
1175+ rc ,
1176+ ):
11711177 print_verbose (
1172- f" Restored energy threshold to { energy_threshold .threshold } J"
1178+ f" Energy threshold set to { requested_threshold } J"
1179+ )
1180+ read_back_threshold = pz .zes_energy_threshold_t ()
1181+ rc = pz .zesPowerGetEnergyThreshold (
1182+ power_handles [i ], byref (read_back_threshold )
1183+ )
1184+ if check_rc (
1185+ f"zesPowerGetEnergyThreshold(power { i } , verify)" , rc
1186+ ):
1187+ print_verbose (
1188+ f" Read back energy threshold: { read_back_threshold .threshold } J "
1189+ f"(enabled: { bool (read_back_threshold .enable )} , "
1190+ f"process ID: 0x{ read_back_threshold .processId :X} )"
1191+ )
1192+
1193+ # An energy threshold cannot be disabled, so only an enabled one can be restored
1194+ if energy_threshold .enable :
1195+ rc = pz .zesPowerSetEnergyThreshold (
1196+ power_handles [i ], energy_threshold .threshold
1197+ )
1198+ if check_rc (
1199+ f"zesPowerSetEnergyThreshold(power { i } , restore)" , rc
1200+ ):
1201+ print_verbose (
1202+ f" Restored energy threshold to { energy_threshold .threshold } J"
1203+ )
1204+ else :
1205+ print_verbose (
1206+ " Energy threshold was not enabled before the test and cannot be disabled"
11731207 )
1174- else :
1175- print_verbose (
1176- " Energy threshold was not enabled before the test and cannot be disabled"
1177- )
1178- elif requested_limit is not None or requested_threshold is not None :
1179- print_verbose (
1180- " Skipping power set operations since the domain cannot be controlled"
1181- )
11821208
11831209 if properties .onSubdevice or limit_descs is None :
11841210 continue
0 commit comments