Markus Elfring <markus.elfr...@web.de> writes: > From: Markus Elfring <elfr...@users.sourceforge.net> > Date: Mon, 16 Sep 2024 19:25:00 +0200 > > Scope-based resource management became supported for some > programming interfaces by contributions of Peter Zijlstra on 2023-05-26. > See also the commit 54da6a0924311c7cf5015533991e44fb8eb12773 ("locking: > Introduce __cleanup() based infrastructure"). > > * Thus replace local_irq_save() and local_irq_restore() calls by calls > of the macro “guard(irqsave)”. > > * Omit the local variables “flags” and “irq_flags”. > > * Replace selected usage of the label “out” by a few return statements. > > > This issue was detected by using the Coccinelle software. > > Signed-off-by: Markus Elfring <elfr...@users.sourceforge.net> > --- > arch/powerpc/perf/core-book3s.c | 102 +++++++++++++------------------- > 1 file changed, 42 insertions(+), 60 deletions(-)
These mostly look good. I don't think the change to power_pmu_event_init() is an improvement. I'll drop that hunk when applying, or you can send a v2 without that change if you prefer. cheers > @@ -1996,7 +1980,7 @@ static bool is_event_blacklisted(u64 ev) > static int power_pmu_event_init(struct perf_event *event) > { > u64 ev; > - unsigned long flags, irq_flags; > + unsigned long flags; > struct perf_event *ctrs[MAX_HWEVENTS]; > u64 events[MAX_HWEVENTS]; > unsigned int cflags[MAX_HWEVENTS]; > @@ -2115,43 +2099,41 @@ static int power_pmu_event_init(struct perf_event > *event) > if (check_excludes(ctrs, cflags, n, 1)) > return -EINVAL; > > - local_irq_save(irq_flags); > - cpuhw = this_cpu_ptr(&cpu_hw_events); > + { > + guard(irqsave)(); > + cpuhw = this_cpu_ptr(&cpu_hw_events); > > - err = power_check_constraints(cpuhw, events, cflags, n + 1, ctrs); > + err = power_check_constraints(cpuhw, events, cflags, n + 1, > ctrs); > > - if (has_branch_stack(event)) { > - u64 bhrb_filter = -1; > + if (has_branch_stack(event)) { > + u64 bhrb_filter = -1; > > - /* > - * Currently no PMU supports having multiple branch filters > - * at the same time. Branch filters are set via MMCRA IFM[32:33] > - * bits for Power8 and above. Return EOPNOTSUPP when multiple > - * branch filters are requested in the event attr. > - * > - * When opening event via perf_event_open(), branch_sample_type > - * gets adjusted in perf_copy_attr(). Kernel will automatically > - * adjust the branch_sample_type based on the event modifier > - * settings to include PERF_SAMPLE_BRANCH_PLM_ALL. Hence drop > - * the check for PERF_SAMPLE_BRANCH_PLM_ALL. > - */ > - if (hweight64(event->attr.branch_sample_type & > ~PERF_SAMPLE_BRANCH_PLM_ALL) > 1) { > - local_irq_restore(irq_flags); > - return -EOPNOTSUPP; > - } > + /* > + * Currently no PMU supports having multiple branch > filters > + * at the same time. Branch filters are set via MMCRA > IFM[32:33] > + * bits for Power8 and above. Return EOPNOTSUPP when > multiple > + * branch filters are requested in the event attr. > + * > + * When opening event via perf_event_open(), > branch_sample_type > + * gets adjusted in perf_copy_attr(). Kernel will > automatically > + * adjust the branch_sample_type based on the event > modifier > + * settings to include PERF_SAMPLE_BRANCH_PLM_ALL. > Hence drop > + * the check for PERF_SAMPLE_BRANCH_PLM_ALL. > + */ > + if (hweight64(event->attr.branch_sample_type & > ~PERF_SAMPLE_BRANCH_PLM_ALL) > + > 1) > + return -EOPNOTSUPP; > > - if (ppmu->bhrb_filter_map) > - bhrb_filter = ppmu->bhrb_filter_map( > - event->attr.branch_sample_type); > + if (ppmu->bhrb_filter_map) > + bhrb_filter = > ppmu->bhrb_filter_map(event->attr.branch_sample_type); > > - if (bhrb_filter == -1) { > - local_irq_restore(irq_flags); > - return -EOPNOTSUPP; > + if (bhrb_filter == -1) > + return -EOPNOTSUPP; > + > + cpuhw->bhrb_filter = bhrb_filter; > } > - cpuhw->bhrb_filter = bhrb_filter; > } > > - local_irq_restore(irq_flags); > if (err) > return -EINVAL; > > -- > 2.46.0