[PW_SID:1156337] KVM: selftests: PPC pre-enabling - #2582
[PW_SID:1156337] KVM: selftests: PPC pre-enabling#2582linux-riscv-bot wants to merge 21 commits into
Conversation
…ions/segments Use MEM_REGION_PT to indirectly specify memslot '0' instead of hardcoding the memslot in s390's virtual memory allocator, as a first step towards taking the allocation type instead of the exact, raw memslot in the physical memory allocator. Note, the only tests that set MEM_REGION_PT to a memslot other than '0' are arm64-only, i.e. s390 always uses memslot '0' for page tables. No functional change intended. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Use the common minimum GPA for page tables (0x180000) on LoongArch instead of LoongArch's custom minimum of 0x200000, so that LoongArch can use vm_alloc_page_table() instead of open coding a rough equivalent. There are no known reasons why LoongArch can't use a lower, less-aligned minimum. The more-aligned value was originally selected to support huge pages for the guest, but that only requires the address of the final allocation to be aligned, the addresses of page table pages is irrelevant on that front. Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…tables Now that LoongArch uses KVM_GUEST_PAGE_TABLE_MIN_PADDR for its page table page allocations, use the common vm_alloc_page_table() instead of open coding the same. Opportunistically drop the assert that the allocation succeeded, as the allocator itself guarantees success. No functional change intended. Reviewed-by: Bibo Mao <maobibo@loongson.cn> Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…locators Rename the "num" param in the physical page allocator APIs to "nr_pages" to make the unit and role of the param more obvious. Opportunistically rework the function comment to drop the superfluous kerneldoc style, and to very explicitly call out that success is guaranteed. No functional change intended. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…physical pages Rework the core loop of the physical page allocator to use a goto instead of do-while loop when retrying with a new base address. The do-while loop obviously works, but it obfuscates the success vs. failure paths, and in general is convoluted. For all intents and purposes, no functional change intended. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> [Rebased to latest mainline tree] Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com> [sean: separate from alignment change, use enomem label, write changelog] Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…locations Extend the page allocator to support naturally aligned allocations, as some flavors of PowerPC page tables require multiple guest pages per table, and those tables need to be naturally aligned. Take care to align the potential base address *inside* the retry loop, i.e. the base needs to be (re)aligned on every attempt. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Move the single-page allocator APIs to kvm_util.h as inline functions, as the are trivial wrappers, and unlike __vm_phy_pages_alloc(), are expected to remain that way for the foreseeable future. No functional change intended. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…erf test Use the quad-underscores physical page allocator API in the memslot perf test in anticipation of converting the outer versions to take the memory region type instead of the raw memslot. Stating the obvious, the memslot perf test creates and allocates from multiple memslots, and so can't use MEM_REGION_TEST_DATA to communicate which region/slot to allocate from. No functional change intended. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…uting test Use the quad-underscores page allocator in s390's IRQ routing test in anticipation of dropping the @min_gpa param from the primary APIs. Note, it's not entirely clear that the test *needs* to use a very magical @min_gpa, i.e. it's possible a more elegant solution exists. But that's a problem for a different day. No functional change intended. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Add vm_alloc_page_table_pages() and use it throughout arch code to replace open coded equivalents. No functional change intended. Reviewed-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…g creation Initialize vm->memslots[] with an invalid memslots value during very initial VM creation so that failure to configure the core memory regions generates an immediate assert instead of potential weirdness, e.g. if slot0 is coincidentally valid. This will also allow hardening the region APIs to guard overriding a region's memslot multiple times. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…memslots Add and use APIs to override memory region types instead of open coding the logic in tests, partly to dedup test code, but mostly to add some amount of protection against conflicting overrides. This will allow converting more tests to override memory regions without taking on too much risk of bugs in the long term, e.g. due to silently overriding a region multiple times. Deliberately "unroll" the loops in __vm_create() and the CMMA test's create_main_memslot() to avoid filling all memslots in anticipation of adding an "extra" memslot that is for test use and *only* test use, i.e. shouldn't be configured by core library code. Converting tests to overriding memory regions will allow taking the region type instead of the raw memslot in the physical page allocator APIs. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
And another memory region type to deal with extra, one-off memory regions, and use the new type to manage x86's SMRAM memslot, as another step towards taking the region type instead of the raw memslot in the physical page allocator APIs. Alternatively, SMRAM setup could simply use the quad-underscore API to continue passing in the memslot, but a surprising number of tests use an "extra" memslot for a variety of reasons. I.e. allocating memory from one (and exactly one) extra memslot isn't all that rare, and so should be treated as normal behavior, not as something extraordinary, as quad-underscore functions typically suggest. Opportunistically add comments to document the intended usage of the types, as the difference between DATA, TEST_DATA, and TEST_EXTRA in particular isn't exactly obvious. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Use the TEST_EXTRA region/memslot for arm64's vGIC LPI stress test instead of a custom memslot, so that the primary vm_phy_pages_alloc() APIs can be reworked to take a region type instead of a raw memslot. For all intents and purposes, no functional change intended, as vm_override_mem_region() is barely more than a wrapper for vm_userspace_mem_region_add(). Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Use the TEST_EXTRA region/memslot for x86's smaller MAXPHYADDR test instead of a custom memslot, so that the primary vm_phy_pages_alloc() APIs can be reworked to take a region type instead of a raw memslot. For all intents and purposes, no functional change intended, as vm_add_extra_mem_region() is barely more than a wrapper for vm_userspace_mem_region_add(). Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Use the TEST_EXTRA region/memslot in the "set memory region" test instead of a custom memslot, so that the primary vm_phy_pages_alloc() APIs can be reworked to take a region type instead of a raw memslot. For all intents and purposes, no functional change intended, as vm_override_mem_region() is barely more than a wrapper for vm_userspace_mem_region_add(). Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…ocators Take the memory region type instead of the memslot in all page allocator APIs, except for the innermost quad-underscores function. This will allow automatically selecting the minimum GPA based on the allocation type, which can't be done using the memslot due to all regions sharing a single memslot by default. PowerPC support will also leverage the type to ensure that page table allocations are naturally aligned. No functional change intended. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
Use a proper selftests TEST_ASSERT() in vm_get_mem_region() so that bad input is guaranteed to fail the test, and with the standard error message format. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…egion type Automatically choose the minimum GPA for physical page allocations based on the region type instead of sprinkling the logic over various wrappers and tests. All usage falls into three categories: (a) don't care, just use the bare minimum GPA, (b) page tables, use a slightly higher min to keep low memory available, (c) custom memslot, use the base of the memslot. I.e. there isn't a strong need to allow completely custom minimums. Opportunistically move the vGIC LPI stress test's "gpa_base" variable into setup_memslot() as the only reason it was a global variable was so that it could be passed as the minimum GPA for allocations from the extra memslot. Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
…igned Add an arch hook to communicate to the core physical page allocator that page table allocations need to be naturally aligned. The hook will be used for upcoming PowerPC support, which has MMU tables that are larger than the guest base page size and need to be naturally aligned. Bury the hook in the physical page allocator to avoid having to plumb a rarely used param into the main APIs. Cc: Ritesh Harjani (IBM) <ritesh.list@gmail.com> Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Linux RISC-V bot <linux.riscv.bot@gmail.com>
9ed823f to
a54e736
Compare
|
Patch 1: "[v2,01/20] KVM: selftests: Use MEM_REGION_PT memslot instead of '0' for s390 regions/segments" |
|
Patch 1: "[v2,01/20] KVM: selftests: Use MEM_REGION_PT memslot instead of '0' for s390 regions/segments" |
|
Patch 1: "[v2,01/20] KVM: selftests: Use MEM_REGION_PT memslot instead of '0' for s390 regions/segments" |
|
Patch 1: "[v2,01/20] KVM: selftests: Use MEM_REGION_PT memslot instead of '0' for s390 regions/segments" |
|
Patch 1: "[v2,01/20] KVM: selftests: Use MEM_REGION_PT memslot instead of '0' for s390 regions/segments" |
|
Patch 1: "[v2,01/20] KVM: selftests: Use MEM_REGION_PT memslot instead of '0' for s390 regions/segments" |
|
Patch 18: "[v2,18/20] KVM: selftests: Use TEST_ASSERT(), not assert(), in vm_get_mem_region()" |
|
Patch 18: "[v2,18/20] KVM: selftests: Use TEST_ASSERT(), not assert(), in vm_get_mem_region()" |
|
Patch 18: "[v2,18/20] KVM: selftests: Use TEST_ASSERT(), not assert(), in vm_get_mem_region()" |
|
Patch 18: "[v2,18/20] KVM: selftests: Use TEST_ASSERT(), not assert(), in vm_get_mem_region()" |
|
Patch 18: "[v2,18/20] KVM: selftests: Use TEST_ASSERT(), not assert(), in vm_get_mem_region()" |
|
Patch 18: "[v2,18/20] KVM: selftests: Use TEST_ASSERT(), not assert(), in vm_get_mem_region()" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 19: "[v2,19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
|
Patch 20: "[v2,20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned" |
PR for series 1156337 applied to workflow__riscv__fixes
Name: KVM: selftests: PPC pre-enabling
URL: https://patchwork.kernel.org/project/linux-riscv/list/?series=1156337
Version: 2