]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf pmu: Use fd rather than FILE from new_alias
authorIan Rogers <irogers@google.com>
Sun, 5 Oct 2025 18:24:11 +0000 (11:24 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 15 Oct 2025 14:59:10 +0000 (23:59 +0900)
The FILE argument was necessary for the scanner but now that
functionality is not being used we can switch to just using
io__getline which should cut down on stdio buffer usage.

Tested-by: Thomas Richter <tmricht@linux.ibm.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: James Clark <james.clark@linaro.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/pmu.c

index 876e87708b03a56810b79624275d63a7a3bf0d2a..7992bd923515a2ba25d481cd9c46991631475df5 100644 (file)
@@ -563,7 +563,7 @@ static int update_alias(const struct pmu_event *pe,
 }
 
 static int perf_pmu__new_alias(struct perf_pmu *pmu, const char *name,
-                               const char *desc, const char *val, FILE *val_fd,
+                               const char *desc, const char *val, int val_fd,
                                const struct pmu_event *pe, enum event_source src)
 {
        struct perf_pmu_alias *alias, *old_alias;
@@ -614,12 +614,15 @@ static int perf_pmu__new_alias(struct perf_pmu *pmu, const char *name,
        if (ret)
                return ret;
 
-       if (!val_fd) {
+       if (val_fd < 0) {
                alias->terms = strdup(val);
        } else {
+               char buf[256];
+               struct io io;
                size_t line_len;
 
-               ret = getline(&alias->terms, &line_len, val_fd) < 0 ? -errno : 0;
+               io__init(&io, val_fd, buf, sizeof(buf));
+               ret = io__getline(&io, &alias->terms, &line_len) < 0 ? -errno : 0;
                if (ret) {
                        pr_err("Failed to read alias %s\n", name);
                        return ret;
@@ -698,7 +701,6 @@ static int __pmu_aliases_parse(struct perf_pmu *pmu, int events_dir_fd)
        while ((evt_ent = io_dir__readdir(&event_dir))) {
                char *name = evt_ent->d_name;
                int fd;
-               FILE *file;
 
                if (!strcmp(name, ".") || !strcmp(name, ".."))
                        continue;
@@ -714,17 +716,12 @@ static int __pmu_aliases_parse(struct perf_pmu *pmu, int events_dir_fd)
                        pr_debug("Cannot open %s\n", name);
                        continue;
                }
-               file = fdopen(fd, "r");
-               if (!file) {
-                       close(fd);
-                       continue;
-               }
 
                if (perf_pmu__new_alias(pmu, name, /*desc=*/ NULL,
-                                       /*val=*/ NULL, file, /*pe=*/ NULL,
+                                       /*val=*/ NULL, fd, /*pe=*/ NULL,
                                        EVENT_SRC_SYSFS) < 0)
                        pr_debug("Cannot set up %s\n", name);
-               fclose(file);
+               close(fd);
        }
 
        pmu->sysfs_aliases_loaded = true;
@@ -1041,7 +1038,7 @@ static int pmu_add_cpu_aliases_map_callback(const struct pmu_event *pe,
 {
        struct perf_pmu *pmu = vdata;
 
-       perf_pmu__new_alias(pmu, pe->name, pe->desc, pe->event, /*val_fd=*/ NULL,
+       perf_pmu__new_alias(pmu, pe->name, pe->desc, pe->event, /*val_fd=*/ -1,
                            pe, EVENT_SRC_CPU_JSON);
        return 0;
 }
@@ -1090,7 +1087,7 @@ static int pmu_add_sys_aliases_iter_fn(const struct pmu_event *pe,
                                pe->name,
                                pe->desc,
                                pe->event,
-                               /*val_fd=*/ NULL,
+                               /*val_fd=*/ -1,
                                pe,
                                EVENT_SRC_SYS_JSON);
        }