From: Ricardo Koller <ricarkol@google.com>
To: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu,
andrew.jones@linux.dev
Cc: maz@kernel.org, bgardon@google.com, pbonzini@redhat.com,
axelrasmussen@google.com, dmatlack@google.com
Subject: Re: [PATCH v6 00/13] KVM: selftests: Add aarch64/page_fault_test
Date: Mon, 19 Sep 2022 21:18:32 -0700 [thread overview]
Message-ID: <Yyk/GMtOpprLR/zo@google.com> (raw)
In-Reply-To: <20220920041509.3131141-1-ricarkol@google.com>
On Tue, Sep 20, 2022 at 04:14:56AM +0000, Ricardo Koller wrote:
> This series adds a new aarch64 selftest for testing stage 2 fault handling for
> various combinations of guest accesses (e.g., write, S1PTW), backing sources
> (e.g., anon), and types of faults (e.g., read on hugetlbfs with a hole, write
> on a readonly memslot). Each test tries a different combination and then checks
> that the access results in the right behavior (e.g., uffd faults with the right
> address and write/read flag). Some interesting combinations are:
>
> - loading an instruction leads to a stage 1 page-table-walk that misses on
> stage 2 because the backing memslot for the page table it not in host memory
> (a hole was punched right there) and the fault is handled using userfaultfd.
> The expected behavior is that this leads to a userfaultfd fault marked as a
> write. See commit c4ad98e4b72c ("KVM: arm64: Assume write fault on S1PTW
> permission fault on instruction fetch") for why that's a write.
> - a cas (compare-and-swap) on a readonly memslot leads to a failed vcpu run.
> - write-faulting on a memslot that's marked for userfaultfd handling and dirty
> logging should result in a uffd fault and having the respective bit set in
> the dirty log.
>
> The first 8 commits of this series add library support. The first one adds a
> new userfaultfd library. Commits 2-5 add some misc library changes that will be
> used by the new test, like a library function to get the GPA of a PTE. Commits
> 6-8 breaks the implicit assumption that code and page tables live in memslot
> memslots should allocators use. This is then used by the new test to place the
> page tables in a specific memslot. The last 5 commits add the new selftest,
> one type of test at a time. It first adds core tests, then uffd, then dirty
> logging, then readonly memslots tests, and finally combinations of the previous
> ones (like uffd and dirty logging at the same time).
>
> v6 -> v7: https://lore.kernel.org/kvmarm/Yyi03sX5hx36M%2FZr@google.com/
> - removed struct kvm_vm_mem_params. Changed page_fault_test.c accordingly. [Sean]
> - applied Oliver's patch to fix page_fault_test compilation warnings. [Oliver]
> - added R-b's from Oliver and Andrew. Didn't Andrew's R-b on 6/13 as the commit
> changed afterwards.
>
> v5 -> v6: https://lore.kernel.org/kvmarm/20220823234727.621535-1-ricarkol@google.com/
> - added "enum memslot_type" and all the related cleanups due to it [Andrew]
> - default kvm_vm_mem_default with size=0 [Andrew,Sean]
> - __vm_vaddr_alloc() taking "enum memslot_type" and all the related cleanups
> due to this change [Andrew]
>
> v4 -> v5: https://lore.kernel.org/kvmarm/20220624213257.1504783-1-ricarkol@google.com/
> - biggest change: followed suggestion from Sean and Andrew regarding a new
> arg for vm_create() to specify the guest memory layout. That's taken care
> of with these two new commits:
> KVM: selftests: Use the right memslot for code, page-tables, and data allocations
> KVM: selftests: Change ____vm_create() to take struct kvm_vm_mem_params
> plus the respective changes in the page_fault_test itself (mostly code reduction).
> - dropped some commits that are not needed after the above change:
> KVM: selftests: aarch64: Export _virt_pg_map with a pt_memslot arg
> KVM: selftests: Add vm_alloc_page_table_in_memslot library function
> KVM: selftests: Add vm_mem_region_get_src_fd library function
> - addressed Oliver comments in commit "KVM: selftests: aarch64: Add
> aarch64/page_fault_test"
> - collect r-b's from Andrew
>
> Ricardo Koller (13):
> KVM: selftests: Add a userfaultfd library
> KVM: selftests: aarch64: Add virt_get_pte_hva() library function
> KVM: selftests: Add missing close and munmap in
> __vm_mem_region_delete()
> KVM: selftests: aarch64: Construct DEFAULT_MAIR_EL1 using sysreg.h
> macros
> tools: Copy bitfield.h from the kernel sources
> KVM: selftests: Stash backing_src_type in struct userspace_mem_region
> KVM: selftests: Add vm->memslots[] and enum kvm_mem_region_type
> KVM: selftests: Use the right memslot for code, page-tables, and data
> allocations
> KVM: selftests: aarch64: Add aarch64/page_fault_test
> KVM: selftests: aarch64: Add userfaultfd tests into page_fault_test
> KVM: selftests: aarch64: Add dirty logging tests into page_fault_test
> KVM: selftests: aarch64: Add readonly memslot tests into
> page_fault_test
> KVM: selftests: aarch64: Add mix of tests into page_fault_test
>
> tools/include/linux/bitfield.h | 176 +++
> tools/testing/selftests/kvm/.gitignore | 1 +
> tools/testing/selftests/kvm/Makefile | 2 +
> .../selftests/kvm/aarch64/page_fault_test.c | 1116 +++++++++++++++++
> .../selftests/kvm/demand_paging_test.c | 228 +---
> .../selftests/kvm/include/aarch64/processor.h | 35 +-
> .../selftests/kvm/include/kvm_util_base.h | 29 +-
> .../selftests/kvm/include/userfaultfd_util.h | 45 +
> .../selftests/kvm/lib/aarch64/processor.c | 26 +-
> tools/testing/selftests/kvm/lib/elf.c | 3 +-
> tools/testing/selftests/kvm/lib/kvm_util.c | 82 +-
> .../selftests/kvm/lib/riscv/processor.c | 7 +-
> .../selftests/kvm/lib/s390x/processor.c | 7 +-
> .../selftests/kvm/lib/userfaultfd_util.c | 186 +++
> .../selftests/kvm/lib/x86_64/processor.c | 13 +-
> 15 files changed, 1698 insertions(+), 258 deletions(-)
> create mode 100644 tools/include/linux/bitfield.h
> create mode 100644 tools/testing/selftests/kvm/aarch64/page_fault_test.c
> create mode 100644 tools/testing/selftests/kvm/include/userfaultfd_util.h
> create mode 100644 tools/testing/selftests/kvm/lib/userfaultfd_util.c
>
> --
> 2.37.3.968.ga6b4b080e4-goog
>
Please ignore this v6 series (It should have been v7). Sending the real
v7 in a bit. Thanks and sorry for the mess!
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
WARNING: multiple messages have this Message-ID (diff)
From: Ricardo Koller <ricarkol@google.com>
To: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu,
andrew.jones@linux.dev
Cc: pbonzini@redhat.com, maz@kernel.org, seanjc@google.com,
alexandru.elisei@arm.com, eric.auger@redhat.com,
oupton@google.com, reijiw@google.com, rananta@google.com,
bgardon@google.com, dmatlack@google.com,
axelrasmussen@google.com
Subject: Re: [PATCH v6 00/13] KVM: selftests: Add aarch64/page_fault_test
Date: Mon, 19 Sep 2022 21:18:32 -0700 [thread overview]
Message-ID: <Yyk/GMtOpprLR/zo@google.com> (raw)
In-Reply-To: <20220920041509.3131141-1-ricarkol@google.com>
On Tue, Sep 20, 2022 at 04:14:56AM +0000, Ricardo Koller wrote:
> This series adds a new aarch64 selftest for testing stage 2 fault handling for
> various combinations of guest accesses (e.g., write, S1PTW), backing sources
> (e.g., anon), and types of faults (e.g., read on hugetlbfs with a hole, write
> on a readonly memslot). Each test tries a different combination and then checks
> that the access results in the right behavior (e.g., uffd faults with the right
> address and write/read flag). Some interesting combinations are:
>
> - loading an instruction leads to a stage 1 page-table-walk that misses on
> stage 2 because the backing memslot for the page table it not in host memory
> (a hole was punched right there) and the fault is handled using userfaultfd.
> The expected behavior is that this leads to a userfaultfd fault marked as a
> write. See commit c4ad98e4b72c ("KVM: arm64: Assume write fault on S1PTW
> permission fault on instruction fetch") for why that's a write.
> - a cas (compare-and-swap) on a readonly memslot leads to a failed vcpu run.
> - write-faulting on a memslot that's marked for userfaultfd handling and dirty
> logging should result in a uffd fault and having the respective bit set in
> the dirty log.
>
> The first 8 commits of this series add library support. The first one adds a
> new userfaultfd library. Commits 2-5 add some misc library changes that will be
> used by the new test, like a library function to get the GPA of a PTE. Commits
> 6-8 breaks the implicit assumption that code and page tables live in memslot
> memslots should allocators use. This is then used by the new test to place the
> page tables in a specific memslot. The last 5 commits add the new selftest,
> one type of test at a time. It first adds core tests, then uffd, then dirty
> logging, then readonly memslots tests, and finally combinations of the previous
> ones (like uffd and dirty logging at the same time).
>
> v6 -> v7: https://lore.kernel.org/kvmarm/Yyi03sX5hx36M%2FZr@google.com/
> - removed struct kvm_vm_mem_params. Changed page_fault_test.c accordingly. [Sean]
> - applied Oliver's patch to fix page_fault_test compilation warnings. [Oliver]
> - added R-b's from Oliver and Andrew. Didn't Andrew's R-b on 6/13 as the commit
> changed afterwards.
>
> v5 -> v6: https://lore.kernel.org/kvmarm/20220823234727.621535-1-ricarkol@google.com/
> - added "enum memslot_type" and all the related cleanups due to it [Andrew]
> - default kvm_vm_mem_default with size=0 [Andrew,Sean]
> - __vm_vaddr_alloc() taking "enum memslot_type" and all the related cleanups
> due to this change [Andrew]
>
> v4 -> v5: https://lore.kernel.org/kvmarm/20220624213257.1504783-1-ricarkol@google.com/
> - biggest change: followed suggestion from Sean and Andrew regarding a new
> arg for vm_create() to specify the guest memory layout. That's taken care
> of with these two new commits:
> KVM: selftests: Use the right memslot for code, page-tables, and data allocations
> KVM: selftests: Change ____vm_create() to take struct kvm_vm_mem_params
> plus the respective changes in the page_fault_test itself (mostly code reduction).
> - dropped some commits that are not needed after the above change:
> KVM: selftests: aarch64: Export _virt_pg_map with a pt_memslot arg
> KVM: selftests: Add vm_alloc_page_table_in_memslot library function
> KVM: selftests: Add vm_mem_region_get_src_fd library function
> - addressed Oliver comments in commit "KVM: selftests: aarch64: Add
> aarch64/page_fault_test"
> - collect r-b's from Andrew
>
> Ricardo Koller (13):
> KVM: selftests: Add a userfaultfd library
> KVM: selftests: aarch64: Add virt_get_pte_hva() library function
> KVM: selftests: Add missing close and munmap in
> __vm_mem_region_delete()
> KVM: selftests: aarch64: Construct DEFAULT_MAIR_EL1 using sysreg.h
> macros
> tools: Copy bitfield.h from the kernel sources
> KVM: selftests: Stash backing_src_type in struct userspace_mem_region
> KVM: selftests: Add vm->memslots[] and enum kvm_mem_region_type
> KVM: selftests: Use the right memslot for code, page-tables, and data
> allocations
> KVM: selftests: aarch64: Add aarch64/page_fault_test
> KVM: selftests: aarch64: Add userfaultfd tests into page_fault_test
> KVM: selftests: aarch64: Add dirty logging tests into page_fault_test
> KVM: selftests: aarch64: Add readonly memslot tests into
> page_fault_test
> KVM: selftests: aarch64: Add mix of tests into page_fault_test
>
> tools/include/linux/bitfield.h | 176 +++
> tools/testing/selftests/kvm/.gitignore | 1 +
> tools/testing/selftests/kvm/Makefile | 2 +
> .../selftests/kvm/aarch64/page_fault_test.c | 1116 +++++++++++++++++
> .../selftests/kvm/demand_paging_test.c | 228 +---
> .../selftests/kvm/include/aarch64/processor.h | 35 +-
> .../selftests/kvm/include/kvm_util_base.h | 29 +-
> .../selftests/kvm/include/userfaultfd_util.h | 45 +
> .../selftests/kvm/lib/aarch64/processor.c | 26 +-
> tools/testing/selftests/kvm/lib/elf.c | 3 +-
> tools/testing/selftests/kvm/lib/kvm_util.c | 82 +-
> .../selftests/kvm/lib/riscv/processor.c | 7 +-
> .../selftests/kvm/lib/s390x/processor.c | 7 +-
> .../selftests/kvm/lib/userfaultfd_util.c | 186 +++
> .../selftests/kvm/lib/x86_64/processor.c | 13 +-
> 15 files changed, 1698 insertions(+), 258 deletions(-)
> create mode 100644 tools/include/linux/bitfield.h
> create mode 100644 tools/testing/selftests/kvm/aarch64/page_fault_test.c
> create mode 100644 tools/testing/selftests/kvm/include/userfaultfd_util.h
> create mode 100644 tools/testing/selftests/kvm/lib/userfaultfd_util.c
>
> --
> 2.37.3.968.ga6b4b080e4-goog
>
Please ignore this v6 series (It should have been v7). Sending the real
v7 in a bit. Thanks and sorry for the mess!
next prev parent reply other threads:[~2022-09-20 4:18 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-20 4:14 [PATCH v6 00/13] KVM: selftests: Add aarch64/page_fault_test Ricardo Koller
2022-09-20 4:14 ` Ricardo Koller
2022-09-20 4:14 ` [PATCH v6 01/13] KVM: selftests: Add a userfaultfd library Ricardo Koller
2022-09-20 4:14 ` Ricardo Koller
2022-09-20 4:14 ` [PATCH v6 02/13] KVM: selftests: aarch64: Add virt_get_pte_hva() library function Ricardo Koller
2022-09-20 4:14 ` Ricardo Koller
2022-09-20 4:14 ` [PATCH v6 03/13] KVM: selftests: Add missing close and munmap in __vm_mem_region_delete() Ricardo Koller
2022-09-20 4:14 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 04/13] KVM: selftests: aarch64: Construct DEFAULT_MAIR_EL1 using sysreg.h macros Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 05/13] tools: Copy bitfield.h from the kernel sources Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 06/13] KVM: selftests: Stash backing_src_type in struct userspace_mem_region Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 07/13] KVM: selftests: Add vm->memslots[] and enum kvm_mem_region_type Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 08/13] KVM: selftests: Use the right memslot for code, page-tables, and data allocations Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 09/13] KVM: selftests: aarch64: Add aarch64/page_fault_test Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 10/13] KVM: selftests: aarch64: Add userfaultfd tests into page_fault_test Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 11/13] KVM: selftests: aarch64: Add dirty logging " Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 12/13] KVM: selftests: aarch64: Add readonly memslot " Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:15 ` [PATCH v6 13/13] KVM: selftests: aarch64: Add mix of " Ricardo Koller
2022-09-20 4:15 ` Ricardo Koller
2022-09-20 4:18 ` Ricardo Koller [this message]
2022-09-20 4:18 ` [PATCH v6 00/13] KVM: selftests: Add aarch64/page_fault_test Ricardo Koller
-- strict thread matches above, loose matches on Subject: below --
2022-09-06 18:09 Ricardo Koller
2022-09-06 18:09 ` Ricardo Koller
2022-09-19 10:38 ` Marc Zyngier
2022-09-19 10:38 ` Marc Zyngier
2022-09-19 16:38 ` Sean Christopherson
2022-09-19 16:38 ` Sean Christopherson
2022-09-19 16:57 ` Marc Zyngier
2022-09-19 16:57 ` Marc Zyngier
2022-09-19 18:28 ` Ricardo Koller
2022-09-19 18:28 ` Ricardo Koller
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=Yyk/GMtOpprLR/zo@google.com \
--to=ricarkol@google.com \
--cc=andrew.jones@linux.dev \
--cc=axelrasmussen@google.com \
--cc=bgardon@google.com \
--cc=dmatlack@google.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=maz@kernel.org \
--cc=pbonzini@redhat.com \
/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.