Message ID | 20250327152052.707657-1-dbarboza@ventanamicro.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [for-10.0] Revert "target/riscv/kvm: add missing KVM CSRs" | expand |
On Fri, Mar 28, 2025 at 1:22 AM Daniel Henrique Barboza <dbarboza@ventanamicro.com> wrote: > > This commit breaks KVM boot on older kernels, like reported in [1], due > to senvcfg not being available in them. > > There's also another problem related to scounteren. Using a recent > enough guest buildroot, 'ping' will be build with rdtime support. In > this case, doing a ping in a KVM guest while exposing scounteren will > result in an error. The root cause relates to how KVM handles > scounteren, but QEMU can work around it by initializing scounteren with > the host value during init(). > > Fixing these issues in a non-rushed-bandaid manner results in an amount > of design changes that I don't feel comfortable pushing during code > freeze, so for 10.0 we'll remove the CSRs and re-introduce them in 10.1 > with the adequate support. > > This reverts commit 4db19d5b21e058e6eb3474b6be470d1184afaa9e. > > [1] https://lore.kernel.org/qemu-riscv/CABJz62OfUDHYkQ0T3rGHStQprf1c7_E0qBLbLKhfv=+jb0SYAw@mail.gmail.com/ > > Reported-by: Andrea Bolognani <abologna@redhat.com> > Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > target/riscv/kvm/kvm-cpu.c | 6 ------ > 1 file changed, 6 deletions(-) > > diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c > index 4ffeeaa1c9..0f4997a918 100644 > --- a/target/riscv/kvm/kvm-cpu.c > +++ b/target/riscv/kvm/kvm-cpu.c > @@ -624,8 +624,6 @@ static void kvm_riscv_reset_regs_csr(CPURISCVState *env) > env->stval = 0; > env->mip = 0; > env->satp = 0; > - env->scounteren = 0; > - env->senvcfg = 0; > } > > static int kvm_riscv_get_regs_csr(CPUState *cs) > @@ -641,8 +639,6 @@ static int kvm_riscv_get_regs_csr(CPUState *cs) > KVM_RISCV_GET_CSR(cs, env, stval, env->stval); > KVM_RISCV_GET_CSR(cs, env, sip, env->mip); > KVM_RISCV_GET_CSR(cs, env, satp, env->satp); > - KVM_RISCV_GET_CSR(cs, env, scounteren, env->scounteren); > - KVM_RISCV_GET_CSR(cs, env, senvcfg, env->senvcfg); > > return 0; > } > @@ -660,8 +656,6 @@ static int kvm_riscv_put_regs_csr(CPUState *cs) > KVM_RISCV_SET_CSR(cs, env, stval, env->stval); > KVM_RISCV_SET_CSR(cs, env, sip, env->mip); > KVM_RISCV_SET_CSR(cs, env, satp, env->satp); > - KVM_RISCV_SET_CSR(cs, env, scounteren, env->scounteren); > - KVM_RISCV_SET_CSR(cs, env, senvcfg, env->senvcfg); > > return 0; > } > -- > 2.48.1 > >
On Fri, Mar 28, 2025 at 1:22 AM Daniel Henrique Barboza <dbarboza@ventanamicro.com> wrote: > > This commit breaks KVM boot on older kernels, like reported in [1], due > to senvcfg not being available in them. > > There's also another problem related to scounteren. Using a recent > enough guest buildroot, 'ping' will be build with rdtime support. In > this case, doing a ping in a KVM guest while exposing scounteren will > result in an error. The root cause relates to how KVM handles > scounteren, but QEMU can work around it by initializing scounteren with > the host value during init(). > > Fixing these issues in a non-rushed-bandaid manner results in an amount > of design changes that I don't feel comfortable pushing during code > freeze, so for 10.0 we'll remove the CSRs and re-introduce them in 10.1 > with the adequate support. > > This reverts commit 4db19d5b21e058e6eb3474b6be470d1184afaa9e. > > [1] https://lore.kernel.org/qemu-riscv/CABJz62OfUDHYkQ0T3rGHStQprf1c7_E0qBLbLKhfv=+jb0SYAw@mail.gmail.com/ > > Reported-by: Andrea Bolognani <abologna@redhat.com> > Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Thanks! Applied to riscv-to-apply.next Alistair > --- > target/riscv/kvm/kvm-cpu.c | 6 ------ > 1 file changed, 6 deletions(-) > > diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c > index 4ffeeaa1c9..0f4997a918 100644 > --- a/target/riscv/kvm/kvm-cpu.c > +++ b/target/riscv/kvm/kvm-cpu.c > @@ -624,8 +624,6 @@ static void kvm_riscv_reset_regs_csr(CPURISCVState *env) > env->stval = 0; > env->mip = 0; > env->satp = 0; > - env->scounteren = 0; > - env->senvcfg = 0; > } > > static int kvm_riscv_get_regs_csr(CPUState *cs) > @@ -641,8 +639,6 @@ static int kvm_riscv_get_regs_csr(CPUState *cs) > KVM_RISCV_GET_CSR(cs, env, stval, env->stval); > KVM_RISCV_GET_CSR(cs, env, sip, env->mip); > KVM_RISCV_GET_CSR(cs, env, satp, env->satp); > - KVM_RISCV_GET_CSR(cs, env, scounteren, env->scounteren); > - KVM_RISCV_GET_CSR(cs, env, senvcfg, env->senvcfg); > > return 0; > } > @@ -660,8 +656,6 @@ static int kvm_riscv_put_regs_csr(CPUState *cs) > KVM_RISCV_SET_CSR(cs, env, stval, env->stval); > KVM_RISCV_SET_CSR(cs, env, sip, env->mip); > KVM_RISCV_SET_CSR(cs, env, satp, env->satp); > - KVM_RISCV_SET_CSR(cs, env, scounteren, env->scounteren); > - KVM_RISCV_SET_CSR(cs, env, senvcfg, env->senvcfg); > > return 0; > } > -- > 2.48.1 > >
diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index 4ffeeaa1c9..0f4997a918 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -624,8 +624,6 @@ static void kvm_riscv_reset_regs_csr(CPURISCVState *env) env->stval = 0; env->mip = 0; env->satp = 0; - env->scounteren = 0; - env->senvcfg = 0; } static int kvm_riscv_get_regs_csr(CPUState *cs) @@ -641,8 +639,6 @@ static int kvm_riscv_get_regs_csr(CPUState *cs) KVM_RISCV_GET_CSR(cs, env, stval, env->stval); KVM_RISCV_GET_CSR(cs, env, sip, env->mip); KVM_RISCV_GET_CSR(cs, env, satp, env->satp); - KVM_RISCV_GET_CSR(cs, env, scounteren, env->scounteren); - KVM_RISCV_GET_CSR(cs, env, senvcfg, env->senvcfg); return 0; } @@ -660,8 +656,6 @@ static int kvm_riscv_put_regs_csr(CPUState *cs) KVM_RISCV_SET_CSR(cs, env, stval, env->stval); KVM_RISCV_SET_CSR(cs, env, sip, env->mip); KVM_RISCV_SET_CSR(cs, env, satp, env->satp); - KVM_RISCV_SET_CSR(cs, env, scounteren, env->scounteren); - KVM_RISCV_SET_CSR(cs, env, senvcfg, env->senvcfg); return 0; }
This commit breaks KVM boot on older kernels, like reported in [1], due to senvcfg not being available in them. There's also another problem related to scounteren. Using a recent enough guest buildroot, 'ping' will be build with rdtime support. In this case, doing a ping in a KVM guest while exposing scounteren will result in an error. The root cause relates to how KVM handles scounteren, but QEMU can work around it by initializing scounteren with the host value during init(). Fixing these issues in a non-rushed-bandaid manner results in an amount of design changes that I don't feel comfortable pushing during code freeze, so for 10.0 we'll remove the CSRs and re-introduce them in 10.1 with the adequate support. This reverts commit 4db19d5b21e058e6eb3474b6be470d1184afaa9e. [1] https://lore.kernel.org/qemu-riscv/CABJz62OfUDHYkQ0T3rGHStQprf1c7_E0qBLbLKhfv=+jb0SYAw@mail.gmail.com/ Reported-by: Andrea Bolognani <abologna@redhat.com> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> --- target/riscv/kvm/kvm-cpu.c | 6 ------ 1 file changed, 6 deletions(-)