]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
perf test hwmon_pmu: Fix event file location
authorIan Rogers <irogers@google.com>
Fri, 6 Dec 2024 04:23:06 +0000 (20:23 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Mon, 9 Dec 2024 23:00:26 +0000 (15:00 -0800)
The temp directory is made and a known fake hwmon PMU created within
it. Prior to this fix the events were being incorrectly written to the
temp directory rather than the fake PMU directory. This didn't impact
the test as the directory fd matched the wrong location, but it
doesn't mirror what a hwmon PMU would actually look like.

Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@kernel.org>
Link: https://lore.kernel.org/r/20241206042306.1055913-2-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/tests/hwmon_pmu.c

index f8bcee9660d53324cf00deba1a485ec4b449aa7d..d2b066a2b557aa237784b1aa25d26edca9d46b98 100644 (file)
@@ -65,7 +65,7 @@ static struct perf_pmu *test_pmu_get(char *dir, size_t sz)
                { "temp2_label", "test hwmon event2\n", },
                { "temp2_input", "50000\n", },
        };
-       int dirfd, file;
+       int hwmon_dirfd = -1, test_dirfd = -1, file;
        struct perf_pmu *hwm = NULL;
        ssize_t len;
 
@@ -76,19 +76,24 @@ static struct perf_pmu *test_pmu_get(char *dir, size_t sz)
                dir[0] = '\0';
                return NULL;
        }
-       dirfd = open(dir, O_DIRECTORY);
-       if (dirfd < 0) {
+       test_dirfd = open(dir, O_PATH|O_DIRECTORY);
+       if (test_dirfd < 0) {
                pr_err("Failed to open test directory \"%s\"\n", dir);
                goto err_out;
        }
 
        /* Create the test hwmon directory and give it a name. */
-       if (mkdirat(dirfd, "hwmon1234", 0755) < 0) {
+       if (mkdirat(test_dirfd, "hwmon1234", 0755) < 0) {
                pr_err("Failed to mkdir hwmon directory\n");
                goto err_out;
        }
-       file = openat(dirfd, "hwmon1234/name", O_WRONLY | O_CREAT, 0600);
-       if (!file) {
+       hwmon_dirfd = openat(test_dirfd, "hwmon1234", O_DIRECTORY);
+       if (hwmon_dirfd < 0) {
+               pr_err("Failed to open test hwmon directory \"%s/hwmon1234\"\n", dir);
+               goto err_out;
+       }
+       file = openat(hwmon_dirfd, "name", O_WRONLY | O_CREAT, 0600);
+       if (file < 0) {
                pr_err("Failed to open for writing file \"name\"\n");
                goto err_out;
        }
@@ -104,8 +109,8 @@ static struct perf_pmu *test_pmu_get(char *dir, size_t sz)
        for (size_t i = 0; i < ARRAY_SIZE(test_items); i++) {
                const struct test_item *item = &test_items[i];
 
-               file = openat(dirfd, item->name, O_WRONLY | O_CREAT, 0600);
-               if (!file) {
+               file = openat(hwmon_dirfd, item->name, O_WRONLY | O_CREAT, 0600);
+               if (file < 0) {
                        pr_err("Failed to open for writing file \"%s\"\n", item->name);
                        goto err_out;
                }
@@ -119,16 +124,18 @@ static struct perf_pmu *test_pmu_get(char *dir, size_t sz)
        }
 
        /* Make the PMU reading the files created above. */
-       hwm = perf_pmus__add_test_hwmon_pmu(dirfd, "hwmon1234", test_hwmon_name);
+       hwm = perf_pmus__add_test_hwmon_pmu(hwmon_dirfd, "hwmon1234", test_hwmon_name);
        if (!hwm)
                pr_err("Test hwmon creation failed\n");
 
 err_out:
        if (!hwm) {
                test_pmu_put(dir, hwm);
-               if (dirfd >= 0)
-                       close(dirfd);
+               if (hwmon_dirfd >= 0)
+                       close(hwmon_dirfd);
        }
+       if (test_dirfd >= 0)
+               close(test_dirfd);
        return hwm;
 }