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

Haibo Xu posted 13 patches 2 years, 6 months ago
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
[PATCH v6 00/13] RISCV: Add KVM_GET_REG_LIST API
Posted by Haibo Xu 2 years, 6 months ago
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

-- 
2.34.1
Re: [PATCH v6 00/13] RISCV: Add KVM_GET_REG_LIST API
Posted by Anup Patel 2 years, 6 months ago
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
>
Re: [PATCH v6 00/13] RISCV: Add KVM_GET_REG_LIST API
Posted by Marc Zyngier 2 years, 6 months ago
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.

-- 
Without deviation from the norm, progress is not possible.
Re: [PATCH v6 00/13] RISCV: Add KVM_GET_REG_LIST API
Posted by Anup Patel 2 years, 6 months ago
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
Re: [PATCH v6 00/13] RISCV: Add KVM_GET_REG_LIST API
Posted by Haibo Xu 2 years, 6 months ago
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.
Re: [PATCH v6 00/13] RISCV: Add KVM_GET_REG_LIST API
Posted by Anup Patel 2 years, 6 months ago
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.
Re: [PATCH v6 00/13] RISCV: Add KVM_GET_REG_LIST API
Posted by Haibo Xu 2 years, 6 months ago
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.