Skip to content

Handle forwarded level-triggered interrupts

Christoffer Dall kvm kvmarm linux-arm-kernel 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v6 Latest8 patches 11 repliesIn review

Changes in v6 from the cover letter

- Rebased on v4.15-rc1
- Changed comment on preemption code as suggested by Andre
- Fixed white space and confusing conditionals as suggested by Drew

Patches in v6 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/8KVM: arm/arm64: Remove redundant preemptible checksvirt/kvm/arm/arm.c+0 -20 replies
2/8KVM: arm/arm64: Factor out functionality to get vgic mmio requester_vcpuvirt/kvm/arm/vgic/vgic-mmio.c+28 -162 replies
3/8KVM: arm/arm64: Don't cache the timer IRQ levelvirt/kvm/arm/arch_timer.c+13 -70 replies
4/8KVM: arm/arm64: vgic: Support level-triggered mapped interruptsvirt/kvm/arm/vgic/vgic-v2.c virt/kvm/arm/vgic/vgic-v3.c virt/kvm/arm/vgic/vgic.c +1 more+88 -00 replies
5/8KVM: arm/arm64: Support a vgic interrupt line level sample functioninclude/kvm/arm_vgic.h virt/kvm/arm/arch_timer.c virt/kvm/arm/vgic/vgic.c+23 -50 replies
6/8KVM: arm/arm64: Support VGIC dist pend/active changes for mapped IRQsvirt/kvm/arm/vgic/vgic-mmio.c virt/kvm/arm/vgic/vgic.c virt/kvm/arm/vgic/vgic.h+73 -65 replies
7/8KVM: arm/arm64: Provide a get_input_level for the arch timerinclude/kvm/arm_arch_timer.h virt/kvm/arm/arch_timer.c+38 -394 replies
8/8KVM: arm/arm64: Avoid work when userspace iqchips are not usedvirt/kvm/arm/arch_timer.c+9 -20 replies

Reviews trailers per patch

6 of 8 patches have a Reviewed-by or Acked-by.

PatchMarc ZyngierAndre Przywara
1/8A-b R-b
2/8A-b R-b
3/8R-b
4/8R-b
5/8R-b
6/8R-b
7/8
8/8

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v6 thread

Cover letter [PATCH v6 0/8] Handle forwarded level-triggered interrupts

From: Christoffer Dall <[email protected]>

This series is an alternative approach to Eric Auger's direct EOI setup patches [1] in terms of the KVM VGIC support.

The idea is to maintain existing semantics for the VGIC for mapped level-triggered IRQs and also support the timer using mapped IRQs with the same VGIC support as VFIO interrupts.

Based on v4.15-rc.

Also available at:
git://git.kernel.org/pub/scm/linux/kernel/git/cdall/linux.git level-mapped-v6

Changes since v5:
- Rebased on v4.15-rc1
- Changed comment on preemption code as suggested by Andre
- Fixed white space and confusing conditionals as suggested by Drew

Changes since v4:
- Rebased on the timer optimization series merged in the v4.15 merge window, which caused a fair amount of modifications to patch 3.
- Added a static key to disable the sync operations when no VMs are using userspace irqchips to further optimize the performance
- Fixed extra semicolon in vgic-mmio.c
- Added commentary as requested during review
- Dropped what was patch 4, because it was merged as part of GICv4 support.
- Factored out the VGIC input level function change as separate patch (helps bisect and debugging), before providing a function for the timer.

Changes since v3:
- Added a number of patches and moved patches around a bit.
- Check for uaccesses in the mmio handler functions
- Fixed bugs in the mmio handler functions

Changes since v2:
- Removed patch 5 from v2 and integrating the changes in what's now patch 5 to make it easier to reuse code when adding VFIO integration.
- Changed the virtual distributor MMIO handling to use the pending_latch and more closely match the semantics of SPENDR and CPENDR for both level and edge mapped interrupts.

Changes since v1:
- Added necessary changes to the timer (Patch 1)
- Added handling of guest MMIO accesses to the virtual distributor (Patch 4)
- Addressed Marc's comments from the initial RFC (mostly renames)

Thanks,
-Christoffer

Christoffer Dall (8):
KVM: arm/arm64: Remove redundant preemptible checks
KVM: arm/arm64: Factor out functionality to get vgic mmio
requester_vcpu
KVM: arm/arm64: Don't cache the timer IRQ level
KVM: arm/arm64: vgic: Support level-triggered mapped interrupts
KVM: arm/arm64: Support a vgic interrupt line level sample function
KVM: arm/arm64: Support VGIC dist pend/active changes for mapped IRQs
KVM: arm/arm64: Provide a get_input_level for the arch timer
KVM: arm/arm64: Avoid work when userspace iqchips are not used

 include/kvm/arm_arch_timer.h  |   2 +
 include/kvm/arm_vgic.h        |  13 ++++-
 virt/kvm/arm/arch_timer.c     | 105 +++++++++++++++++++++-----------------
 virt/kvm/arm/arm.c            |   2 -
 virt/kvm/arm/vgic/vgic-mmio.c | 115 ++++++++++++++++++++++++++++++++++--------
 virt/kvm/arm/vgic/vgic-v2.c   |  29 +++++++++++
 virt/kvm/arm/vgic/vgic-v3.c   |  29 +++++++++++
 virt/kvm/arm/vgic/vgic.c      |  42 +++++++++++++--
 virt/kvm/arm/vgic/vgic.h      |   8 +++
 9 files changed, 270 insertions(+), 75 deletions(-)
Signature · 1 line
2.14.2