bbef914044
To turn cbom_blocksize and cboz_blocksize into class properties we need KVM specific changes. KVM is creating its own version of these options with a customized setter() that prevents users from picking an invalid value during init() time. This comes at the cost of duplicating each option that KVM supports. This will keep happening for each new shared option KVM implements in the future. We can avoid that by using the same property TCG uses and adding specific KVM handling during finalize() time, like TCG already does with riscv_tcg_cpu_finalize_features(). To do that, the common CPU property offers a way of knowing if an option was user set or not, sparing us from doing unneeded syscalls. riscv_kvm_cpu_finalize_features() is then created using the same KVMScratch CPU we already use during init() time, since finalize() time is still too early to use the official KVM CPU for it. cbom_blocksize and cboz_blocksize are then handled during finalize() in the same way they're handled by their KVM specific setter. With this change we can proceed with the blocksize changes in the common code without breaking the KVM driver. Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> tested-by tags added, rebased with Alistair's riscv-to-apply.next. Message-ID: <20240112140201.127083-2-dbarboza@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
33 lines
1.3 KiB
C
33 lines
1.3 KiB
C
/*
|
|
* QEMU KVM support -- RISC-V specific functions.
|
|
*
|
|
* Copyright (c) 2020 Huawei Technologies Co., Ltd
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2 or later, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef QEMU_KVM_RISCV_H
|
|
#define QEMU_KVM_RISCV_H
|
|
|
|
void kvm_riscv_reset_vcpu(RISCVCPU *cpu);
|
|
void kvm_riscv_set_irq(RISCVCPU *cpu, int irq, int level);
|
|
void kvm_riscv_aia_create(MachineState *machine, uint64_t group_shift,
|
|
uint64_t aia_irq_num, uint64_t aia_msi_num,
|
|
uint64_t aplic_base, uint64_t imsic_base,
|
|
uint64_t guest_num);
|
|
void riscv_kvm_aplic_request(void *opaque, int irq, int level);
|
|
int kvm_riscv_sync_mpstate_to_kvm(RISCVCPU *cpu, int state);
|
|
void riscv_kvm_cpu_finalize_features(RISCVCPU *cpu, Error **errp);
|
|
|
|
#endif
|