[PATCH v2 0/6] LoongArch: KVM: Set max VM supported FPU type with FPU exception

Bibo Mao posted 6 patches 3 days ago
arch/loongarch/include/asm/kvm_host.h |  6 +--
arch/loongarch/kvm/exit.c             | 21 +++-----
arch/loongarch/kvm/vcpu.c             | 78 ++++++++-------------------
3 files changed, 30 insertions(+), 75 deletions(-)
[PATCH v2 0/6] LoongArch: KVM: Set max VM supported FPU type with FPU exception
Posted by Bibo Mao 3 days ago
With FPU save and restore flow, the cost is the same with different
FPU width 8/16/32 bytes, whatever from CPU cycle and cache line impaction.

Here is to enable FPU with max VM supported type, for example if
VM supports LASX instrction, enable FPU with LASX type even with FPU
exeception. So it can avoid possible LSX/LASX exception in future.

With context switch microbench which may touch FPU and LASX, there is 9%
improvement when halt_poll_ns is disabled. The command is
"./context --test=pipe" and source code located at:
  https://github.com/bibo-mao/context_switch/blob/main/context.c

Original     Wih patch      improvement
75232        82440          9%

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
v1 ... v2:
  1. Enable FPU with max VM supported FPU type, rather than max used type.
  2. Add new request bit KVM_REQ_LBT_LOAD for LBT restore
  3. Rename KVM_REQ_AUX_LOAD with KVM_REQ_FPU_LOAD
  3. Remove aux_ldtype and KVM_LARCH_LSX/KVM_LARCH_LSX
  4. Remove middle FPU state handling in kvm_own_lsx() and kvm_own_lasx(),
     directly enable LSX or LASX from FPU none state.
---
Bibo Mao (6):
  LoongArch: KVM: Add separate KVM_REQ_LBT_LOAD request bit
  LoongArch: KVM: Enable FPU with max VM supported FPU type
  LoongArch: KVM: Rename KVM_REQ_AUX_LOAD with KVM_REQ_FPU_LOAD
  LoongArch: KVM: Remove some middle FPU states
  LoongArch: KVM: Use vm_guest_has_fpu API in kvm_lose_fpu()
  LoongArch: KVM: Remove KVM_LARCH_LASX and KVM_LARCH_LSX

 arch/loongarch/include/asm/kvm_host.h |  6 +--
 arch/loongarch/kvm/exit.c             | 21 +++-----
 arch/loongarch/kvm/vcpu.c             | 78 ++++++++-------------------
 3 files changed, 30 insertions(+), 75 deletions(-)


base-commit: 7aaa8047eafd0bd628065b15757d9b48c5f9c07d
-- 
2.39.3
Re: [PATCH v2 0/6] LoongArch: KVM: Set max VM supported FPU type with FPU exception
Posted by Huacai Chen 2 days, 18 hours ago
Hi, Bibo,


On Mon, Mar 30, 2026 at 11:58 AM Bibo Mao <maobibo@loongson.cn> wrote:
>
> With FPU save and restore flow, the cost is the same with different
> FPU width 8/16/32 bytes, whatever from CPU cycle and cache line impaction.
>
> Here is to enable FPU with max VM supported type, for example if
> VM supports LASX instrction, enable FPU with LASX type even with FPU
> exeception. So it can avoid possible LSX/LASX exception in future.
>
> With context switch microbench which may touch FPU and LASX, there is 9%
> improvement when halt_poll_ns is disabled. The command is
> "./context --test=pipe" and source code located at:
>   https://github.com/bibo-mao/context_switch/blob/main/context.c
>
> Original     Wih patch      improvement
> 75232        82440          9%
>
> Signed-off-by: Bibo Mao <maobibo@loongson.cn>
> ---
> v1 ... v2:
>   1. Enable FPU with max VM supported FPU type, rather than max used type.
>   2. Add new request bit KVM_REQ_LBT_LOAD for LBT restore
>   3. Rename KVM_REQ_AUX_LOAD with KVM_REQ_FPU_LOAD
>   3. Remove aux_ldtype and KVM_LARCH_LSX/KVM_LARCH_LSX
>   4. Remove middle FPU state handling in kvm_own_lsx() and kvm_own_lasx(),
>      directly enable LSX or LASX from FPU none state.
> ---
> Bibo Mao (6):
>   LoongArch: KVM: Add separate KVM_REQ_LBT_LOAD request bit
>   LoongArch: KVM: Enable FPU with max VM supported FPU type
>   LoongArch: KVM: Rename KVM_REQ_AUX_LOAD with KVM_REQ_FPU_LOAD
Patch-1 add KVM_REQ_LBT_LOAD, then KVM_REQ_AUX_LOAD is only for FPU,
so I think Patch-3 should be squashed into Patch-1.

>   LoongArch: KVM: Remove some middle FPU states
>   LoongArch: KVM: Use vm_guest_has_fpu API in kvm_lose_fpu()
>   LoongArch: KVM: Remove KVM_LARCH_LASX and KVM_LARCH_LSX
Patch-5 remove the consumer side of KVM_LARCH_LASX / KVM_LARCH_LSX and
Patch-6 remove the provider side of KVM_LARCH_LASX / KVM_LARCH_LSX, so
I think Patch-6 should be squashed into Patch-5, too.


Huacai

>
>  arch/loongarch/include/asm/kvm_host.h |  6 +--
>  arch/loongarch/kvm/exit.c             | 21 +++-----
>  arch/loongarch/kvm/vcpu.c             | 78 ++++++++-------------------
>  3 files changed, 30 insertions(+), 75 deletions(-)
>
>
> base-commit: 7aaa8047eafd0bd628065b15757d9b48c5f9c07d
> --
> 2.39.3
>
>