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

Reply via email to