+ if (snprintf(fullpath, sizeof(fullpath),
+ TEST_POWER_SYSFILE_SCALING_FREQ, lcore_id) < 0) {
+ return 0;
+ }
+ f = fopen(fullpath, "r");
+ if (f == NULL) {
+ return 0;
+ }
+ }
+ for (i = 0; i < MAX_LOOP; i++) {
+ fflush(f);
+ if (fgets(buf, sizeof(buf), f) == NULL)
+ goto fail_all;
+
+ cur_freq = strtoul(buf, NULL, TEST_POWER_CONVERT_TO_DECIMAL);
+ freq_conv = cur_freq;
+
+ env = rte_power_get_env();
+ if (env == PM_ENV_CPPC_CPUFREQ || env == PM_ENV_PSTATE_CPUFREQ) {
+ /* convert the frequency to nearest 100000 value
+ * Ex: if cur_freq=1396789 then freq_conv=1400000
+ * Ex: if cur_freq=800030 then freq_conv=800000
+ */
+ freq_conv = (cur_freq + TEST_FREQ_ROUNDING_DELTA)
+ / TEST_ROUND_FREQ_TO_N_100000;
+ freq_conv = freq_conv * TEST_ROUND_FREQ_TO_N_100000;
+ }
+
+ if (turbo)
+ ret = (freqs[idx] <= freq_conv ? 0 : -1);
+ else
+ ret = (freqs[idx] == freq_conv ? 0 : -1);
+
+ if (ret == 0)
+ break;
+
+ if (fseek(f, 0, SEEK_SET) < 0) {
+ printf("Fail to set file position indicator to 0\n");
+ goto fail_all;
+ }
+
+ /* wait for the value to be updated */
+ rte_delay_ms(10);