Skip to content

Commit 85e7850

Browse files
committed
RISC-V: KVM: Move copy_sbi_ext_reg_indices() to SBI implementation
The ONE_REG handling of SBI extension enable/disable registers and SBI extension state registers is already under SBI implementation. On similar lines, let's move copy_sbi_ext_reg_indices() under SBI implementation. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Link: https://lore.kernel.org/r/20250823155947.1354229-5-apatel@ventanamicro.com Signed-off-by: Anup Patel <anup@brainfault.org>
1 parent 699a53a commit 85e7850

3 files changed

Lines changed: 29 additions & 29 deletions

File tree

arch/riscv/include/asm/kvm_vcpu_sbi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ void kvm_riscv_vcpu_sbi_request_reset(struct kvm_vcpu *vcpu,
7777
unsigned long pc, unsigned long a1);
7878
void kvm_riscv_vcpu_sbi_load_reset_state(struct kvm_vcpu *vcpu);
7979
int kvm_riscv_vcpu_sbi_return(struct kvm_vcpu *vcpu, struct kvm_run *run);
80+
int kvm_riscv_vcpu_reg_indices_sbi_ext(struct kvm_vcpu *vcpu, u64 __user *uindices);
8081
int kvm_riscv_vcpu_set_reg_sbi_ext(struct kvm_vcpu *vcpu,
8182
const struct kvm_one_reg *reg);
8283
int kvm_riscv_vcpu_get_reg_sbi_ext(struct kvm_vcpu *vcpu,
@@ -86,7 +87,6 @@ int kvm_riscv_vcpu_set_reg_sbi(struct kvm_vcpu *vcpu, const struct kvm_one_reg *
8687
int kvm_riscv_vcpu_get_reg_sbi(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg);
8788
const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext(
8889
struct kvm_vcpu *vcpu, unsigned long extid);
89-
bool riscv_vcpu_supports_sbi_ext(struct kvm_vcpu *vcpu, int idx);
9090
int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run);
9191
void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu);
9292
void kvm_riscv_vcpu_sbi_deinit(struct kvm_vcpu *vcpu);

arch/riscv/kvm/vcpu_onereg.c

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,34 +1082,9 @@ static inline unsigned long num_isa_ext_regs(const struct kvm_vcpu *vcpu)
10821082
return copy_isa_ext_reg_indices(vcpu, NULL);
10831083
}
10841084

1085-
static int copy_sbi_ext_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
1086-
{
1087-
unsigned int n = 0;
1088-
1089-
for (int i = 0; i < KVM_RISCV_SBI_EXT_MAX; i++) {
1090-
u64 size = IS_ENABLED(CONFIG_32BIT) ?
1091-
KVM_REG_SIZE_U32 : KVM_REG_SIZE_U64;
1092-
u64 reg = KVM_REG_RISCV | size | KVM_REG_RISCV_SBI_EXT |
1093-
KVM_REG_RISCV_SBI_SINGLE | i;
1094-
1095-
if (!riscv_vcpu_supports_sbi_ext(vcpu, i))
1096-
continue;
1097-
1098-
if (uindices) {
1099-
if (put_user(reg, uindices))
1100-
return -EFAULT;
1101-
uindices++;
1102-
}
1103-
1104-
n++;
1105-
}
1106-
1107-
return n;
1108-
}
1109-
11101085
static unsigned long num_sbi_ext_regs(struct kvm_vcpu *vcpu)
11111086
{
1112-
return copy_sbi_ext_reg_indices(vcpu, NULL);
1087+
return kvm_riscv_vcpu_reg_indices_sbi_ext(vcpu, NULL);
11131088
}
11141089

11151090
static inline unsigned long num_sbi_regs(struct kvm_vcpu *vcpu)
@@ -1237,7 +1212,7 @@ int kvm_riscv_vcpu_copy_reg_indices(struct kvm_vcpu *vcpu,
12371212
return ret;
12381213
uindices += ret;
12391214

1240-
ret = copy_sbi_ext_reg_indices(vcpu, uindices);
1215+
ret = kvm_riscv_vcpu_reg_indices_sbi_ext(vcpu, uindices);
12411216
if (ret < 0)
12421217
return ret;
12431218
uindices += ret;

arch/riscv/kvm/vcpu_sbi.c

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ riscv_vcpu_get_sbi_ext(struct kvm_vcpu *vcpu, unsigned long idx)
110110
return sext;
111111
}
112112

113-
bool riscv_vcpu_supports_sbi_ext(struct kvm_vcpu *vcpu, int idx)
113+
static bool riscv_vcpu_supports_sbi_ext(struct kvm_vcpu *vcpu, int idx)
114114
{
115115
struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context;
116116
const struct kvm_riscv_sbi_extension_entry *sext;
@@ -288,6 +288,31 @@ static int riscv_vcpu_get_sbi_ext_multi(struct kvm_vcpu *vcpu,
288288
return 0;
289289
}
290290

291+
int kvm_riscv_vcpu_reg_indices_sbi_ext(struct kvm_vcpu *vcpu, u64 __user *uindices)
292+
{
293+
unsigned int n = 0;
294+
295+
for (int i = 0; i < KVM_RISCV_SBI_EXT_MAX; i++) {
296+
u64 size = IS_ENABLED(CONFIG_32BIT) ?
297+
KVM_REG_SIZE_U32 : KVM_REG_SIZE_U64;
298+
u64 reg = KVM_REG_RISCV | size | KVM_REG_RISCV_SBI_EXT |
299+
KVM_REG_RISCV_SBI_SINGLE | i;
300+
301+
if (!riscv_vcpu_supports_sbi_ext(vcpu, i))
302+
continue;
303+
304+
if (uindices) {
305+
if (put_user(reg, uindices))
306+
return -EFAULT;
307+
uindices++;
308+
}
309+
310+
n++;
311+
}
312+
313+
return n;
314+
}
315+
291316
int kvm_riscv_vcpu_set_reg_sbi_ext(struct kvm_vcpu *vcpu,
292317
const struct kvm_one_reg *reg)
293318
{

0 commit comments

Comments
 (0)