mbox series

[v4,0/9] arm_pmu: Use NMI for perf interrupt

Message ID 1563351432-55652-1-git-send-email-julien.thierry@arm.com (mailing list archive)
Headers show
Series arm_pmu: Use NMI for perf interrupt | expand

Message

Julien Thierry July 17, 2019, 8:17 a.m. UTC
Hi,

After fixing the arm64 Pseudo-NMIs, I'm dusting off this series.

The series makes the arm_pmu driver use NMIs for the perf interrupt when
NMIs are available on the platform (currently, only arm64 + GICv3).

* Patches 1 to 4 remove the need to use spinlocks for the Arm PMU
  driver for Armv7 and Armv8 (aarch64).
* Patches 5 moves the locking to Armv6 specific code which is the sole
  user
* Patches 6 and 7 make the PMU interrupt handler NMI-safe
* Patches 8 and 9 enable using pseudo-NMI for the PMU interrupt when
  the feature is available

Changes since v3[3]:
- Added tags
- Fix build issue for perf_event_v6
- Don't disable preemption in pmu->enable()
- Always rely on IPI_IRQ_WORK to run the queued work
- Fixed typos + cleanups

Changes since v2[2]:
- Rebased on recent linux-next (next-20190708)
- Fixed a number of bugs with indices (reported by Wei)
- Minor style fixes

Changes since v1[3]:
- Rebased on v5.1-rc1
- Pseudo-NMI has changed a lot since then, use the (now merged) NMI API
- Remove locking from armv7 perf_event
- Use locking only in armv6 perf_event
- Use direct counter/type registers insted of selector register for armv8

[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2019-March/640536.html
[2] http://lists.infradead.org/pipermail/linux-arm-kernel/2018-January/554611.html

Cheers,

Julien

-->

Julien Thierry (8):
  arm64: perf: Remove PMU locking
  arm: perf: save/resore pmsel
  arm: perf: Remove Remove PMU locking
  perf/arm_pmu: Move PMU lock to ARMv6 events
  arm64: perf: Do not call irq_work_run in NMI context
  arm/arm64: kvm: pmu: Make overflow handler NMI safe
  arm_pmu: Introduce pmu_irq_ops
  arm_pmu: Use NMIs for PMU

Mark Rutland (1):
  arm64: perf: avoid PMXEV* indirection

 arch/arm/kernel/perf_event_v6.c |  43 +++++++-----
 arch/arm/kernel/perf_event_v7.c |  79 +++++++---------------
 arch/arm64/kernel/perf_event.c  | 136 ++++++++++++++++++++++++--------------
 drivers/perf/arm_pmu.c          | 143 ++++++++++++++++++++++++++++++++++------
 include/kvm/arm_pmu.h           |   1 +
 include/linux/perf/arm_pmu.h    |   5 --
 virt/kvm/arm/pmu.c              |  25 ++++++-
 7 files changed, 284 insertions(+), 148 deletions(-)

--
1.9.1

Comments

Julien Thierry July 17, 2019, 9:02 a.m. UTC | #1
On 17/07/2019 09:17, Julien Thierry wrote:
> Hi,
>
> After fixing the arm64 Pseudo-NMIs, I'm dusting off this series.
>
> The series makes the arm_pmu driver use NMIs for the perf interrupt when
> NMIs are available on the platform (currently, only arm64 + GICv3).
>
> * Patches 1 to 4 remove the need to use spinlocks for the Arm PMU
>   driver for Armv7 and Armv8 (aarch64).
> * Patches 5 moves the locking to Armv6 specific code which is the sole
>   user
> * Patches 6 and 7 make the PMU interrupt handler NMI-safe
> * Patches 8 and 9 enable using pseudo-NMI for the PMU interrupt when
>   the feature is available
>
> Changes since v3[3]:
> - Added tags
> - Fix build issue for perf_event_v6
> - Don't disable preemption in pmu->enable()
> - Always rely on IPI_IRQ_WORK to run the queued work
> - Fixed typos + cleanups
>
> Changes since v2[2]:
> - Rebased on recent linux-next (next-20190708)
> - Fixed a number of bugs with indices (reported by Wei)
> - Minor style fixes
>
> Changes since v1[3]:
> - Rebased on v5.1-rc1
> - Pseudo-NMI has changed a lot since then, use the (now merged) NMI API
> - Remove locking from armv7 perf_event
> - Use locking only in armv6 perf_event
> - Use direct counter/type registers insted of selector register for armv8
>
> [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2019-March/640536.html
> [2] http://lists.infradead.org/pipermail/linux-arm-kernel/2018-January/554611.html
>

Huh, I forgot to update the links, sorry:

[1]
http://lists.infradead.org/pipermail/linux-arm-kernel/2019-July/665339.html
[2]
http://lists.infradead.org/pipermail/linux-arm-kernel/2019-March/640536.html
[3]
http://lists.infradead.org/pipermail/linux-arm-kernel/2018-January/554611.html

Cheers,

--
Julien Thierry
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Julien Thierry July 30, 2019, 9:05 a.m. UTC | #2
Hi,

Just a gentle ping on this series.

Cheers,

Julien

On 17/07/2019 09:17, Julien Thierry wrote:
> Hi,
> 
> After fixing the arm64 Pseudo-NMIs, I'm dusting off this series.
> 
> The series makes the arm_pmu driver use NMIs for the perf interrupt when
> NMIs are available on the platform (currently, only arm64 + GICv3).
> 
> * Patches 1 to 4 remove the need to use spinlocks for the Arm PMU
>   driver for Armv7 and Armv8 (aarch64).
> * Patches 5 moves the locking to Armv6 specific code which is the sole
>   user
> * Patches 6 and 7 make the PMU interrupt handler NMI-safe
> * Patches 8 and 9 enable using pseudo-NMI for the PMU interrupt when
>   the feature is available
> 
> Changes since v3[3]:
> - Added tags
> - Fix build issue for perf_event_v6
> - Don't disable preemption in pmu->enable()
> - Always rely on IPI_IRQ_WORK to run the queued work
> - Fixed typos + cleanups
> 
> Changes since v2[2]:
> - Rebased on recent linux-next (next-20190708)
> - Fixed a number of bugs with indices (reported by Wei)
> - Minor style fixes
> 
> Changes since v1[3]:
> - Rebased on v5.1-rc1
> - Pseudo-NMI has changed a lot since then, use the (now merged) NMI API
> - Remove locking from armv7 perf_event
> - Use locking only in armv6 perf_event
> - Use direct counter/type registers insted of selector register for armv8
> 
> [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2019-March/640536.html
> [2] http://lists.infradead.org/pipermail/linux-arm-kernel/2018-January/554611.html
> 
> Cheers,
> 
> Julien
> 
> -->
> 
> Julien Thierry (8):
>   arm64: perf: Remove PMU locking
>   arm: perf: save/resore pmsel
>   arm: perf: Remove Remove PMU locking
>   perf/arm_pmu: Move PMU lock to ARMv6 events
>   arm64: perf: Do not call irq_work_run in NMI context
>   arm/arm64: kvm: pmu: Make overflow handler NMI safe
>   arm_pmu: Introduce pmu_irq_ops
>   arm_pmu: Use NMIs for PMU
> 
> Mark Rutland (1):
>   arm64: perf: avoid PMXEV* indirection
> 
>  arch/arm/kernel/perf_event_v6.c |  43 +++++++-----
>  arch/arm/kernel/perf_event_v7.c |  79 +++++++---------------
>  arch/arm64/kernel/perf_event.c  | 136 ++++++++++++++++++++++++--------------
>  drivers/perf/arm_pmu.c          | 143 ++++++++++++++++++++++++++++++++++------
>  include/kvm/arm_pmu.h           |   1 +
>  include/linux/perf/arm_pmu.h    |   5 --
>  virt/kvm/arm/pmu.c              |  25 ++++++-
>  7 files changed, 284 insertions(+), 148 deletions(-)
> 
> --
> 1.9.1
>