perf dso: Minor refactor to allow clang's Wthread-safety analysis

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>
This commit is contained in:
Ian Rogers 2025-05-19 15:46:43 -07:00 committed by Arnaldo Carvalho de Melo
parent ba5f102eec
commit ab2c742d75

View 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);
}
}