mbox series

[v6,00/13] RISCV: Add KVM_GET_REG_LIST API

Message ID cover.1690273969.git.haibo1.xu@intel.com (mailing list archive)
Headers show
Series RISCV: Add KVM_GET_REG_LIST API | expand

Message

Xu, Haibo1 July 25, 2023, 8:41 a.m. UTC
KVM_GET_REG_LIST will dump all register IDs that are available to
KVM_GET/SET_ONE_REG and It's very useful to identify some platform
regression issue during VM migration.

Patch 1-7 re-structured the get-reg-list test in aarch64 to make some
of the code as common test framework that can be shared by riscv.

Patch 8 move reject_set check logic to a function so as to check for
different errno for different registers.
Patch 9 move finalize_vcpu back to run_test so that riscv can implement
its specific operation.
Patch 10 change to do the get/set operation only on present-blessed list.
Patch 11 add the skip_set facilities so that riscv can skip set operation
on some registers.
Patch 12 enabled the KVM_GET_REG_LIST API in riscv.
patch 13 added the corresponding kselftest for checking possible
register regressions.

The get-reg-list kvm selftest was ported from aarch64 and tested with
Linux v6.5-rc3 on a Qemu riscv64 virt machine.

---
Changed since v5:
  * Rebase to v6.5-rc3
  * Minor fix for Andrew's comments

Andrew Jones (7):
  KVM: arm64: selftests: Replace str_with_index with strdup_printf
  KVM: arm64: selftests: Drop SVE cap check in print_reg
  KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config
  KVM: arm64: selftests: Rename vcpu_config and add to kvm_util.h
  KVM: arm64: selftests: Delete core_reg_fixup
  KVM: arm64: selftests: Split get-reg-list test code
  KVM: arm64: selftests: Finish generalizing get-reg-list

Haibo Xu (6):
  KVM: arm64: selftests: Move reject_set check logic to a function
  KVM: arm64: selftests: Move finalize_vcpu back to run_test
  KVM: selftests: Only do get/set tests on present blessed list
  KVM: selftests: Add skip_set facility to get_reg_list test
  KVM: riscv: Add KVM_GET_REG_LIST API support
  KVM: riscv: selftests: Add get-reg-list test

 Documentation/virt/kvm/api.rst                |   2 +-
 arch/riscv/kvm/vcpu.c                         | 375 +++++++++
 tools/testing/selftests/kvm/Makefile          |  13 +-
 .../selftests/kvm/aarch64/get-reg-list.c      | 554 ++-----------
 tools/testing/selftests/kvm/get-reg-list.c    | 401 +++++++++
 .../selftests/kvm/include/kvm_util_base.h     |  21 +
 .../selftests/kvm/include/riscv/processor.h   |   3 +
 .../testing/selftests/kvm/include/test_util.h |   2 +
 tools/testing/selftests/kvm/lib/test_util.c   |  15 +
 .../selftests/kvm/riscv/get-reg-list.c        | 780 ++++++++++++++++++
 10 files changed, 1670 insertions(+), 496 deletions(-)
 create mode 100644 tools/testing/selftests/kvm/get-reg-list.c
 create mode 100644 tools/testing/selftests/kvm/riscv/get-reg-list.c

Comments

Anup Patel Aug. 7, 2023, 3:48 a.m. UTC | #1
Hi Marc, Hi Oliver,

On Tue, Jul 25, 2023 at 2:05 PM Haibo Xu <haibo1.xu@intel.com> wrote:
>
> KVM_GET_REG_LIST will dump all register IDs that are available to
> KVM_GET/SET_ONE_REG and It's very useful to identify some platform
> regression issue during VM migration.
>
> Patch 1-7 re-structured the get-reg-list test in aarch64 to make some
> of the code as common test framework that can be shared by riscv.
>
> Patch 8 move reject_set check logic to a function so as to check for
> different errno for different registers.
> Patch 9 move finalize_vcpu back to run_test so that riscv can implement
> its specific operation.
> Patch 10 change to do the get/set operation only on present-blessed list.
> Patch 11 add the skip_set facilities so that riscv can skip set operation
> on some registers.
> Patch 12 enabled the KVM_GET_REG_LIST API in riscv.
> patch 13 added the corresponding kselftest for checking possible
> register regressions.
>
> The get-reg-list kvm selftest was ported from aarch64 and tested with
> Linux v6.5-rc3 on a Qemu riscv64 virt machine.
>
> ---
> Changed since v5:
>   * Rebase to v6.5-rc3
>   * Minor fix for Andrew's comments
>
> Andrew Jones (7):
>   KVM: arm64: selftests: Replace str_with_index with strdup_printf
>   KVM: arm64: selftests: Drop SVE cap check in print_reg
>   KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config
>   KVM: arm64: selftests: Rename vcpu_config and add to kvm_util.h
>   KVM: arm64: selftests: Delete core_reg_fixup
>   KVM: arm64: selftests: Split get-reg-list test code
>   KVM: arm64: selftests: Finish generalizing get-reg-list
>
> Haibo Xu (6):
>   KVM: arm64: selftests: Move reject_set check logic to a function
>   KVM: arm64: selftests: Move finalize_vcpu back to run_test
>   KVM: selftests: Only do get/set tests on present blessed list
>   KVM: selftests: Add skip_set facility to get_reg_list test
>   KVM: riscv: Add KVM_GET_REG_LIST API support
>   KVM: riscv: selftests: Add get-reg-list test

Are you okay for this series to go through the KVM RISC-V tree ?

Regards,
Anup

>
>  Documentation/virt/kvm/api.rst                |   2 +-
>  arch/riscv/kvm/vcpu.c                         | 375 +++++++++
>  tools/testing/selftests/kvm/Makefile          |  13 +-
>  .../selftests/kvm/aarch64/get-reg-list.c      | 554 ++-----------
>  tools/testing/selftests/kvm/get-reg-list.c    | 401 +++++++++
>  .../selftests/kvm/include/kvm_util_base.h     |  21 +
>  .../selftests/kvm/include/riscv/processor.h   |   3 +
>  .../testing/selftests/kvm/include/test_util.h |   2 +
>  tools/testing/selftests/kvm/lib/test_util.c   |  15 +
>  .../selftests/kvm/riscv/get-reg-list.c        | 780 ++++++++++++++++++
>  10 files changed, 1670 insertions(+), 496 deletions(-)
>  create mode 100644 tools/testing/selftests/kvm/get-reg-list.c
>  create mode 100644 tools/testing/selftests/kvm/riscv/get-reg-list.c
>
> --
> 2.34.1
>
Marc Zyngier Aug. 8, 2023, 11:12 a.m. UTC | #2
On Mon, 07 Aug 2023 04:48:33 +0100,
Anup Patel <anup@brainfault.org> wrote:
> 
> Hi Marc, Hi Oliver,
> 
> On Tue, Jul 25, 2023 at 2:05 PM Haibo Xu <haibo1.xu@intel.com> wrote:
> >
> > KVM_GET_REG_LIST will dump all register IDs that are available to
> > KVM_GET/SET_ONE_REG and It's very useful to identify some platform
> > regression issue during VM migration.
> >
> > Patch 1-7 re-structured the get-reg-list test in aarch64 to make some
> > of the code as common test framework that can be shared by riscv.
> >
> > Patch 8 move reject_set check logic to a function so as to check for
> > different errno for different registers.
> > Patch 9 move finalize_vcpu back to run_test so that riscv can implement
> > its specific operation.
> > Patch 10 change to do the get/set operation only on present-blessed list.
> > Patch 11 add the skip_set facilities so that riscv can skip set operation
> > on some registers.
> > Patch 12 enabled the KVM_GET_REG_LIST API in riscv.
> > patch 13 added the corresponding kselftest for checking possible
> > register regressions.
> >
> > The get-reg-list kvm selftest was ported from aarch64 and tested with
> > Linux v6.5-rc3 on a Qemu riscv64 virt machine.
> >
> > ---
> > Changed since v5:
> >   * Rebase to v6.5-rc3
> >   * Minor fix for Andrew's comments
> >
> > Andrew Jones (7):
> >   KVM: arm64: selftests: Replace str_with_index with strdup_printf
> >   KVM: arm64: selftests: Drop SVE cap check in print_reg
> >   KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config
> >   KVM: arm64: selftests: Rename vcpu_config and add to kvm_util.h
> >   KVM: arm64: selftests: Delete core_reg_fixup
> >   KVM: arm64: selftests: Split get-reg-list test code
> >   KVM: arm64: selftests: Finish generalizing get-reg-list
> >
> > Haibo Xu (6):
> >   KVM: arm64: selftests: Move reject_set check logic to a function
> >   KVM: arm64: selftests: Move finalize_vcpu back to run_test
> >   KVM: selftests: Only do get/set tests on present blessed list
> >   KVM: selftests: Add skip_set facility to get_reg_list test
> >   KVM: riscv: Add KVM_GET_REG_LIST API support
> >   KVM: riscv: selftests: Add get-reg-list test
> 
> Are you okay for this series to go through the KVM RISC-V tree ?

Sure, seems fine from my point of view. But please put it on an
immutable topic branch so that we can also merge it in the arm64 tree,
should we need to resolve any conflicts.

Thanks,

	M.
Haibo Xu Aug. 9, 2023, 3:26 a.m. UTC | #3
On Tue, Aug 8, 2023 at 7:12 PM Marc Zyngier <maz@kernel.org> wrote:
>
> On Mon, 07 Aug 2023 04:48:33 +0100,
> Anup Patel <anup@brainfault.org> wrote:
> >
> > Hi Marc, Hi Oliver,
> >
> > On Tue, Jul 25, 2023 at 2:05 PM Haibo Xu <haibo1.xu@intel.com> wrote:
> > >
> > > KVM_GET_REG_LIST will dump all register IDs that are available to
> > > KVM_GET/SET_ONE_REG and It's very useful to identify some platform
> > > regression issue during VM migration.
> > >
> > > Patch 1-7 re-structured the get-reg-list test in aarch64 to make some
> > > of the code as common test framework that can be shared by riscv.
> > >
> > > Patch 8 move reject_set check logic to a function so as to check for
> > > different errno for different registers.
> > > Patch 9 move finalize_vcpu back to run_test so that riscv can implement
> > > its specific operation.
> > > Patch 10 change to do the get/set operation only on present-blessed list.
> > > Patch 11 add the skip_set facilities so that riscv can skip set operation
> > > on some registers.
> > > Patch 12 enabled the KVM_GET_REG_LIST API in riscv.
> > > patch 13 added the corresponding kselftest for checking possible
> > > register regressions.
> > >
> > > The get-reg-list kvm selftest was ported from aarch64 and tested with
> > > Linux v6.5-rc3 on a Qemu riscv64 virt machine.
> > >
> > > ---
> > > Changed since v5:
> > >   * Rebase to v6.5-rc3
> > >   * Minor fix for Andrew's comments
> > >
> > > Andrew Jones (7):
> > >   KVM: arm64: selftests: Replace str_with_index with strdup_printf
> > >   KVM: arm64: selftests: Drop SVE cap check in print_reg
> > >   KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config
> > >   KVM: arm64: selftests: Rename vcpu_config and add to kvm_util.h
> > >   KVM: arm64: selftests: Delete core_reg_fixup
> > >   KVM: arm64: selftests: Split get-reg-list test code
> > >   KVM: arm64: selftests: Finish generalizing get-reg-list
> > >
> > > Haibo Xu (6):
> > >   KVM: arm64: selftests: Move reject_set check logic to a function
> > >   KVM: arm64: selftests: Move finalize_vcpu back to run_test
> > >   KVM: selftests: Only do get/set tests on present blessed list
> > >   KVM: selftests: Add skip_set facility to get_reg_list test
> > >   KVM: riscv: Add KVM_GET_REG_LIST API support
> > >   KVM: riscv: selftests: Add get-reg-list test
> >
> > Are you okay for this series to go through the KVM RISC-V tree ?
>
> Sure, seems fine from my point of view. But please put it on an
> immutable topic branch so that we can also merge it in the arm64 tree,
> should we need to resolve any conflicts.
>

Hi Marc,

Thanks for your review!

Which topic branch do you prefer or suggest to use?
I can do a rebase on it and fix any potential conflicts.

Regards,
Haibo

> Thanks,
>
>         M.
>
> --
> Without deviation from the norm, progress is not possible.
Anup Patel Aug. 9, 2023, 3:48 a.m. UTC | #4
On Wed, Aug 9, 2023 at 8:56 AM Haibo Xu <xiaobo55x@gmail.com> wrote:
>
> On Tue, Aug 8, 2023 at 7:12 PM Marc Zyngier <maz@kernel.org> wrote:
> >
> > On Mon, 07 Aug 2023 04:48:33 +0100,
> > Anup Patel <anup@brainfault.org> wrote:
> > >
> > > Hi Marc, Hi Oliver,
> > >
> > > On Tue, Jul 25, 2023 at 2:05 PM Haibo Xu <haibo1.xu@intel.com> wrote:
> > > >
> > > > KVM_GET_REG_LIST will dump all register IDs that are available to
> > > > KVM_GET/SET_ONE_REG and It's very useful to identify some platform
> > > > regression issue during VM migration.
> > > >
> > > > Patch 1-7 re-structured the get-reg-list test in aarch64 to make some
> > > > of the code as common test framework that can be shared by riscv.
> > > >
> > > > Patch 8 move reject_set check logic to a function so as to check for
> > > > different errno for different registers.
> > > > Patch 9 move finalize_vcpu back to run_test so that riscv can implement
> > > > its specific operation.
> > > > Patch 10 change to do the get/set operation only on present-blessed list.
> > > > Patch 11 add the skip_set facilities so that riscv can skip set operation
> > > > on some registers.
> > > > Patch 12 enabled the KVM_GET_REG_LIST API in riscv.
> > > > patch 13 added the corresponding kselftest for checking possible
> > > > register regressions.
> > > >
> > > > The get-reg-list kvm selftest was ported from aarch64 and tested with
> > > > Linux v6.5-rc3 on a Qemu riscv64 virt machine.
> > > >
> > > > ---
> > > > Changed since v5:
> > > >   * Rebase to v6.5-rc3
> > > >   * Minor fix for Andrew's comments
> > > >
> > > > Andrew Jones (7):
> > > >   KVM: arm64: selftests: Replace str_with_index with strdup_printf
> > > >   KVM: arm64: selftests: Drop SVE cap check in print_reg
> > > >   KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config
> > > >   KVM: arm64: selftests: Rename vcpu_config and add to kvm_util.h
> > > >   KVM: arm64: selftests: Delete core_reg_fixup
> > > >   KVM: arm64: selftests: Split get-reg-list test code
> > > >   KVM: arm64: selftests: Finish generalizing get-reg-list
> > > >
> > > > Haibo Xu (6):
> > > >   KVM: arm64: selftests: Move reject_set check logic to a function
> > > >   KVM: arm64: selftests: Move finalize_vcpu back to run_test
> > > >   KVM: selftests: Only do get/set tests on present blessed list
> > > >   KVM: selftests: Add skip_set facility to get_reg_list test
> > > >   KVM: riscv: Add KVM_GET_REG_LIST API support
> > > >   KVM: riscv: selftests: Add get-reg-list test
> > >
> > > Are you okay for this series to go through the KVM RISC-V tree ?
> >
> > Sure, seems fine from my point of view. But please put it on an
> > immutable topic branch so that we can also merge it in the arm64 tree,
> > should we need to resolve any conflicts.
> >
>
> Hi Marc,
>
> Thanks for your review!
>
> Which topic branch do you prefer or suggest to use?
> I can do a rebase on it and fix any potential conflicts.

I will share a branch with a stable commit history.
I have already resolved conflicts at my end.

Regards,
Anup

>
> Regards,
> Haibo
>
> > Thanks,
> >
> >         M.
> >
> > --
> > Without deviation from the norm, progress is not possible.
Haibo Xu Aug. 9, 2023, 5:02 a.m. UTC | #5
On Wed, Aug 9, 2023 at 11:48 AM Anup Patel <anup@brainfault.org> wrote:
>
> On Wed, Aug 9, 2023 at 8:56 AM Haibo Xu <xiaobo55x@gmail.com> wrote:
> >
> > On Tue, Aug 8, 2023 at 7:12 PM Marc Zyngier <maz@kernel.org> wrote:
> > >
> > > On Mon, 07 Aug 2023 04:48:33 +0100,
> > > Anup Patel <anup@brainfault.org> wrote:
> > > >
> > > > Hi Marc, Hi Oliver,
> > > >
> > > > On Tue, Jul 25, 2023 at 2:05 PM Haibo Xu <haibo1.xu@intel.com> wrote:
> > > > >
> > > > > KVM_GET_REG_LIST will dump all register IDs that are available to
> > > > > KVM_GET/SET_ONE_REG and It's very useful to identify some platform
> > > > > regression issue during VM migration.
> > > > >
> > > > > Patch 1-7 re-structured the get-reg-list test in aarch64 to make some
> > > > > of the code as common test framework that can be shared by riscv.
> > > > >
> > > > > Patch 8 move reject_set check logic to a function so as to check for
> > > > > different errno for different registers.
> > > > > Patch 9 move finalize_vcpu back to run_test so that riscv can implement
> > > > > its specific operation.
> > > > > Patch 10 change to do the get/set operation only on present-blessed list.
> > > > > Patch 11 add the skip_set facilities so that riscv can skip set operation
> > > > > on some registers.
> > > > > Patch 12 enabled the KVM_GET_REG_LIST API in riscv.
> > > > > patch 13 added the corresponding kselftest for checking possible
> > > > > register regressions.
> > > > >
> > > > > The get-reg-list kvm selftest was ported from aarch64 and tested with
> > > > > Linux v6.5-rc3 on a Qemu riscv64 virt machine.
> > > > >
> > > > > ---
> > > > > Changed since v5:
> > > > >   * Rebase to v6.5-rc3
> > > > >   * Minor fix for Andrew's comments
> > > > >
> > > > > Andrew Jones (7):
> > > > >   KVM: arm64: selftests: Replace str_with_index with strdup_printf
> > > > >   KVM: arm64: selftests: Drop SVE cap check in print_reg
> > > > >   KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config
> > > > >   KVM: arm64: selftests: Rename vcpu_config and add to kvm_util.h
> > > > >   KVM: arm64: selftests: Delete core_reg_fixup
> > > > >   KVM: arm64: selftests: Split get-reg-list test code
> > > > >   KVM: arm64: selftests: Finish generalizing get-reg-list
> > > > >
> > > > > Haibo Xu (6):
> > > > >   KVM: arm64: selftests: Move reject_set check logic to a function
> > > > >   KVM: arm64: selftests: Move finalize_vcpu back to run_test
> > > > >   KVM: selftests: Only do get/set tests on present blessed list
> > > > >   KVM: selftests: Add skip_set facility to get_reg_list test
> > > > >   KVM: riscv: Add KVM_GET_REG_LIST API support
> > > > >   KVM: riscv: selftests: Add get-reg-list test
> > > >
> > > > Are you okay for this series to go through the KVM RISC-V tree ?
> > >
> > > Sure, seems fine from my point of view. But please put it on an
> > > immutable topic branch so that we can also merge it in the arm64 tree,
> > > should we need to resolve any conflicts.
> > >
> >
> > Hi Marc,
> >
> > Thanks for your review!
> >
> > Which topic branch do you prefer or suggest to use?
> > I can do a rebase on it and fix any potential conflicts.
>
> I will share a branch with a stable commit history.
> I have already resolved conflicts at my end.
>

Cool! Thanks for your help!

> Regards,
> Anup
>
> >
> > Regards,
> > Haibo
> >
> > > Thanks,
> > >
> > >         M.
> > >
> > > --
> > > Without deviation from the norm, progress is not possible.
Anup Patel Aug. 9, 2023, 12:21 p.m. UTC | #6
Hi Marc,

On Tue, Aug 8, 2023 at 4:42 PM Marc Zyngier <maz@kernel.org> wrote:
>
> On Mon, 07 Aug 2023 04:48:33 +0100,
> Anup Patel <anup@brainfault.org> wrote:
> >
> > Hi Marc, Hi Oliver,
> >
> > On Tue, Jul 25, 2023 at 2:05 PM Haibo Xu <haibo1.xu@intel.com> wrote:
> > >
> > > KVM_GET_REG_LIST will dump all register IDs that are available to
> > > KVM_GET/SET_ONE_REG and It's very useful to identify some platform
> > > regression issue during VM migration.
> > >
> > > Patch 1-7 re-structured the get-reg-list test in aarch64 to make some
> > > of the code as common test framework that can be shared by riscv.
> > >
> > > Patch 8 move reject_set check logic to a function so as to check for
> > > different errno for different registers.
> > > Patch 9 move finalize_vcpu back to run_test so that riscv can implement
> > > its specific operation.
> > > Patch 10 change to do the get/set operation only on present-blessed list.
> > > Patch 11 add the skip_set facilities so that riscv can skip set operation
> > > on some registers.
> > > Patch 12 enabled the KVM_GET_REG_LIST API in riscv.
> > > patch 13 added the corresponding kselftest for checking possible
> > > register regressions.
> > >
> > > The get-reg-list kvm selftest was ported from aarch64 and tested with
> > > Linux v6.5-rc3 on a Qemu riscv64 virt machine.
> > >
> > > ---
> > > Changed since v5:
> > >   * Rebase to v6.5-rc3
> > >   * Minor fix for Andrew's comments
> > >
> > > Andrew Jones (7):
> > >   KVM: arm64: selftests: Replace str_with_index with strdup_printf
> > >   KVM: arm64: selftests: Drop SVE cap check in print_reg
> > >   KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config
> > >   KVM: arm64: selftests: Rename vcpu_config and add to kvm_util.h
> > >   KVM: arm64: selftests: Delete core_reg_fixup
> > >   KVM: arm64: selftests: Split get-reg-list test code
> > >   KVM: arm64: selftests: Finish generalizing get-reg-list
> > >
> > > Haibo Xu (6):
> > >   KVM: arm64: selftests: Move reject_set check logic to a function
> > >   KVM: arm64: selftests: Move finalize_vcpu back to run_test
> > >   KVM: selftests: Only do get/set tests on present blessed list
> > >   KVM: selftests: Add skip_set facility to get_reg_list test
> > >   KVM: riscv: Add KVM_GET_REG_LIST API support
> > >   KVM: riscv: selftests: Add get-reg-list test
> >
> > Are you okay for this series to go through the KVM RISC-V tree ?
>
> Sure, seems fine from my point of view. But please put it on an
> immutable topic branch so that we can also merge it in the arm64 tree,
> should we need to resolve any conflicts.

I have created topic branch riscv_kvm_get_reg_list in the KVM RISC-V
repo https://github.com/kvm-riscv/linux.git.

This branch is based upon Linux-6.5-rc5 and also merged into the
riscv_kvm_next branch for the upcoming merge window.

Regards,
Anup