Re: [PATCH v7 0/2] RISC-V IOMMU HPM support
Zong Li <[email protected]>
| Newsgroups | org.infradead.lists.linux-riscv,dev.linux.lists.iommu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users |
|---|---|
| Message-ID | <CANXhq0q6nkZapRCKew50azkrmR2Gyh_X7OA39uu1p-kR67QSMQ@mail.gmail.com> |
On Fri, Aug 28, 2026 at 4:49 PM Guo Ren <[email protected]> wrote: > > Hi Li Zong, > > Just two patches? Where did the riscv-iommu PMU driver patch go? > I apologize for missing the first commit. I will resend it as PATCH RESEND v7. Thank you very much for pointing this out! > -- > Best Regards > GUO Ren > > On Fri, Aug 28, 2026 at 3:07 PM Zong Li <[email protected]> wrote: > > > > This series implements support for the RISC-V IOMMU hardware performance > > monitor. > > > > The RISC-V IOMMU PMU driver is implemented as an auxiliary device driver > > created by the parent RISC-V IOMMU driver. Therefore, the child driver > > can obtain resources and information from the parent device, such as > > the MMIO base address and IRQ number. > > > > The thrid commit adds raw spinlock for race condition when PCI MSI/MSI-X > > on IMSIC. As the commit message mentioned: > > Events are bound to one CPU and the interrupt is affine to it, so the > > perf callbacks running with interrupts disabled would be enough to > > exclude the handler. But PCI MSI/MSI-X on IMSIC breaks that: > > The irqchip sets IRQCHIP_MOVE_DEFERRED, so irq_set_affinity() reports > > success while only recording the request, and the move is applied in > > interrupt context upon the next device interrupt. Until then the > > interrupt is still routed to the CPU IMSIC picked initially, so the > > first overflow interrupt can run concurrently with the perf callbacks > > on the CPU the events are bound to. > > > > I noticed that xgene_pmu and arm-cci have similar implementation, so add > > it in riscv_iommu_pmu should be accepted. > > > > Changed in v6: > > - Rebased onto the latest v7.3-rc > > - Use sysfs_emit instead of cpumap_print_to_pagebuf > > - Set up on_cpu and irq affinity by cpuhp callbacks > > - Change type of on_cpu from unsigned int to int > > - Reject filter operands of cycle event in event_init > > - Check return value of counter number and masks in probe > > - Add raw spinlock for race condition (third commit) > > > > Changed in v5: > > - Pick up suggestions from sashiko-bot as follows > > - Fix event group validation for sw event > > - Bind IRQ to aux PMU dev instead of parent IOMMU dev > > - Clear OF bit when event is NULL > > - Improve hi-lo-hi patten > > - Add back IRQF_SHARED flag due to mismatch > > - Manage cpuhp and pmu register by devre > > > > Changed in v4: > > - Rebased onto v7.3-rc > > - Use is_sampling_event() instead of accessing vairable directly > > - Rename the matching name from "iommu.pmu" to "riscv-iommu.pmu" > > - Change the naming of PMU device for avoid ":" in PCIe case > > - Add suppress_bind_attrs attribute > > - Remove IRQF_SHARED flag > > - Set irq affinity to local CPU of IOMMU > > - Allocate ID by IDA for auxiliary device > > - Pick up suggestions from sashiko-bot > > > > Changed in v3: > > - Rebased onto v7.2-rc3 > > - Use hi_lo_writeq/readq to access register > > - Pick comments from sashiko-bot as follows > > - Set IRQ CPU affinity > > - Remove IRQF_ONESHOT flag when request irq > > - Adjust cycle event check by checking event_id field only > > - Fix bug for group events verificaiton > > - Fix KASAN issue about casting 32-bit variable to unsigned long pointer > > - Clear IPSR pending bit before starting counter > > - Clear OF bit in event selector register in irq handler > > - Release irq by devm instead of explicit free_irq > > > > Changed in v2: > > - Rebased onto v7.2-rc1 > > - Use hi-lo-hi mechanism to read counter. > > Suggested by Guo Ren and David Laight > > > > Changed in v1: > > - Rebased onto v6.19-rc8 > > - Pick all suggestions and feedbacks from v1 series > > - Add cpu hotplug implementation to avoid race enablement > > - Move PMU-related definition from header to c file > > - Change PMU driver to auxiliary device driver > > > > Changed in RFC: > > - Rebase onto v6.13-rc7 > > - Clear interrupt pending before handling interrupt > > - Fix the counter value issue caused by OF bit in the cycle counter. > > - Invoke riscv_iommu_hpm_disable() instead of riscv_iommu_pmu_uninit() > > in riscv_iommu_remove() > > > > Zong Li (2): > > iommu/riscv: create a auxiliary device for HPM > > drivers/perf: riscv-iommu: protect shared state with a raw spinlock > > > > drivers/iommu/riscv/Kconfig | 1 + > > drivers/iommu/riscv/iommu.c | 37 +++++++++++++++++++ > > drivers/perf/riscv_iommu_pmu.c | 66 ++++++++++++++++++++++++++++++---- > > 3 files changed, 98 insertions(+), 6 deletions(-) > > > > -- > > 2.43.7 > > _______________________________________________ linux-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-riscv