Commit ab2c742d authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarIan 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent ba5f102e
Loading
Loading
Loading
Loading
+26 −19
Original line number Diff line number Diff line
@@ -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);
	}
}