Skip to content

Commit aebd3bd

Browse files
bibo-maochenhuacai
authored andcommitted
LoongArch: KVM: Set reserved bits as zero in CPUCFG
Supported CPUCFG information comes from function _kvm_get_cpucfg_mask(). A bit should be zero if it is reserved by HW or if it is not supported by KVM. Also LoongArch software page table walk feature defined in CPUCFG2_LSPW is supported by KVM, it should be enabled by default. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
1 parent 90d35da commit aebd3bd

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

arch/loongarch/kvm/vcpu.c

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,18 @@ static int _kvm_get_cpucfg_mask(int id, u64 *v)
304304
return -EINVAL;
305305

306306
switch (id) {
307-
case 2:
307+
case LOONGARCH_CPUCFG0:
308+
*v = GENMASK(31, 0);
309+
return 0;
310+
case LOONGARCH_CPUCFG1:
311+
/* CPUCFG1_MSGINT is not supported by KVM */
312+
*v = GENMASK(25, 0);
313+
return 0;
314+
case LOONGARCH_CPUCFG2:
308315
/* CPUCFG2 features unconditionally supported by KVM */
309316
*v = CPUCFG2_FP | CPUCFG2_FPSP | CPUCFG2_FPDP |
310317
CPUCFG2_FPVERS | CPUCFG2_LLFTP | CPUCFG2_LLFTPREV |
311-
CPUCFG2_LAM;
318+
CPUCFG2_LSPW | CPUCFG2_LAM;
312319
/*
313320
* For the ISA extensions listed below, if one is supported
314321
* by the host, then it is also supported by KVM.
@@ -318,14 +325,26 @@ static int _kvm_get_cpucfg_mask(int id, u64 *v)
318325
if (cpu_has_lasx)
319326
*v |= CPUCFG2_LASX;
320327

328+
return 0;
329+
case LOONGARCH_CPUCFG3:
330+
*v = GENMASK(16, 0);
331+
return 0;
332+
case LOONGARCH_CPUCFG4:
333+
case LOONGARCH_CPUCFG5:
334+
*v = GENMASK(31, 0);
335+
return 0;
336+
case LOONGARCH_CPUCFG16:
337+
*v = GENMASK(16, 0);
338+
return 0;
339+
case LOONGARCH_CPUCFG17 ... LOONGARCH_CPUCFG20:
340+
*v = GENMASK(30, 0);
321341
return 0;
322342
default:
323343
/*
324-
* No restrictions on other valid CPUCFG IDs' values, but
325-
* CPUCFG data is limited to 32 bits as the LoongArch ISA
326-
* manual says (Volume 1, Section 2.2.10.5 "CPUCFG").
344+
* CPUCFG bits should be zero if reserved by HW or not
345+
* supported by KVM.
327346
*/
328-
*v = U32_MAX;
347+
*v = 0;
329348
return 0;
330349
}
331350
}
@@ -344,7 +363,7 @@ static int kvm_check_cpucfg(int id, u64 val)
344363
return -EINVAL;
345364

346365
switch (id) {
347-
case 2:
366+
case LOONGARCH_CPUCFG2:
348367
if (!(val & CPUCFG2_LLFTP))
349368
/* Guests must have a constant timer */
350369
return -EINVAL;

0 commit comments

Comments
 (0)