[dpdk-dev] [21.08 PATCH v4 2/2] power: refactor pstate and acpi code

Burakov, Anatoly anatoly.burakov at intel.com
Fri May 7 11:49:40 CEST 2021


On 07-May-21 3:13 AM, Richael Zhuang wrote:
>> @@ -262,18 +189,16 @@ static int
>>   power_init_for_setting_freq(struct acpi_power_info *pi)  {
>>   	FILE *f;
>> -	char fullpath[PATH_MAX];
>>   	char buf[BUFSIZ];
>>   	uint32_t i, freq;
>> -	char *s;
>> +	int ret;
>>
>> -	snprintf(fullpath, sizeof(fullpath), POWER_SYSFILE_SETSPEED,
>> -			pi->lcore_id);
>> -	f = fopen(fullpath, "rw+");
>> -	FOPEN_OR_ERR_RET(f, -1);
>> +	open_core_sysfs_file(POWER_SYSFILE_SETSPEED, pi->lcore_id, "r",
>> +			&f);
> Hi Anatoly,
> I tried to verify your patch on my arm platform,  and I found several bugs.
> 
> Here it should be "rw+", for it will write freq to POWER_SYSFILE_SETSPEED later.
> 
> Best Regards,
> Richael

<snip>

>>   	return 1;
>>   }
>> +
>> +int
>> +open_core_sysfs_file(const char *template, unsigned int core, const char
>> *mode,
>> +		FILE **f)
>> +{
>> +	char fullpath[PATH_MAX];
>> +	FILE *tmpf;
>> +
>> +	/* silenced -Wformat-nonliteral here */
>> +	snprintf(fullpath, sizeof(fullpath), template, core);
>> +	tmpf = fopen(fullpath, mode);
>> +	if (tmpf == NULL)
>> +		return -1;
>> +	*f = tmpf;
> 
> When the file that open_core_sysfs_file() opens doesn't exist, there's segmentation fault.
> Moving *f=tmpf above runs OK.
> 
>> +
>> +	return 0;
>> +}
>> +
>> +int
>> +read_core_sysfs_u32(FILE *f, uint32_t *val) {
>> +	char buf[BUFSIZ];
>> +	uint32_t fval;
>> +	char *s;
>> +
>> +	s = fgets(buf, sizeof(buf), f);
>> +	if (s == NULL)
>> +		return -1;
>> +

<snip>

>> +	/* strip off any terminating newlines */
>> +	*strchrnul(buf, '\n') = '\0';
>> +
>> +	return 0;
>> +}
>> +
>> +int
>> +write_core_sysfs_s(FILE *f, const char *str) {
>> +	int ret;
>> +
>> +	ret = fseek(f, 0, SEEK_SET);
>> +	if (ret != 0)
>> +		return -1;
>> +
>> +	ret = fputs(str, f);
>> +	if (ret != 0)
> 
> ret >=0 if success, EOF means failure.
> 

Hi Richael,

Thank you very much for testing! I'll address these issues in the next 
revision, and double-check everything else.

-- 
Thanks,
Anatoly


More information about the dev mailing list