]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf dso: Minor refactor to allow clang's Wthread-safety analysis
authorIan Rogers <irogers@google.com>
Mon, 19 May 2025 22:46:43 +0000 (15:46 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 21 May 2025 18:07:13 +0000 (15:07 -0300)
The pattern:

```
if (x) {
   lock(...)
}
block1;
if (x) {
   unlock(...)
}
```

defeats clang's -Wthread-safety analysis where it complains of locks
held on one path and not another.

Add helper functions for "block1" then restructure as:

```
if (x) {
   lock(...);
   block1();
   unlock(...);
} else {
   block1();
}
```

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Bill Wendling <morbo@google.com>
Cc: Chaitanya S Prakash <chaitanyas.prakash@arm.com>
Cc: Fei Lang <langfei@huawei.com>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Justin Stitt <justinstitt@google.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
Link: https://lore.kernel.org/r/20250519224645.1810891-1-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/dso.c

index 8619b6eea62de1fbad00feca14dd4ddc590b312c..057fcf4225ac7e0f1dcf44518295eb105dab0e9f 100644 (file)
@@ -1349,6 +1349,16 @@ struct dso *machine__findnew_kernel(struct machine *machine, const char *name,
        return dso;
 }
 
+static void __dso__set_long_name_id(struct dso *dso, const char *name, bool name_allocated)
+{
+       if (dso__long_name_allocated(dso))
+               free((char *)dso__long_name(dso));
+
+       RC_CHK_ACCESS(dso)->long_name = name;
+       RC_CHK_ACCESS(dso)->long_name_len = strlen(name);
+       dso__set_long_name_allocated(dso, name_allocated);
+}
+
 static void dso__set_long_name_id(struct dso *dso, const char *name, bool name_allocated)
 {
        struct dsos *dsos = dso__dsos(dso);
@@ -1362,18 +1372,11 @@ static void dso__set_long_name_id(struct dso *dso, const char *name, bool name_a
                 * renaming the dso.
                 */
                down_write(&dsos->lock);
-       }
-
-       if (dso__long_name_allocated(dso))
-               free((char *)dso__long_name(dso));
-
-       RC_CHK_ACCESS(dso)->long_name = name;
-       RC_CHK_ACCESS(dso)->long_name_len = strlen(name);
-       dso__set_long_name_allocated(dso, name_allocated);
-
-       if (dsos) {
+               __dso__set_long_name_id(dso, name, name_allocated);
                dsos->sorted = false;
                up_write(&dsos->lock);
+       } else {
+               __dso__set_long_name_id(dso, name, name_allocated);
        }
 }
 
@@ -1451,6 +1454,16 @@ void dso__set_long_name(struct dso *dso, const char *name, bool name_allocated)
        dso__set_long_name_id(dso, name, name_allocated);
 }
 
+static void __dso__set_short_name(struct dso *dso, const char *name, bool name_allocated)
+{
+       if (dso__short_name_allocated(dso))
+               free((char *)dso__short_name(dso));
+
+       RC_CHK_ACCESS(dso)->short_name            = name;
+       RC_CHK_ACCESS(dso)->short_name_len        = strlen(name);
+       dso__set_short_name_allocated(dso, name_allocated);
+}
+
 void dso__set_short_name(struct dso *dso, const char *name, bool name_allocated)
 {
        struct dsos *dsos = dso__dsos(dso);
@@ -1464,17 +1477,11 @@ void dso__set_short_name(struct dso *dso, const char *name, bool name_allocated)
                 * renaming the dso.
                 */
                down_write(&dsos->lock);
-       }
-       if (dso__short_name_allocated(dso))
-               free((char *)dso__short_name(dso));
-
-       RC_CHK_ACCESS(dso)->short_name            = name;
-       RC_CHK_ACCESS(dso)->short_name_len        = strlen(name);
-       dso__set_short_name_allocated(dso, name_allocated);
-
-       if (dsos) {
+               __dso__set_short_name(dso, name, name_allocated);
                dsos->sorted = false;
                up_write(&dsos->lock);
+       } else {
+               __dso__set_short_name(dso, name, name_allocated);
        }
 }