drivers/perf/arm_smmuv3_pmu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
Same as
https://lore.kernel.org/all/20240514180050.182454-1-namhyung@kernel.org/,
we should skip `for_each_sibling_event()` for group leader since it
doesn't have the ctx yet.
Fixes: f3c0eba28704 ("perf: Add a few assertions")
Reported-by: Greg Thelen <gthelen@google.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Tuan Phan <tuanphan@os.amperecomputing.com>
Signed-off-by: Chun-Tse Shao <ctshao@google.com>
---
drivers/perf/arm_smmuv3_pmu.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/perf/arm_smmuv3_pmu.c b/drivers/perf/arm_smmuv3_pmu.c
index d5fa92ba8373..09789599fccc 100644
--- a/drivers/perf/arm_smmuv3_pmu.c
+++ b/drivers/perf/arm_smmuv3_pmu.c
@@ -431,6 +431,11 @@ static int smmu_pmu_event_init(struct perf_event *event)
return -EINVAL;
}
+ hwc->idx = -1;
+
+ if (event->group_leader == event)
+ return 0;
+
for_each_sibling_event(sibling, event->group_leader) {
if (is_software_event(sibling))
continue;
@@ -442,8 +447,6 @@ static int smmu_pmu_event_init(struct perf_event *event)
return -EINVAL;
}
- hwc->idx = -1;
-
/*
* Ensure all events are on the same cpu so all events are in the
* same cpu context, to avoid races on pmu_enable etc.
--
2.47.0.277.g8800431eea-goog
On Thu, Nov 07, 2024 at 09:59:20PM +0000, Chun-Tse Shao wrote: > Same as > https://lore.kernel.org/all/20240514180050.182454-1-namhyung@kernel.org/, > we should skip `for_each_sibling_event()` for group leader since it > doesn't have the ctx yet. > > Fixes: f3c0eba28704 ("perf: Add a few assertions") > Reported-by: Greg Thelen <gthelen@google.com> > Cc: Namhyung Kim <namhyung@kernel.org> > Cc: Robin Murphy <robin.murphy@arm.com> > Cc: Tuan Phan <tuanphan@os.amperecomputing.com> > Signed-off-by: Chun-Tse Shao <ctshao@google.com> > --- > drivers/perf/arm_smmuv3_pmu.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/perf/arm_smmuv3_pmu.c b/drivers/perf/arm_smmuv3_pmu.c > index d5fa92ba8373..09789599fccc 100644 > --- a/drivers/perf/arm_smmuv3_pmu.c > +++ b/drivers/perf/arm_smmuv3_pmu.c > @@ -431,6 +431,11 @@ static int smmu_pmu_event_init(struct perf_event *event) > return -EINVAL; > } > > + hwc->idx = -1; I think you should update the event->cpu as well. Thanks, Namhyung > + > + if (event->group_leader == event) > + return 0; > + > for_each_sibling_event(sibling, event->group_leader) { > if (is_software_event(sibling)) > continue; > @@ -442,8 +447,6 @@ static int smmu_pmu_event_init(struct perf_event *event) > return -EINVAL; > } > > - hwc->idx = -1; > - > /* > * Ensure all events are on the same cpu so all events are in the > * same cpu context, to avoid races on pmu_enable etc. > -- > 2.47.0.277.g8800431eea-goog >
Thank you for your feedback, Namhyung! Please see my v2 patch: https://lore.kernel.org/all/20241108050806.3730811-1-ctshao@google.com/ On Thu, Nov 7, 2024 at 5:23 PM Namhyung Kim <namhyung@kernel.org> wrote: > > On Thu, Nov 07, 2024 at 09:59:20PM +0000, Chun-Tse Shao wrote: > > Same as > > https://lore.kernel.org/all/20240514180050.182454-1-namhyung@kernel.org/, > > we should skip `for_each_sibling_event()` for group leader since it > > doesn't have the ctx yet. > > > > Fixes: f3c0eba28704 ("perf: Add a few assertions") > > Reported-by: Greg Thelen <gthelen@google.com> > > Cc: Namhyung Kim <namhyung@kernel.org> > > Cc: Robin Murphy <robin.murphy@arm.com> > > Cc: Tuan Phan <tuanphan@os.amperecomputing.com> > > Signed-off-by: Chun-Tse Shao <ctshao@google.com> > > --- > > drivers/perf/arm_smmuv3_pmu.c | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/perf/arm_smmuv3_pmu.c b/drivers/perf/arm_smmuv3_pmu.c > > index d5fa92ba8373..09789599fccc 100644 > > --- a/drivers/perf/arm_smmuv3_pmu.c > > +++ b/drivers/perf/arm_smmuv3_pmu.c > > @@ -431,6 +431,11 @@ static int smmu_pmu_event_init(struct perf_event *event) > > return -EINVAL; > > } > > > > + hwc->idx = -1; > > I think you should update the event->cpu as well. > > Thanks, > Namhyung > > > + > > + if (event->group_leader == event) > > + return 0; > > + > > for_each_sibling_event(sibling, event->group_leader) { > > if (is_software_event(sibling)) > > continue; > > @@ -442,8 +447,6 @@ static int smmu_pmu_event_init(struct perf_event *event) > > return -EINVAL; > > } > > > > - hwc->idx = -1; > > - > > /* > > * Ensure all events are on the same cpu so all events are in the > > * same cpu context, to avoid races on pmu_enable etc. > > -- > > 2.47.0.277.g8800431eea-goog > >
© 2016 - 2024 Red Hat, Inc.