On Thu, Dec 14, 2023 at 2:16 AM Andrew Jones <ajones@xxxxxxxxxxxxxxxx> wrote: > > sbi_ecall() isn't ucall specific and its prototype is already in > processor.h. Move its implementation to processor.c. > > Signed-off-by: Andrew Jones <ajones@xxxxxxxxxxxxxxxx> > --- > .../selftests/kvm/lib/riscv/processor.c | 26 +++++++++++++++++++ > tools/testing/selftests/kvm/lib/riscv/ucall.c | 26 ------------------- > 2 files changed, 26 insertions(+), 26 deletions(-) > > diff --git a/tools/testing/selftests/kvm/lib/riscv/processor.c b/tools/testing/selftests/kvm/lib/riscv/processor.c > index 6c25f7843ef4..6905a4348380 100644 > --- a/tools/testing/selftests/kvm/lib/riscv/processor.c > +++ b/tools/testing/selftests/kvm/lib/riscv/processor.c > @@ -367,3 +367,29 @@ void vcpu_args_set(struct kvm_vcpu *vcpu, unsigned int num, ...) > void assert_on_unhandled_exception(struct kvm_vcpu *vcpu) > { > } > + > +struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > + unsigned long arg1, unsigned long arg2, > + unsigned long arg3, unsigned long arg4, > + unsigned long arg5) > +{ > + register uintptr_t a0 asm ("a0") = (uintptr_t)(arg0); > + register uintptr_t a1 asm ("a1") = (uintptr_t)(arg1); > + register uintptr_t a2 asm ("a2") = (uintptr_t)(arg2); > + register uintptr_t a3 asm ("a3") = (uintptr_t)(arg3); > + register uintptr_t a4 asm ("a4") = (uintptr_t)(arg4); > + register uintptr_t a5 asm ("a5") = (uintptr_t)(arg5); > + register uintptr_t a6 asm ("a6") = (uintptr_t)(fid); > + register uintptr_t a7 asm ("a7") = (uintptr_t)(ext); > + struct sbiret ret; > + > + asm volatile ( > + "ecall" > + : "+r" (a0), "+r" (a1) > + : "r" (a2), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7) > + : "memory"); > + ret.error = a0; > + ret.value = a1; > + > + return ret; > +} > diff --git a/tools/testing/selftests/kvm/lib/riscv/ucall.c b/tools/testing/selftests/kvm/lib/riscv/ucall.c > index fe6d1004f018..14ee17151a59 100644 > --- a/tools/testing/selftests/kvm/lib/riscv/ucall.c > +++ b/tools/testing/selftests/kvm/lib/riscv/ucall.c > @@ -10,32 +10,6 @@ > #include "kvm_util.h" > #include "processor.h" > > -struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > - unsigned long arg1, unsigned long arg2, > - unsigned long arg3, unsigned long arg4, > - unsigned long arg5) > -{ > - register uintptr_t a0 asm ("a0") = (uintptr_t)(arg0); > - register uintptr_t a1 asm ("a1") = (uintptr_t)(arg1); > - register uintptr_t a2 asm ("a2") = (uintptr_t)(arg2); > - register uintptr_t a3 asm ("a3") = (uintptr_t)(arg3); > - register uintptr_t a4 asm ("a4") = (uintptr_t)(arg4); > - register uintptr_t a5 asm ("a5") = (uintptr_t)(arg5); > - register uintptr_t a6 asm ("a6") = (uintptr_t)(fid); > - register uintptr_t a7 asm ("a7") = (uintptr_t)(ext); > - struct sbiret ret; > - > - asm volatile ( > - "ecall" > - : "+r" (a0), "+r" (a1) > - : "r" (a2), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7) > - : "memory"); > - ret.error = a0; > - ret.value = a1; > - > - return ret; > -} > - > void *ucall_arch_get_ucall(struct kvm_vcpu *vcpu) > { > struct kvm_run *run = vcpu->run; > -- > 2.43.0 > Reviewed-by: Atish Patra <atishp@xxxxxxxxxxxx> -- Regards, Atish