Messages in this thread | | | Date | Wed, 24 May 2023 14:41:33 -0700 | From | Nathan Chancellor <> | Subject | Re: [PATCH v4 3/4] perf/core: Remove pmu linear searching code |
| |
Hi Ravi,
+ arm64 KVM folks
On Thu, May 04, 2023 at 04:30:02PM +0530, Ravi Bangoria wrote: > Searching for the right pmu by iterating over all pmus is no longer > required since all pmus now *must* be present in the 'pmu_idr' list. > So, remove linear searching code. > > Signed-off-by: Ravi Bangoria <ravi.bangoria@amd.com> > --- > kernel/events/core.c | 37 +++++++++++++------------------------ > 1 file changed, 13 insertions(+), 24 deletions(-) > > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 0695bb9fbbb6..eba2b8595115 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -11630,38 +11630,27 @@ static struct pmu *perf_init_event(struct perf_event *event) > } > > again: > + ret = -ENOENT; > rcu_read_lock(); > pmu = idr_find(&pmu_idr, type); > rcu_read_unlock(); > - if (pmu) { > - if (event->attr.type != type && type != PERF_TYPE_RAW && > - !(pmu->capabilities & PERF_PMU_CAP_EXTENDED_HW_TYPE)) > - goto fail; > - > - ret = perf_try_init_event(pmu, event); > - if (ret == -ENOENT && event->attr.type != type && !extended_type) { > - type = event->attr.type; > - goto again; > - } > + if (!pmu) > + goto fail; > > - if (ret) > - pmu = ERR_PTR(ret); > + if (event->attr.type != type && type != PERF_TYPE_RAW && > + !(pmu->capabilities & PERF_PMU_CAP_EXTENDED_HW_TYPE)) > + goto fail; > > - goto unlock; > + ret = perf_try_init_event(pmu, event); > + if (ret == -ENOENT && event->attr.type != type && !extended_type) { > + type = event->attr.type; > + goto again; > } > > - list_for_each_entry_rcu(pmu, &pmus, entry, lockdep_is_held(&pmus_srcu)) { > - ret = perf_try_init_event(pmu, event); > - if (!ret) > - goto unlock; > - > - if (ret != -ENOENT) { > - pmu = ERR_PTR(ret); > - goto unlock; > - } > - } > fail: > - pmu = ERR_PTR(-ENOENT); > + if (ret) > + pmu = ERR_PTR(ret); > + > unlock: > srcu_read_unlock(&pmus_srcu, idx); > > -- > 2.40.0 >
My apologies if this has already been reported or fixed already, I did a search of lore.kernel.org and did not find anything. This patch as commit 9551fbb64d09 ("perf/core: Remove pmu linear searching code") in -next breaks starting QEMU with KVM enabled on two of my arm64 machines:
$ qemu-system-aarch64 \ -display none \ -nodefaults \ -machine virt,gic-version=max \ -append 'console=ttyAMA0 earlycon' \ -kernel arch/arm64/boot/Image.gz \ -initrd rootfs.cpio \ -cpu host \ -enable-kvm \ -m 512m \ -smp 8 \ -serial mon:stdio qemu-system-aarch64: PMU: KVM_SET_DEVICE_ATTR: No such device qemu-system-aarch64: failed to set irq for PMU
In the kernel log, I see
[ 42.944952] kvm: pmu event creation failed -2
I am not sure if this issue is unexpected as a result of this change or if there is something that needs to change on the arm64 KVM side (it appears the kernel message comes from arch/arm64/kvm/pmu-emul.c).
If there is any further information I can provide or patches I can test, I am more than happy to do so.
Cheers, Nathan
# bad: [cf09e328589a2ed7f6c8d90f2edb697fb4f8a96b] Add linux-next specific files for 20230524 # good: [27e462c8fad4bf04ec4f81f8539ce6fa947ead3a] Merge tag 'xtensa-20230523' of https://github.com/jcmvbkbc/linux-xtensa git bisect start 'cf09e328589a2ed7f6c8d90f2edb697fb4f8a96b' '27e462c8fad4bf04ec4f81f8539ce6fa947ead3a' # good: [a20d8ab9e26daaeeaf971139b736981cf164ab0a] Merge branch 'for-linux-next' of git://anongit.freedesktop.org/drm/drm-misc git bisect good a20d8ab9e26daaeeaf971139b736981cf164ab0a # good: [2714032dfd641b22695e14efd5f9dff08a5e3245] Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git git bisect good 2714032dfd641b22695e14efd5f9dff08a5e3245 # bad: [b2bc2854ec87557033538aa9290f70b9141a6653] Merge branch 'for-leds-next' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git git bisect bad b2bc2854ec87557033538aa9290f70b9141a6653 # good: [20d4044f23c7724020b6c7d34ccee9bb929d1078] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git git bisect good 20d4044f23c7724020b6c7d34ccee9bb929d1078 # bad: [c3cab2fce7b318ee2edf148b1436f3a3864ae773] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git git bisect bad c3cab2fce7b318ee2edf148b1436f3a3864ae773 # bad: [af75e6871092fc1f9fa039132d5667f1e0a47a0a] Merge branch into tip/master: 'sched/core' git bisect bad af75e6871092fc1f9fa039132d5667f1e0a47a0a # good: [c50a7b40a2f50403c3f58f1c27a85e4c5d2e0865] Merge branch into tip/master: 'objtool/core' git bisect good c50a7b40a2f50403c3f58f1c27a85e4c5d2e0865 # good: [519fabc7aaba3f0847cf37d5f9a5740c370eb777] psi: remove 500ms min window size limitation for triggers git bisect good 519fabc7aaba3f0847cf37d5f9a5740c370eb777 # bad: [b85c6694924e9f09a40a2e0a3798f3945eaa6fda] Merge branch into tip/master: 'perf/core' git bisect bad b85c6694924e9f09a40a2e0a3798f3945eaa6fda # bad: [9551fbb64d094cc105964716224adeb7765df8fd] perf/core: Remove pmu linear searching code git bisect bad 9551fbb64d094cc105964716224adeb7765df8fd # good: [2fad201fe38ff9a692acedb1990ece2c52a29f95] perf/ibs: Fix interface via core pmu events git bisect good 2fad201fe38ff9a692acedb1990ece2c52a29f95 # first bad commit: [9551fbb64d094cc105964716224adeb7765df8fd] perf/core: Remove pmu linear searching code
| |