Re: [PATCH v7 0/2] RISC-V IOMMU HPM support
From: Guo Ren
Date: Fri Aug 28 2026 - 04:50:13 EST
Hi Li Zong,
Just two patches? Where did the riscv-iommu PMU driver patch go?
--
Best Regards
GUO Ren
On Fri, Aug 28, 2026 at 3:07 PM Zong Li <zong.li@xxxxxxxxxx> 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
>