linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/12] KVM: x86/xen: Add in-kernel Xen event channel delivery
@ 2021-11-21 12:54 David Woodhouse
  2021-11-21 12:54 ` [PATCH v5 01/12] KVM: Introduce CONFIG_HAVE_KVM_DIRTY_RING David Woodhouse
                   ` (12 more replies)
  0 siblings, 13 replies; 27+ messages in thread
From: David Woodhouse @ 2021-11-21 12:54 UTC (permalink / raw)
  To: Paolo Bonzini, kvm
  Cc: Boris Ostrovsky, Joao Martins, jmattson @ google . com,
	wanpengli @ tencent . com, seanjc @ google . com,
	vkuznets @ redhat . com, mtosatti @ redhat . com,
	joro @ 8bytes . org, karahmed, Marc Zyngier, James Morse,
	Alexandru Elisei, Suzuki K Poulose, Catalin Marinas, Will Deacon,
	Huacai Chen, Aleksandar Markovic, Michael Ellerman,
	Benjamin Herrenschmidt, Anup Patel, Christian Borntraeger,
	kvmarm, linux-arm-kernel, linux-mips, linuxppc-dev, kvm-riscv,
	linux-s390, butt3rflyh4ck

Introduce the basic concept of 2 level event channels for kernel delivery,
which is just a simple matter of a few test_and_set_bit calls on a mapped
shared info page.

This can be used for routing MSI of passthrough devices to PIRQ event
channels in a Xen guest, and we can build on it for delivering IPIs and
timers directly from the kernel too.

v1: Use kvm_map_gfn() although I didn't quite see how it works.

v2: Avoid kvm_map_gfn() and implement a safe mapping with invalidation
    support for myself.

v3: Reinvent gfn_to_pfn_cache with sane invalidation semantics, for my
    use case as well as nesting.

v4: Rework dirty handling, as it became apparently that we need an active
    vCPU context to mark pages dirty so it can't be done from the MMU
    notifier duing the invalidation; it has to happen on unmap.

v5: Fix sparse warnings reported by kernel test robot <lkp@intel.com>.

    Fix revalidation when memslots change but the resulting HVA stays
    the same. We can use the same kernel mapping in that case, if the
    HVA → PFN translation was valid before. So that probably means we
    shouldn't unmap the "old_hva". Augment the test case to exercise
    that one too.

    Include the fix for the dirty ring vs. Xen shinfo oops reported
    by butt3rflyh4ck <butterflyhuangxx@gmail.com>.


As in the previous two rounds, the last patch (this time patch 12) is
included as illustration of how we *might* use this for fixing the UAF
bugs in nesting, but isn't intended to be applied as-is. Patches 1-11 are.



David Woodhouse (12):
      KVM: Introduce CONFIG_HAVE_KVM_DIRTY_RING
      KVM: Add Makefile.kvm for common files, use it for x86
      KVM: s390: Use Makefile.kvm for common files
      KVM: mips: Use Makefile.kvm for common files
      KVM: RISC-V: Use Makefile.kvm for common files
      KVM: powerpc: Use Makefile.kvm for common files
      KVM: arm64: Use Makefile.kvm for common files
      KVM: Reinstate gfn_to_pfn_cache with invalidation support
      KVM: x86/xen: Maintain valid mapping of Xen shared_info page
      KVM: x86/xen: Add KVM_IRQ_ROUTING_XEN_EVTCHN and event channel delivery
      KVM: x86: Fix wall clock writes in Xen shared_info not to mark page dirty
      KVM: x86: First attempt at converting nested virtual APIC page to gpc

 Documentation/virt/kvm/api.rst                     |  33 ++
 arch/arm64/kvm/Makefile                            |   6 +-
 arch/mips/kvm/Makefile                             |   3 +-
 arch/powerpc/kvm/Makefile                          |   6 +-
 arch/riscv/kvm/Makefile                            |   6 +-
 arch/s390/kvm/Makefile                             |   6 +-
 arch/x86/include/asm/kvm_host.h                    |   4 +-
 arch/x86/kvm/Kconfig                               |   2 +
 arch/x86/kvm/Makefile                              |   7 +-
 arch/x86/kvm/irq_comm.c                            |  12 +
 arch/x86/kvm/vmx/nested.c                          |  50 ++-
 arch/x86/kvm/vmx/vmx.c                             |  12 +-
 arch/x86/kvm/vmx/vmx.h                             |   2 +-
 arch/x86/kvm/x86.c                                 |  15 +-
 arch/x86/kvm/x86.h                                 |   1 -
 arch/x86/kvm/xen.c                                 | 341 +++++++++++++++++++--
 arch/x86/kvm/xen.h                                 |   9 +
 include/linux/kvm_dirty_ring.h                     |   8 +-
 include/linux/kvm_host.h                           | 110 +++++++
 include/linux/kvm_types.h                          |  18 ++
 include/uapi/linux/kvm.h                           |  11 +
 .../testing/selftests/kvm/x86_64/xen_shinfo_test.c | 184 ++++++++++-
 virt/kvm/Kconfig                                   |   6 +
 virt/kvm/Makefile.kvm                              |  14 +
 virt/kvm/dirty_ring.c                              |   2 +-
 virt/kvm/kvm_main.c                                |  16 +-
 virt/kvm/kvm_mm.h                                  |  44 +++
 virt/kvm/mmu_lock.h                                |  23 --
 virt/kvm/pfncache.c                                | 323 +++++++++++++++++++
 29 files changed, 1173 insertions(+), 101 deletions(-)



_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2021-12-10 14:59 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-21 12:54 [PATCH v5 00/12] KVM: x86/xen: Add in-kernel Xen event channel delivery David Woodhouse
2021-11-21 12:54 ` [PATCH v5 01/12] KVM: Introduce CONFIG_HAVE_KVM_DIRTY_RING David Woodhouse
2021-11-21 12:54 ` [PATCH v5 02/12] KVM: Add Makefile.kvm for common files, use it for x86 David Woodhouse
2021-11-21 12:54 ` [PATCH v5 03/12] KVM: s390: Use Makefile.kvm for common files David Woodhouse
2021-12-09 17:58   ` Paolo Bonzini
2021-11-21 12:54 ` [PATCH v5 04/12] KVM: mips: " David Woodhouse
2021-11-21 12:54 ` [PATCH v5 05/12] KVM: RISC-V: " David Woodhouse
2021-11-23  9:12   ` Anup Patel
2021-11-29 16:44     ` David Woodhouse
2021-11-21 12:54 ` [PATCH v5 06/12] KVM: powerpc: " David Woodhouse
2021-12-09 18:05   ` Paolo Bonzini
2021-11-21 12:54 ` [PATCH v5 07/12] KVM: arm64: " David Woodhouse
2021-11-21 12:54 ` [PATCH v5 08/12] KVM: Reinstate gfn_to_pfn_cache with invalidation support David Woodhouse
2021-12-09 18:34   ` Paolo Bonzini
2021-12-09 20:40     ` David Woodhouse
2021-12-09 22:34       ` Paolo Bonzini
2021-12-09 22:38         ` David Woodhouse
2021-12-10 12:25         ` David Woodhouse
2021-12-10 14:53           ` Paolo Bonzini
2021-12-10 14:57             ` David Woodhouse
2021-11-21 12:54 ` [PATCH v5 09/12] KVM: x86/xen: Maintain valid mapping of Xen shared_info page David Woodhouse
2021-11-21 12:54 ` [PATCH v5 10/12] KVM: x86/xen: Add KVM_IRQ_ROUTING_XEN_EVTCHN and event channel delivery David Woodhouse
2021-11-21 12:54 ` [PATCH v5 11/12] KVM: x86: Fix wall clock writes in Xen shared_info not to mark page dirty David Woodhouse
2021-11-21 12:54 ` [PATCH v5 12/12] KVM: x86: First attempt at converting nested virtual APIC page to gpc David Woodhouse
2021-12-09 18:34 ` [PATCH v5 00/12] KVM: x86/xen: Add in-kernel Xen event channel delivery Paolo Bonzini
2021-12-09 18:47   ` David Woodhouse
2021-12-09 18:55     ` Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).