From: lantianyu1986@gmail.com
To: unlisted-recipients:; (no To-header on input)
Cc: Lan Tianyu <Tianyu.Lan@microsoft.com>,
benh@kernel.crashing.org, catalin.marinas@arm.com,
christoffer.dall@arm.com, devel@linuxdriverproject.org,
haiyangz@microsoft.com, hpa@zytor.com, jhogan@kernel.org,
kvmarm@lists.cs.columbia.edu, kvm-ppc@vger.kernel.org,
kvm@vger.kernel.org, kys@microsoft.com,
linux-arm-kernel@lists.infradead.org, linux@armlinux.org,
linux-kernel@vger.kernel.org, linux-mips@linux-mips.org,
linuxppc-dev@lists.ozlabs.org, marc.zyngier@arm.com,
mingo@redhat.com, mpe@ellerman.id.au, paul.burton@mips.com,
paulus@ozlabs.org, pbonzini@redhat.com, ralf@linux-mips.org,
rkrcmar@redhat.com, sthemmin@microsoft.com, tglx@linutronix.de,
will.deacon@arm.com, x86@kernel.org,
michael.h.kelley@microsoft.com, vkuznets@redhat.com
Subject: [PATCH V4 00/15] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM
Date: Sat, 13 Oct 2018 22:53:51 +0800 [thread overview]
Message-ID: <20181013145406.4911-1-Tianyu.Lan@microsoft.com> (raw)
From: Lan Tianyu <Tianyu.Lan@microsoft.com>
For nested memory virtualization, Hyper-v doesn't set write-protect
L1 hypervisor EPT page directory and page table node to track changes
while it relies on guest to tell it changes via HvFlushGuestAddressLlist
hypercall. HvFlushGuestAddressLlist hypercall provides a way to flush
EPT page table with ranges which are specified by L1 hypervisor.
If L1 hypervisor uses INVEPT or HvFlushGuestAddressSpace hypercall to
flush EPT tlb, Hyper-V will invalidate associated EPT shadow page table
and sync L1's EPT table when next EPT page fault is triggered.
HvFlushGuestAddressLlist hypercall helps to avoid such redundant EPT
page fault and synchronization of shadow page table.
Change since v3:
1) Remove code of updating "tlbs_dirty" in kvm_flush_remote_tlbs_with_range()
2) Remove directly tlb flush in the kvm_handle_hva_range()
3) Move tlb flush in kvm_set_pte_rmapp() to kvm_mmu_notifier_change_pte()
4) Combine Vitaly's "don't pass EPT configuration info to
vmx_hv_remote_flush_tlb()" fix
Change since v2:
1) Fix comment in the kvm_flush_remote_tlbs_with_range()
2) Move HV_MAX_FLUSH_PAGES and HV_MAX_FLUSH_REP_COUNT to
hyperv-tlfs.h.
3) Calculate HV_MAX_FLUSH_REP_COUNT in the macro definition
4) Use HV_MAX_FLUSH_REP_COUNT to define length of gpa_list in
struct hv_guest_mapping_flush_list.
Change since v1:
1) Convert "end_gfn" of struct kvm_tlb_range to "pages" in order
to avoid confusion as to whether "end_gfn" is inclusive or exlusive.
2) Add hyperv tlb range struct and replace kvm tlb range struct
with new struct in order to avoid using kvm struct in the hyperv
code directly.
Lan Tianyu (15):
KVM: Add tlb_remote_flush_with_range callback in kvm_x86_ops
KVM/MMU: Add tlb flush with range helper function
KVM: Replace old tlb flush function with new one to flush a specified
range.
KVM: Make kvm_set_spte_hva() return int
KVM/MMU: Move tlb flush in kvm_set_pte_rmapp() to
kvm_mmu_notifier_change_pte()
KVM/MMU: Flush tlb directly in the kvm_set_pte_rmapp()
KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range()
KVM/MMU: Flush tlb directly in kvm_mmu_zap_collapsible_spte()
KVM: Add flush_link and parent_pte in the struct kvm_mmu_page
KVM: Add spte's point in the struct kvm_mmu_page
KVM/MMU: Replace tlb flush function with range list flush function
x86/hyper-v: Add HvFlushGuestAddressList hypercall support
x86/Hyper-v: Add trace in the
hyperv_nested_flush_guest_mapping_range()
KVM/VMX: Change hv flush logic when ept tables are mismatched.
KVM/VMX: Add hv tlb range flush support
arch/arm/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/mips/include/asm/kvm_host.h | 2 +-
arch/mips/kvm/mmu.c | 3 +-
arch/powerpc/include/asm/kvm_host.h | 2 +-
arch/powerpc/kvm/book3s.c | 3 +-
arch/powerpc/kvm/e500_mmu_host.c | 3 +-
arch/x86/hyperv/nested.c | 85 ++++++++++++++++++++++
arch/x86/include/asm/hyperv-tlfs.h | 32 +++++++++
arch/x86/include/asm/kvm_host.h | 12 +++-
arch/x86/include/asm/mshyperv.h | 16 +++++
arch/x86/include/asm/trace/hyperv.h | 14 ++++
arch/x86/kvm/mmu.c | 138 ++++++++++++++++++++++++++++++------
arch/x86/kvm/paging_tmpl.h | 10 ++-
arch/x86/kvm/vmx.c | 70 +++++++++++++++---
virt/kvm/arm/mmu.c | 6 +-
virt/kvm/kvm_main.c | 5 +-
17 files changed, 360 insertions(+), 45 deletions(-)
--
2.14.4
WARNING: multiple messages have this Message-ID (diff)
From: lantianyu1986@gmail.com
Cc: Lan Tianyu <Tianyu.Lan@microsoft.com>,
benh@kernel.crashing.org, catalin.marinas@arm.com,
christoffer.dall@arm.com, devel@linuxdriverproject.org,
haiyangz@microsoft.com, hpa@zytor.com, jhogan@kernel.org,
kvmarm@lists.cs.columbia.edu, kvm-ppc@vger.kernel.org,
kvm@vger.kernel.org, kys@microsoft.com,
linux-arm-kernel@lists.infradead.org, linux@armlinux.org,
linux-kernel@vger.kernel.org, linux-mips@linux-mips.org,
linuxppc-dev@lists.ozlabs.org, marc.zyngier@arm.com,
mingo@redhat.com, mpe@ellerman.id.au, paul.burton@mips.com,
paulus@ozlabs.org, pbonzini@redhat.com, ralf@linux-mips.org,
rkrcmar@redhat.com, sthemmin@microsoft.com, tglx@linutronix.de,
will.deacon@arm.com, x86@kernel.org,
michael.h.kelley@microsoft.com, vkuznets@redhat.com
Subject: [PATCH V4 00/15] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM
Date: Sat, 13 Oct 2018 22:53:51 +0800 [thread overview]
Message-ID: <20181013145406.4911-1-Tianyu.Lan@microsoft.com> (raw)
Message-ID: <20181013145351.B9hhydxgJGgsFGdaqfqeN3JFkSfXRgHBxqy0_IdlvKk@z> (raw)
From: Lan Tianyu <Tianyu.Lan@microsoft.com>
For nested memory virtualization, Hyper-v doesn't set write-protect
L1 hypervisor EPT page directory and page table node to track changes
while it relies on guest to tell it changes via HvFlushGuestAddressLlist
hypercall. HvFlushGuestAddressLlist hypercall provides a way to flush
EPT page table with ranges which are specified by L1 hypervisor.
If L1 hypervisor uses INVEPT or HvFlushGuestAddressSpace hypercall to
flush EPT tlb, Hyper-V will invalidate associated EPT shadow page table
and sync L1's EPT table when next EPT page fault is triggered.
HvFlushGuestAddressLlist hypercall helps to avoid such redundant EPT
page fault and synchronization of shadow page table.
Change since v3:
1) Remove code of updating "tlbs_dirty" in kvm_flush_remote_tlbs_with_range()
2) Remove directly tlb flush in the kvm_handle_hva_range()
3) Move tlb flush in kvm_set_pte_rmapp() to kvm_mmu_notifier_change_pte()
4) Combine Vitaly's "don't pass EPT configuration info to
vmx_hv_remote_flush_tlb()" fix
Change since v2:
1) Fix comment in the kvm_flush_remote_tlbs_with_range()
2) Move HV_MAX_FLUSH_PAGES and HV_MAX_FLUSH_REP_COUNT to
hyperv-tlfs.h.
3) Calculate HV_MAX_FLUSH_REP_COUNT in the macro definition
4) Use HV_MAX_FLUSH_REP_COUNT to define length of gpa_list in
struct hv_guest_mapping_flush_list.
Change since v1:
1) Convert "end_gfn" of struct kvm_tlb_range to "pages" in order
to avoid confusion as to whether "end_gfn" is inclusive or exlusive.
2) Add hyperv tlb range struct and replace kvm tlb range struct
with new struct in order to avoid using kvm struct in the hyperv
code directly.
Lan Tianyu (15):
KVM: Add tlb_remote_flush_with_range callback in kvm_x86_ops
KVM/MMU: Add tlb flush with range helper function
KVM: Replace old tlb flush function with new one to flush a specified
range.
KVM: Make kvm_set_spte_hva() return int
KVM/MMU: Move tlb flush in kvm_set_pte_rmapp() to
kvm_mmu_notifier_change_pte()
KVM/MMU: Flush tlb directly in the kvm_set_pte_rmapp()
KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range()
KVM/MMU: Flush tlb directly in kvm_mmu_zap_collapsible_spte()
KVM: Add flush_link and parent_pte in the struct kvm_mmu_page
KVM: Add spte's point in the struct kvm_mmu_page
KVM/MMU: Replace tlb flush function with range list flush function
x86/hyper-v: Add HvFlushGuestAddressList hypercall support
x86/Hyper-v: Add trace in the
hyperv_nested_flush_guest_mapping_range()
KVM/VMX: Change hv flush logic when ept tables are mismatched.
KVM/VMX: Add hv tlb range flush support
arch/arm/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/mips/include/asm/kvm_host.h | 2 +-
arch/mips/kvm/mmu.c | 3 +-
arch/powerpc/include/asm/kvm_host.h | 2 +-
arch/powerpc/kvm/book3s.c | 3 +-
arch/powerpc/kvm/e500_mmu_host.c | 3 +-
arch/x86/hyperv/nested.c | 85 ++++++++++++++++++++++
arch/x86/include/asm/hyperv-tlfs.h | 32 +++++++++
arch/x86/include/asm/kvm_host.h | 12 +++-
arch/x86/include/asm/mshyperv.h | 16 +++++
arch/x86/include/asm/trace/hyperv.h | 14 ++++
arch/x86/kvm/mmu.c | 138 ++++++++++++++++++++++++++++++------
arch/x86/kvm/paging_tmpl.h | 10 ++-
arch/x86/kvm/vmx.c | 70 +++++++++++++++---
virt/kvm/arm/mmu.c | 6 +-
virt/kvm/kvm_main.c | 5 +-
17 files changed, 360 insertions(+), 45 deletions(-)
--
2.14.4
WARNING: multiple messages have this Message-ID (diff)
From: lantianyu1986@gmail.com
Cc: linux-mips@linux-mips.org, linux@armlinux.org,
kvm@vger.kernel.org, rkrcmar@redhat.com,
benh@kernel.crashing.org, will.deacon@arm.com,
linux-kernel@vger.kernel.org, paulus@ozlabs.org, hpa@zytor.com,
kvmarm@lists.cs.columbia.edu, sthemmin@microsoft.com,
mpe@ellerman.id.au, x86@kernel.org,
michael.h.kelley@microsoft.com, mingo@redhat.com,
catalin.marinas@arm.com, jhogan@kernel.org,
Lan Tianyu <Tianyu.Lan@microsoft.com>,
marc.zyngier@arm.com, haiyangz@microsoft.com,
kvm-ppc@vger.kernel.org, pbonzini@redhat.com, tglx@linutronix.de,
linux-arm-kernel@lists.infradead.org, christoffer.dall@arm.com,
ralf@linux-mips.org, paul.burton@mips.com,
devel@linuxdriverproject.org, vkuznets@redhat.com,
linuxppc-dev@lists.ozlabs.org
Subject: [PATCH V4 00/15] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM
Date: Sat, 13 Oct 2018 22:53:51 +0800 [thread overview]
Message-ID: <20181013145406.4911-1-Tianyu.Lan@microsoft.com> (raw)
From: Lan Tianyu <Tianyu.Lan@microsoft.com>
For nested memory virtualization, Hyper-v doesn't set write-protect
L1 hypervisor EPT page directory and page table node to track changes
while it relies on guest to tell it changes via HvFlushGuestAddressLlist
hypercall. HvFlushGuestAddressLlist hypercall provides a way to flush
EPT page table with ranges which are specified by L1 hypervisor.
If L1 hypervisor uses INVEPT or HvFlushGuestAddressSpace hypercall to
flush EPT tlb, Hyper-V will invalidate associated EPT shadow page table
and sync L1's EPT table when next EPT page fault is triggered.
HvFlushGuestAddressLlist hypercall helps to avoid such redundant EPT
page fault and synchronization of shadow page table.
Change since v3:
1) Remove code of updating "tlbs_dirty" in kvm_flush_remote_tlbs_with_range()
2) Remove directly tlb flush in the kvm_handle_hva_range()
3) Move tlb flush in kvm_set_pte_rmapp() to kvm_mmu_notifier_change_pte()
4) Combine Vitaly's "don't pass EPT configuration info to
vmx_hv_remote_flush_tlb()" fix
Change since v2:
1) Fix comment in the kvm_flush_remote_tlbs_with_range()
2) Move HV_MAX_FLUSH_PAGES and HV_MAX_FLUSH_REP_COUNT to
hyperv-tlfs.h.
3) Calculate HV_MAX_FLUSH_REP_COUNT in the macro definition
4) Use HV_MAX_FLUSH_REP_COUNT to define length of gpa_list in
struct hv_guest_mapping_flush_list.
Change since v1:
1) Convert "end_gfn" of struct kvm_tlb_range to "pages" in order
to avoid confusion as to whether "end_gfn" is inclusive or exlusive.
2) Add hyperv tlb range struct and replace kvm tlb range struct
with new struct in order to avoid using kvm struct in the hyperv
code directly.
Lan Tianyu (15):
KVM: Add tlb_remote_flush_with_range callback in kvm_x86_ops
KVM/MMU: Add tlb flush with range helper function
KVM: Replace old tlb flush function with new one to flush a specified
range.
KVM: Make kvm_set_spte_hva() return int
KVM/MMU: Move tlb flush in kvm_set_pte_rmapp() to
kvm_mmu_notifier_change_pte()
KVM/MMU: Flush tlb directly in the kvm_set_pte_rmapp()
KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range()
KVM/MMU: Flush tlb directly in kvm_mmu_zap_collapsible_spte()
KVM: Add flush_link and parent_pte in the struct kvm_mmu_page
KVM: Add spte's point in the struct kvm_mmu_page
KVM/MMU: Replace tlb flush function with range list flush function
x86/hyper-v: Add HvFlushGuestAddressList hypercall support
x86/Hyper-v: Add trace in the
hyperv_nested_flush_guest_mapping_range()
KVM/VMX: Change hv flush logic when ept tables are mismatched.
KVM/VMX: Add hv tlb range flush support
arch/arm/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/mips/include/asm/kvm_host.h | 2 +-
arch/mips/kvm/mmu.c | 3 +-
arch/powerpc/include/asm/kvm_host.h | 2 +-
arch/powerpc/kvm/book3s.c | 3 +-
arch/powerpc/kvm/e500_mmu_host.c | 3 +-
arch/x86/hyperv/nested.c | 85 ++++++++++++++++++++++
arch/x86/include/asm/hyperv-tlfs.h | 32 +++++++++
arch/x86/include/asm/kvm_host.h | 12 +++-
arch/x86/include/asm/mshyperv.h | 16 +++++
arch/x86/include/asm/trace/hyperv.h | 14 ++++
arch/x86/kvm/mmu.c | 138 ++++++++++++++++++++++++++++++------
arch/x86/kvm/paging_tmpl.h | 10 ++-
arch/x86/kvm/vmx.c | 70 +++++++++++++++---
virt/kvm/arm/mmu.c | 6 +-
virt/kvm/kvm_main.c | 5 +-
17 files changed, 360 insertions(+), 45 deletions(-)
--
2.14.4
WARNING: multiple messages have this Message-ID (diff)
From: lantianyu1986@gmail.com
Cc: linux-mips@linux-mips.org, linux@armlinux.org,
kvm@vger.kernel.org, rkrcmar@redhat.com, will.deacon@arm.com,
linux-kernel@vger.kernel.org, hpa@zytor.com, kys@microsoft.com,
kvmarm@lists.cs.columbia.edu, sthemmin@microsoft.com,
x86@kernel.org, michael.h.kelley@microsoft.com, mingo@redhat.com,
catalin.marinas@arm.com, jhogan@kernel.org,
Lan Tianyu <Tianyu.Lan@microsoft.com>,
marc.zyngier@arm.com, haiyangz@microsoft.com,
kvm-ppc@vger.kernel.org, pbonzini@redhat.com, tglx@linutronix.de,
linux-arm-kernel@lists.infradead.org, christoffer.dall@arm.com,
ralf@linux-mips.org, paul.burton@mips.com,
devel@linuxdriverproject.org, vkuznets@redhat.com,
linuxppc-dev@lists.ozlabs.org
Subject: [PATCH V4 00/15] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM
Date: Sat, 13 Oct 2018 22:53:51 +0800 [thread overview]
Message-ID: <20181013145406.4911-1-Tianyu.Lan@microsoft.com> (raw)
From: Lan Tianyu <Tianyu.Lan@microsoft.com>
For nested memory virtualization, Hyper-v doesn't set write-protect
L1 hypervisor EPT page directory and page table node to track changes
while it relies on guest to tell it changes via HvFlushGuestAddressLlist
hypercall. HvFlushGuestAddressLlist hypercall provides a way to flush
EPT page table with ranges which are specified by L1 hypervisor.
If L1 hypervisor uses INVEPT or HvFlushGuestAddressSpace hypercall to
flush EPT tlb, Hyper-V will invalidate associated EPT shadow page table
and sync L1's EPT table when next EPT page fault is triggered.
HvFlushGuestAddressLlist hypercall helps to avoid such redundant EPT
page fault and synchronization of shadow page table.
Change since v3:
1) Remove code of updating "tlbs_dirty" in kvm_flush_remote_tlbs_with_range()
2) Remove directly tlb flush in the kvm_handle_hva_range()
3) Move tlb flush in kvm_set_pte_rmapp() to kvm_mmu_notifier_change_pte()
4) Combine Vitaly's "don't pass EPT configuration info to
vmx_hv_remote_flush_tlb()" fix
Change since v2:
1) Fix comment in the kvm_flush_remote_tlbs_with_range()
2) Move HV_MAX_FLUSH_PAGES and HV_MAX_FLUSH_REP_COUNT to
hyperv-tlfs.h.
3) Calculate HV_MAX_FLUSH_REP_COUNT in the macro definition
4) Use HV_MAX_FLUSH_REP_COUNT to define length of gpa_list in
struct hv_guest_mapping_flush_list.
Change since v1:
1) Convert "end_gfn" of struct kvm_tlb_range to "pages" in order
to avoid confusion as to whether "end_gfn" is inclusive or exlusive.
2) Add hyperv tlb range struct and replace kvm tlb range struct
with new struct in order to avoid using kvm struct in the hyperv
code directly.
Lan Tianyu (15):
KVM: Add tlb_remote_flush_with_range callback in kvm_x86_ops
KVM/MMU: Add tlb flush with range helper function
KVM: Replace old tlb flush function with new one to flush a specified
range.
KVM: Make kvm_set_spte_hva() return int
KVM/MMU: Move tlb flush in kvm_set_pte_rmapp() to
kvm_mmu_notifier_change_pte()
KVM/MMU: Flush tlb directly in the kvm_set_pte_rmapp()
KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range()
KVM/MMU: Flush tlb directly in kvm_mmu_zap_collapsible_spte()
KVM: Add flush_link and parent_pte in the struct kvm_mmu_page
KVM: Add spte's point in the struct kvm_mmu_page
KVM/MMU: Replace tlb flush function with range list flush function
x86/hyper-v: Add HvFlushGuestAddressList hypercall support
x86/Hyper-v: Add trace in the
hyperv_nested_flush_guest_mapping_range()
KVM/VMX: Change hv flush logic when ept tables are mismatched.
KVM/VMX: Add hv tlb range flush support
arch/arm/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/mips/include/asm/kvm_host.h | 2 +-
arch/mips/kvm/mmu.c | 3 +-
arch/powerpc/include/asm/kvm_host.h | 2 +-
arch/powerpc/kvm/book3s.c | 3 +-
arch/powerpc/kvm/e500_mmu_host.c | 3 +-
arch/x86/hyperv/nested.c | 85 ++++++++++++++++++++++
arch/x86/include/asm/hyperv-tlfs.h | 32 +++++++++
arch/x86/include/asm/kvm_host.h | 12 +++-
arch/x86/include/asm/mshyperv.h | 16 +++++
arch/x86/include/asm/trace/hyperv.h | 14 ++++
arch/x86/kvm/mmu.c | 138 ++++++++++++++++++++++++++++++------
arch/x86/kvm/paging_tmpl.h | 10 ++-
arch/x86/kvm/vmx.c | 70 +++++++++++++++---
virt/kvm/arm/mmu.c | 6 +-
virt/kvm/kvm_main.c | 5 +-
17 files changed, 360 insertions(+), 45 deletions(-)
--
2.14.4
WARNING: multiple messages have this Message-ID (diff)
From: lantianyu1986@gmail.com (lantianyu1986 at gmail.com)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V4 00/15] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM
Date: Sat, 13 Oct 2018 22:53:51 +0800 [thread overview]
Message-ID: <20181013145406.4911-1-Tianyu.Lan@microsoft.com> (raw)
From: Lan Tianyu <Tianyu.Lan@microsoft.com>
For nested memory virtualization, Hyper-v doesn't set write-protect
L1 hypervisor EPT page directory and page table node to track changes
while it relies on guest to tell it changes via HvFlushGuestAddressLlist
hypercall. HvFlushGuestAddressLlist hypercall provides a way to flush
EPT page table with ranges which are specified by L1 hypervisor.
If L1 hypervisor uses INVEPT or HvFlushGuestAddressSpace hypercall to
flush EPT tlb, Hyper-V will invalidate associated EPT shadow page table
and sync L1's EPT table when next EPT page fault is triggered.
HvFlushGuestAddressLlist hypercall helps to avoid such redundant EPT
page fault and synchronization of shadow page table.
Change since v3:
1) Remove code of updating "tlbs_dirty" in kvm_flush_remote_tlbs_with_range()
2) Remove directly tlb flush in the kvm_handle_hva_range()
3) Move tlb flush in kvm_set_pte_rmapp() to kvm_mmu_notifier_change_pte()
4) Combine Vitaly's "don't pass EPT configuration info to
vmx_hv_remote_flush_tlb()" fix
Change since v2:
1) Fix comment in the kvm_flush_remote_tlbs_with_range()
2) Move HV_MAX_FLUSH_PAGES and HV_MAX_FLUSH_REP_COUNT to
hyperv-tlfs.h.
3) Calculate HV_MAX_FLUSH_REP_COUNT in the macro definition
4) Use HV_MAX_FLUSH_REP_COUNT to define length of gpa_list in
struct hv_guest_mapping_flush_list.
Change since v1:
1) Convert "end_gfn" of struct kvm_tlb_range to "pages" in order
to avoid confusion as to whether "end_gfn" is inclusive or exlusive.
2) Add hyperv tlb range struct and replace kvm tlb range struct
with new struct in order to avoid using kvm struct in the hyperv
code directly.
Lan Tianyu (15):
KVM: Add tlb_remote_flush_with_range callback in kvm_x86_ops
KVM/MMU: Add tlb flush with range helper function
KVM: Replace old tlb flush function with new one to flush a specified
range.
KVM: Make kvm_set_spte_hva() return int
KVM/MMU: Move tlb flush in kvm_set_pte_rmapp() to
kvm_mmu_notifier_change_pte()
KVM/MMU: Flush tlb directly in the kvm_set_pte_rmapp()
KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range()
KVM/MMU: Flush tlb directly in kvm_mmu_zap_collapsible_spte()
KVM: Add flush_link and parent_pte in the struct kvm_mmu_page
KVM: Add spte's point in the struct kvm_mmu_page
KVM/MMU: Replace tlb flush function with range list flush function
x86/hyper-v: Add HvFlushGuestAddressList hypercall support
x86/Hyper-v: Add trace in the
hyperv_nested_flush_guest_mapping_range()
KVM/VMX: Change hv flush logic when ept tables are mismatched.
KVM/VMX: Add hv tlb range flush support
arch/arm/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/mips/include/asm/kvm_host.h | 2 +-
arch/mips/kvm/mmu.c | 3 +-
arch/powerpc/include/asm/kvm_host.h | 2 +-
arch/powerpc/kvm/book3s.c | 3 +-
arch/powerpc/kvm/e500_mmu_host.c | 3 +-
arch/x86/hyperv/nested.c | 85 ++++++++++++++++++++++
arch/x86/include/asm/hyperv-tlfs.h | 32 +++++++++
arch/x86/include/asm/kvm_host.h | 12 +++-
arch/x86/include/asm/mshyperv.h | 16 +++++
arch/x86/include/asm/trace/hyperv.h | 14 ++++
arch/x86/kvm/mmu.c | 138 ++++++++++++++++++++++++++++++------
arch/x86/kvm/paging_tmpl.h | 10 ++-
arch/x86/kvm/vmx.c | 70 +++++++++++++++---
virt/kvm/arm/mmu.c | 6 +-
virt/kvm/kvm_main.c | 5 +-
17 files changed, 360 insertions(+), 45 deletions(-)
--
2.14.4
WARNING: multiple messages have this Message-ID (diff)
From: lantianyu1986@gmail.com
Cc: Lan Tianyu <Tianyu.Lan@microsoft.com>,
benh@kernel.crashing.org, catalin.marinas@arm.com,
christoffer.dall@arm.com, devel@linuxdriverproject.org,
haiyangz@microsoft.com, hpa@zytor.com, jhogan@kernel.org,
kvmarm@lists.cs.columbia.edu, kvm-ppc@vger.kernel.org,
kvm@vger.kernel.org, kys@microsoft.com,
linux-arm-kernel@lists.infradead.org, linux@armlinux.org,
linux-kernel@vger.kernel.org, linux-mips@linux-mips.org,
linuxppc-dev@lists.ozlabs.org, marc.zyngier@arm.com,
mingo@redhat.com, mpe@ellerman.id.au, paul.burton@mips.com,
paulus@ozlabs.org, pbonzini@redhat.com, ralf@linux-mips.org,
rkrcmar@redhat.com, sthemmin@microsoft.com, tglx@linutronix.de,
will.deacon@arm.com, x86@kernel.org,
michael.h.kelley@microsoft.com, vkuznets@redhat.com
Subject: [PATCH V4 00/15] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM
Date: Sat, 13 Oct 2018 14:53:51 +0000 [thread overview]
Message-ID: <20181013145406.4911-1-Tianyu.Lan@microsoft.com> (raw)
From: Lan Tianyu <Tianyu.Lan@microsoft.com>
For nested memory virtualization, Hyper-v doesn't set write-protect
L1 hypervisor EPT page directory and page table node to track changes
while it relies on guest to tell it changes via HvFlushGuestAddressLlist
hypercall. HvFlushGuestAddressLlist hypercall provides a way to flush
EPT page table with ranges which are specified by L1 hypervisor.
If L1 hypervisor uses INVEPT or HvFlushGuestAddressSpace hypercall to
flush EPT tlb, Hyper-V will invalidate associated EPT shadow page table
and sync L1's EPT table when next EPT page fault is triggered.
HvFlushGuestAddressLlist hypercall helps to avoid such redundant EPT
page fault and synchronization of shadow page table.
Change since v3:
1) Remove code of updating "tlbs_dirty" in kvm_flush_remote_tlbs_with_range()
2) Remove directly tlb flush in the kvm_handle_hva_range()
3) Move tlb flush in kvm_set_pte_rmapp() to kvm_mmu_notifier_change_pte()
4) Combine Vitaly's "don't pass EPT configuration info to
vmx_hv_remote_flush_tlb()" fix
Change since v2:
1) Fix comment in the kvm_flush_remote_tlbs_with_range()
2) Move HV_MAX_FLUSH_PAGES and HV_MAX_FLUSH_REP_COUNT to
hyperv-tlfs.h.
3) Calculate HV_MAX_FLUSH_REP_COUNT in the macro definition
4) Use HV_MAX_FLUSH_REP_COUNT to define length of gpa_list in
struct hv_guest_mapping_flush_list.
Change since v1:
1) Convert "end_gfn" of struct kvm_tlb_range to "pages" in order
to avoid confusion as to whether "end_gfn" is inclusive or exlusive.
2) Add hyperv tlb range struct and replace kvm tlb range struct
with new struct in order to avoid using kvm struct in the hyperv
code directly.
Lan Tianyu (15):
KVM: Add tlb_remote_flush_with_range callback in kvm_x86_ops
KVM/MMU: Add tlb flush with range helper function
KVM: Replace old tlb flush function with new one to flush a specified
range.
KVM: Make kvm_set_spte_hva() return int
KVM/MMU: Move tlb flush in kvm_set_pte_rmapp() to
kvm_mmu_notifier_change_pte()
KVM/MMU: Flush tlb directly in the kvm_set_pte_rmapp()
KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range()
KVM/MMU: Flush tlb directly in kvm_mmu_zap_collapsible_spte()
KVM: Add flush_link and parent_pte in the struct kvm_mmu_page
KVM: Add spte's point in the struct kvm_mmu_page
KVM/MMU: Replace tlb flush function with range list flush function
x86/hyper-v: Add HvFlushGuestAddressList hypercall support
x86/Hyper-v: Add trace in the
hyperv_nested_flush_guest_mapping_range()
KVM/VMX: Change hv flush logic when ept tables are mismatched.
KVM/VMX: Add hv tlb range flush support
arch/arm/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/mips/include/asm/kvm_host.h | 2 +-
arch/mips/kvm/mmu.c | 3 +-
arch/powerpc/include/asm/kvm_host.h | 2 +-
arch/powerpc/kvm/book3s.c | 3 +-
arch/powerpc/kvm/e500_mmu_host.c | 3 +-
arch/x86/hyperv/nested.c | 85 ++++++++++++++++++++++
arch/x86/include/asm/hyperv-tlfs.h | 32 +++++++++
arch/x86/include/asm/kvm_host.h | 12 +++-
arch/x86/include/asm/mshyperv.h | 16 +++++
arch/x86/include/asm/trace/hyperv.h | 14 ++++
arch/x86/kvm/mmu.c | 138 ++++++++++++++++++++++++++++++------
arch/x86/kvm/paging_tmpl.h | 10 ++-
arch/x86/kvm/vmx.c | 70 +++++++++++++++---
virt/kvm/arm/mmu.c | 6 +-
virt/kvm/kvm_main.c | 5 +-
17 files changed, 360 insertions(+), 45 deletions(-)
--
2.14.4
next reply other threads:[~2018-10-13 14:54 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-13 14:53 lantianyu1986 [this message]
2018-10-13 14:53 ` [PATCH V4 00/15] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM lantianyu1986
2018-10-13 14:53 ` lantianyu1986 at gmail.com
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` [PATCH V4 1/15] KVM: Add tlb_remote_flush_with_range callback in kvm_x86_ops lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986 at gmail.com
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` [PATCH V4 2/15] KVM/MMU: Add tlb flush with range helper function lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986 at gmail.com
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-14 7:26 ` Liran Alon
2018-10-14 7:26 ` Liran Alon
2018-10-14 7:26 ` Liran Alon
2018-10-14 7:26 ` Liran Alon
2018-10-14 7:26 ` Liran Alon
2018-10-14 8:16 ` Thomas Gleixner
2018-10-14 8:16 ` Thomas Gleixner
2018-10-14 8:16 ` Thomas Gleixner
2018-10-14 8:16 ` Thomas Gleixner
2018-10-14 8:16 ` Thomas Gleixner
2018-10-14 9:20 ` Liran Alon
2018-10-14 9:20 ` Liran Alon
2018-10-14 9:20 ` Liran Alon
2018-10-14 9:20 ` Liran Alon
2018-10-14 9:20 ` Liran Alon
2018-10-14 12:57 ` Tianyu Lan
2018-10-14 12:57 ` Tianyu Lan
2018-10-14 12:57 ` Tianyu Lan
2018-10-14 12:57 ` Tianyu Lan
2018-10-14 12:57 ` Tianyu Lan
2018-10-14 9:27 ` Russell King - ARM Linux
2018-10-14 9:27 ` Russell King - ARM Linux
2018-10-14 9:27 ` Russell King - ARM Linux
2018-10-14 9:27 ` Russell King - ARM Linux
2018-10-14 9:27 ` Russell King - ARM Linux
2018-10-14 9:27 ` Russell King - ARM Linux
2018-10-14 9:35 ` Russell King - ARM Linux
2018-10-14 9:35 ` Russell King - ARM Linux
2018-10-14 9:35 ` Russell King - ARM Linux
2018-10-14 9:35 ` Russell King - ARM Linux
2018-10-14 13:21 ` Tianyu Lan
2018-10-14 13:21 ` Tianyu Lan
2018-10-14 13:21 ` Tianyu Lan
2018-10-14 13:21 ` Tianyu Lan
2018-10-14 13:21 ` Tianyu Lan
2018-10-14 13:21 ` Tianyu Lan
2018-10-14 13:33 ` Russell King - ARM Linux
2018-10-14 13:33 ` Russell King - ARM Linux
2018-10-14 13:33 ` Russell King - ARM Linux
2018-10-14 13:33 ` Russell King - ARM Linux
2018-10-14 13:33 ` Russell King - ARM Linux
2018-10-15 12:02 ` Paolo Bonzini
2018-10-15 12:02 ` Paolo Bonzini
2018-10-15 12:02 ` Paolo Bonzini
2018-10-15 12:02 ` Paolo Bonzini
2018-10-13 14:53 ` [PATCH V4 3/15] KVM: Replace old tlb flush function with new one to flush a specified range lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986 at gmail.com
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` [PATCH V4 4/15] KVM: Make kvm_set_spte_hva() return int lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986 at gmail.com
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:53 ` [PATCH V4 5/15] KVM/MMU: Move tlb flush in kvm_set_pte_rmapp() to kvm_mmu_notifier_change_pte() lantianyu1986
2018-10-13 14:53 ` [PATCH V4 6/15] KVM/MMU: Flush tlb directly in the kvm_set_pte_rmapp() lantianyu1986
2018-10-15 11:52 ` Paolo Bonzini
2018-10-13 14:53 ` [PATCH V4 7/15] KVM/MMU: Flush tlb directly in the kvm_zap_gfn_range() lantianyu1986
2018-10-15 10:04 ` Paolo Bonzini
2018-10-15 13:08 ` Tianyu Lan
2018-10-13 14:53 ` [PATCH V4 8/15] KVM/MMU: Flush tlb directly in kvm_mmu_zap_collapsible_spte() lantianyu1986
2018-10-13 14:53 ` lantianyu1986
2018-10-13 14:54 ` [PATCH V4 9/15] KVM: Add flush_link and parent_pte in the struct kvm_mmu_page lantianyu1986
2018-10-15 10:12 ` Paolo Bonzini
2018-10-15 10:12 ` Paolo Bonzini
2018-10-13 14:54 ` [PATCH V4 10/15] KVM: Add spte's point " lantianyu1986
2018-10-13 14:54 ` [PATCH V4 11/15] KVM/MMU: Replace tlb flush function with range list flush function lantianyu1986
2018-10-15 11:51 ` Paolo Bonzini
2018-10-13 14:54 ` [PATCH V4 12/15] x86/hyper-v: Add HvFlushGuestAddressList hypercall support lantianyu1986
2018-10-15 10:30 ` Paolo Bonzini
2018-10-15 10:30 ` Paolo Bonzini
2018-10-13 14:54 ` [PATCH V4 13/15] x86/Hyper-v: Add trace in the hyperv_nested_flush_guest_mapping_range() lantianyu1986
2018-10-13 14:54 ` [PATCH V4 14/15] KVM/VMX: Change hv flush logic when ept tables are mismatched lantianyu1986
2018-10-15 11:15 ` Paolo Bonzini
2018-10-13 14:54 ` [PATCH V4 15/15] KVM/VMX: Add hv tlb range flush support lantianyu1986
2018-10-15 12:04 ` [PATCH V4 00/15] x86/KVM/Hyper-v: Add HV ept tlb range flush hypercall support in KVM Paolo Bonzini
2018-10-15 12:04 ` Paolo Bonzini
2018-10-15 12:04 ` Paolo Bonzini
2018-10-15 12:04 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181013145406.4911-1-Tianyu.Lan@microsoft.com \
--to=lantianyu1986@gmail.com \
--cc=Tianyu.Lan@microsoft.com \
--cc=benh@kernel.crashing.org \
--cc=catalin.marinas@arm.com \
--cc=christoffer.dall@arm.com \
--cc=devel@linuxdriverproject.org \
--cc=haiyangz@microsoft.com \
--cc=hpa@zytor.com \
--cc=jhogan@kernel.org \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=kys@microsoft.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=linux@armlinux.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=marc.zyngier@arm.com \
--cc=michael.h.kelley@microsoft.com \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=paul.burton@mips.com \
--cc=paulus@ozlabs.org \
--cc=pbonzini@redhat.com \
--cc=ralf@linux-mips.org \
--cc=rkrcmar@redhat.com \
--cc=sthemmin@microsoft.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=will.deacon@arm.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.