Lines Matching +full:- +full:- +full:disable +full:- +full:attr
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
11 #include "asm-loongarch/kvm_para.h"
14 #include "qemu/error-report.h"
15 #include "qemu/main-loop.h"
21 #include "system/address-spaces.h"
28 #include "cpu-csr.h"
42 struct kvm_device_attr attr = { in kvm_get_stealtime() local
44 .attr = KVM_LOONGARCH_VCPU_PVTIME_GPA, in kvm_get_stealtime()
45 .addr = (uint64_t)&env->stealtime.guest_addr, in kvm_get_stealtime()
48 err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, attr); in kvm_get_stealtime()
53 err = kvm_vcpu_ioctl(cs, KVM_GET_DEVICE_ATTR, attr); in kvm_get_stealtime()
66 struct kvm_device_attr attr = { in kvm_set_stealtime() local
68 .attr = KVM_LOONGARCH_VCPU_PVTIME_GPA, in kvm_set_stealtime()
69 .addr = (uint64_t)&env->stealtime.guest_addr, in kvm_set_stealtime()
72 err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, attr); in kvm_set_stealtime()
77 err = kvm_vcpu_ioctl(cs, KVM_SET_DEVICE_ATTR, attr); in kvm_set_stealtime()
80 strerror(errno), env->stealtime.guest_addr); in kvm_set_stealtime()
92 struct kvm_device_attr attr = { in kvm_set_pv_features() local
94 .attr = CPUCFG_KVM_FEATURE, in kvm_set_pv_features()
98 err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, attr); in kvm_set_pv_features()
103 val = env->pv_features; in kvm_set_pv_features()
104 err = kvm_vcpu_ioctl(cs, KVM_SET_DEVICE_ATTR, attr); in kvm_set_pv_features()
128 env->gpr[0] = 0; in kvm_loongarch_get_regs_core()
130 env->gpr[i] = regs.gpr[i]; in kvm_loongarch_get_regs_core()
133 env->pc = regs.pc; in kvm_loongarch_get_regs_core()
146 regs.gpr[i] = env->gpr[i]; in kvm_loongarch_put_regs_core()
149 regs.pc = env->pc; in kvm_loongarch_put_regs_core()
164 &env->CSR_CRMD); in kvm_loongarch_get_csr()
167 &env->CSR_PRMD); in kvm_loongarch_get_csr()
170 &env->CSR_EUEN); in kvm_loongarch_get_csr()
173 &env->CSR_MISC); in kvm_loongarch_get_csr()
176 &env->CSR_ECFG); in kvm_loongarch_get_csr()
179 &env->CSR_ESTAT); in kvm_loongarch_get_csr()
182 &env->CSR_ERA); in kvm_loongarch_get_csr()
185 &env->CSR_BADV); in kvm_loongarch_get_csr()
188 &env->CSR_BADI); in kvm_loongarch_get_csr()
191 &env->CSR_EENTRY); in kvm_loongarch_get_csr()
194 &env->CSR_TLBIDX); in kvm_loongarch_get_csr()
197 &env->CSR_TLBEHI); in kvm_loongarch_get_csr()
200 &env->CSR_TLBELO0); in kvm_loongarch_get_csr()
203 &env->CSR_TLBELO1); in kvm_loongarch_get_csr()
206 &env->CSR_ASID); in kvm_loongarch_get_csr()
209 &env->CSR_PGDL); in kvm_loongarch_get_csr()
212 &env->CSR_PGDH); in kvm_loongarch_get_csr()
215 &env->CSR_PGD); in kvm_loongarch_get_csr()
218 &env->CSR_PWCL); in kvm_loongarch_get_csr()
221 &env->CSR_PWCH); in kvm_loongarch_get_csr()
224 &env->CSR_STLBPS); in kvm_loongarch_get_csr()
227 &env->CSR_RVACFG); in kvm_loongarch_get_csr()
230 &env->CSR_CPUID); in kvm_loongarch_get_csr()
233 &env->CSR_PRCFG1); in kvm_loongarch_get_csr()
236 &env->CSR_PRCFG2); in kvm_loongarch_get_csr()
239 &env->CSR_PRCFG3); in kvm_loongarch_get_csr()
242 &env->CSR_SAVE[0]); in kvm_loongarch_get_csr()
245 &env->CSR_SAVE[1]); in kvm_loongarch_get_csr()
248 &env->CSR_SAVE[2]); in kvm_loongarch_get_csr()
251 &env->CSR_SAVE[3]); in kvm_loongarch_get_csr()
254 &env->CSR_SAVE[4]); in kvm_loongarch_get_csr()
257 &env->CSR_SAVE[5]); in kvm_loongarch_get_csr()
260 &env->CSR_SAVE[6]); in kvm_loongarch_get_csr()
263 &env->CSR_SAVE[7]); in kvm_loongarch_get_csr()
266 &env->CSR_TID); in kvm_loongarch_get_csr()
269 &env->CSR_CNTC); in kvm_loongarch_get_csr()
272 &env->CSR_TICLR); in kvm_loongarch_get_csr()
275 &env->CSR_LLBCTL); in kvm_loongarch_get_csr()
278 &env->CSR_IMPCTL1); in kvm_loongarch_get_csr()
281 &env->CSR_IMPCTL2); in kvm_loongarch_get_csr()
284 &env->CSR_TLBRENTRY); in kvm_loongarch_get_csr()
287 &env->CSR_TLBRBADV); in kvm_loongarch_get_csr()
290 &env->CSR_TLBRERA); in kvm_loongarch_get_csr()
293 &env->CSR_TLBRSAVE); in kvm_loongarch_get_csr()
296 &env->CSR_TLBRELO0); in kvm_loongarch_get_csr()
299 &env->CSR_TLBRELO1); in kvm_loongarch_get_csr()
302 &env->CSR_TLBREHI); in kvm_loongarch_get_csr()
305 &env->CSR_TLBRPRMD); in kvm_loongarch_get_csr()
308 &env->CSR_DMW[0]); in kvm_loongarch_get_csr()
311 &env->CSR_DMW[1]); in kvm_loongarch_get_csr()
314 &env->CSR_DMW[2]); in kvm_loongarch_get_csr()
317 &env->CSR_DMW[3]); in kvm_loongarch_get_csr()
320 &env->CSR_TVAL); in kvm_loongarch_get_csr()
323 &env->CSR_TCFG); in kvm_loongarch_get_csr()
334 &env->CSR_CRMD); in kvm_loongarch_put_csr()
337 &env->CSR_PRMD); in kvm_loongarch_put_csr()
340 &env->CSR_EUEN); in kvm_loongarch_put_csr()
343 &env->CSR_MISC); in kvm_loongarch_put_csr()
346 &env->CSR_ECFG); in kvm_loongarch_put_csr()
349 &env->CSR_ESTAT); in kvm_loongarch_put_csr()
352 &env->CSR_ERA); in kvm_loongarch_put_csr()
355 &env->CSR_BADV); in kvm_loongarch_put_csr()
358 &env->CSR_BADI); in kvm_loongarch_put_csr()
361 &env->CSR_EENTRY); in kvm_loongarch_put_csr()
364 &env->CSR_TLBIDX); in kvm_loongarch_put_csr()
367 &env->CSR_TLBEHI); in kvm_loongarch_put_csr()
370 &env->CSR_TLBELO0); in kvm_loongarch_put_csr()
373 &env->CSR_TLBELO1); in kvm_loongarch_put_csr()
376 &env->CSR_ASID); in kvm_loongarch_put_csr()
379 &env->CSR_PGDL); in kvm_loongarch_put_csr()
382 &env->CSR_PGDH); in kvm_loongarch_put_csr()
385 &env->CSR_PGD); in kvm_loongarch_put_csr()
388 &env->CSR_PWCL); in kvm_loongarch_put_csr()
391 &env->CSR_PWCH); in kvm_loongarch_put_csr()
394 &env->CSR_STLBPS); in kvm_loongarch_put_csr()
397 &env->CSR_RVACFG); in kvm_loongarch_put_csr()
402 &env->CSR_CPUID); in kvm_loongarch_put_csr()
406 &env->CSR_PRCFG1); in kvm_loongarch_put_csr()
409 &env->CSR_PRCFG2); in kvm_loongarch_put_csr()
412 &env->CSR_PRCFG3); in kvm_loongarch_put_csr()
415 &env->CSR_SAVE[0]); in kvm_loongarch_put_csr()
418 &env->CSR_SAVE[1]); in kvm_loongarch_put_csr()
421 &env->CSR_SAVE[2]); in kvm_loongarch_put_csr()
424 &env->CSR_SAVE[3]); in kvm_loongarch_put_csr()
427 &env->CSR_SAVE[4]); in kvm_loongarch_put_csr()
430 &env->CSR_SAVE[5]); in kvm_loongarch_put_csr()
433 &env->CSR_SAVE[6]); in kvm_loongarch_put_csr()
436 &env->CSR_SAVE[7]); in kvm_loongarch_put_csr()
439 &env->CSR_TID); in kvm_loongarch_put_csr()
442 &env->CSR_CNTC); in kvm_loongarch_put_csr()
445 &env->CSR_TICLR); in kvm_loongarch_put_csr()
448 &env->CSR_LLBCTL); in kvm_loongarch_put_csr()
451 &env->CSR_IMPCTL1); in kvm_loongarch_put_csr()
454 &env->CSR_IMPCTL2); in kvm_loongarch_put_csr()
457 &env->CSR_TLBRENTRY); in kvm_loongarch_put_csr()
460 &env->CSR_TLBRBADV); in kvm_loongarch_put_csr()
463 &env->CSR_TLBRERA); in kvm_loongarch_put_csr()
466 &env->CSR_TLBRSAVE); in kvm_loongarch_put_csr()
469 &env->CSR_TLBRELO0); in kvm_loongarch_put_csr()
472 &env->CSR_TLBRELO1); in kvm_loongarch_put_csr()
475 &env->CSR_TLBREHI); in kvm_loongarch_put_csr()
478 &env->CSR_TLBRPRMD); in kvm_loongarch_put_csr()
481 &env->CSR_DMW[0]); in kvm_loongarch_put_csr()
484 &env->CSR_DMW[1]); in kvm_loongarch_put_csr()
487 &env->CSR_DMW[2]); in kvm_loongarch_put_csr()
490 &env->CSR_DMW[3]); in kvm_loongarch_put_csr()
496 &env->CSR_TVAL); in kvm_loongarch_put_csr()
499 &env->CSR_TCFG); in kvm_loongarch_put_csr()
515 env->fcsr0 = fpu.fcsr; in kvm_loongarch_get_regs_fp()
517 env->fpr[i].vreg.UD[0] = fpu.fpr[i].val64[0]; in kvm_loongarch_get_regs_fp()
518 env->fpr[i].vreg.UD[1] = fpu.fpr[i].val64[1]; in kvm_loongarch_get_regs_fp()
519 env->fpr[i].vreg.UD[2] = fpu.fpr[i].val64[2]; in kvm_loongarch_get_regs_fp()
520 env->fpr[i].vreg.UD[3] = fpu.fpr[i].val64[3]; in kvm_loongarch_get_regs_fp()
523 env->cf[i] = fpu.fcc & 0xFF; in kvm_loongarch_get_regs_fp()
536 fpu.fcsr = env->fcsr0; in kvm_loongarch_put_regs_fp()
539 fpu.fpr[i].val64[0] = env->fpr[i].vreg.UD[0]; in kvm_loongarch_put_regs_fp()
540 fpu.fpr[i].val64[1] = env->fpr[i].vreg.UD[1]; in kvm_loongarch_put_regs_fp()
541 fpu.fpr[i].val64[2] = env->fpr[i].vreg.UD[2]; in kvm_loongarch_put_regs_fp()
542 fpu.fpr[i].val64[3] = env->fpr[i].vreg.UD[3]; in kvm_loongarch_put_regs_fp()
546 fpu.fcc |= env->cf[i] << (8 * i); in kvm_loongarch_put_regs_fp()
564 if (FIELD_EX32(env->cpucfg[2], CPUCFG2, LBT_ALL) != 7) { in kvm_loongarch_put_lbt()
568 /* set six LBT registers including scr0-scr3, eflags, ftop */ in kvm_loongarch_put_lbt()
569 ret = kvm_set_one_reg(cs, KVM_REG_LOONGARCH_LBT_SCR0, &env->lbt.scr0); in kvm_loongarch_put_lbt()
570 ret |= kvm_set_one_reg(cs, KVM_REG_LOONGARCH_LBT_SCR1, &env->lbt.scr1); in kvm_loongarch_put_lbt()
571 ret |= kvm_set_one_reg(cs, KVM_REG_LOONGARCH_LBT_SCR2, &env->lbt.scr2); in kvm_loongarch_put_lbt()
572 ret |= kvm_set_one_reg(cs, KVM_REG_LOONGARCH_LBT_SCR3, &env->lbt.scr3); in kvm_loongarch_put_lbt()
574 * Be cautious, KVM_REG_LOONGARCH_LBT_FTOP is defined as 64-bit however in kvm_loongarch_put_lbt()
575 * lbt.ftop is 32-bit; the same with KVM_REG_LOONGARCH_LBT_EFLAGS register in kvm_loongarch_put_lbt()
577 val = env->lbt.eflags; in kvm_loongarch_put_lbt()
579 val = env->lbt.ftop; in kvm_loongarch_put_lbt()
592 if (FIELD_EX32(env->cpucfg[2], CPUCFG2, LBT_ALL) != 7) { in kvm_loongarch_get_lbt()
596 /* get six LBT registers including scr0-scr3, eflags, ftop */ in kvm_loongarch_get_lbt()
597 ret = kvm_get_one_reg(cs, KVM_REG_LOONGARCH_LBT_SCR0, &env->lbt.scr0); in kvm_loongarch_get_lbt()
598 ret |= kvm_get_one_reg(cs, KVM_REG_LOONGARCH_LBT_SCR1, &env->lbt.scr1); in kvm_loongarch_get_lbt()
599 ret |= kvm_get_one_reg(cs, KVM_REG_LOONGARCH_LBT_SCR2, &env->lbt.scr2); in kvm_loongarch_get_lbt()
600 ret |= kvm_get_one_reg(cs, KVM_REG_LOONGARCH_LBT_SCR3, &env->lbt.scr3); in kvm_loongarch_get_lbt()
602 env->lbt.eflags = (uint32_t)val; in kvm_loongarch_get_lbt()
604 env->lbt.ftop = (uint32_t)val; in kvm_loongarch_get_lbt()
615 env->mp_state = KVM_MP_STATE_RUNNABLE; in kvm_arch_reset_vcpu()
636 env->mp_state = mp_state.mp_state; in kvm_loongarch_get_mpstate()
646 .mp_state = cpu_env(cs)->mp_state in kvm_loongarch_put_mpstate()
670 env->cpucfg[i] = (uint32_t)val; in kvm_loongarch_get_cpucfg()
679 struct kvm_device_attr attr = { in kvm_check_cpucfg2() local
681 .attr = 2, in kvm_check_cpucfg2()
686 ret = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, &attr); in kvm_check_cpucfg2()
689 kvm_vcpu_ioctl(cs, KVM_GET_DEVICE_ATTR, &attr); in kvm_check_cpucfg2()
690 env->cpucfg[2] &= val; in kvm_check_cpucfg2()
692 if (FIELD_EX32(env->cpucfg[2], CPUCFG2, FP)) { in kvm_check_cpucfg2()
694 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, FP_VER, 1); in kvm_check_cpucfg2()
697 if (FIELD_EX32(env->cpucfg[2], CPUCFG2, LLFTP)) { in kvm_check_cpucfg2()
699 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LLFTP_VER, 1); in kvm_check_cpucfg2()
719 val = env->cpucfg[i]; in kvm_loongarch_put_cpucfg()
828 &cpu->kvm_state_counter); in kvm_loongarch_vm_stage_change()
834 &cpu->kvm_state_counter); in kvm_loongarch_vm_stage_change()
844 struct kvm_device_attr attr; in kvm_feature_supported() local
849 attr.group = KVM_LOONGARCH_VM_FEAT_CTRL; in kvm_feature_supported()
850 attr.attr = KVM_LOONGARCH_VM_FEAT_LSX; in kvm_feature_supported()
851 ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
858 attr.group = KVM_LOONGARCH_VCPU_CPUCFG; in kvm_feature_supported()
860 attr.attr = 2; in kvm_feature_supported()
861 attr.addr = (uint64_t)&val; in kvm_feature_supported()
862 ret = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
864 ret = kvm_vcpu_ioctl(cs, KVM_GET_DEVICE_ATTR, &attr); in kvm_feature_supported()
875 attr.group = KVM_LOONGARCH_VM_FEAT_CTRL; in kvm_feature_supported()
876 attr.attr = KVM_LOONGARCH_VM_FEAT_LASX; in kvm_feature_supported()
877 ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
884 attr.group = KVM_LOONGARCH_VCPU_CPUCFG; in kvm_feature_supported()
886 attr.attr = 2; in kvm_feature_supported()
887 attr.addr = (uint64_t)&val; in kvm_feature_supported()
888 ret = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
890 ret = kvm_vcpu_ioctl(cs, KVM_GET_DEVICE_ATTR, &attr); in kvm_feature_supported()
907 attr.group = KVM_LOONGARCH_VM_FEAT_CTRL; in kvm_feature_supported()
908 attr.attr = KVM_LOONGARCH_VM_FEAT_X86BT; in kvm_feature_supported()
909 ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
910 attr.attr = KVM_LOONGARCH_VM_FEAT_ARMBT; in kvm_feature_supported()
911 ret |= kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
912 attr.attr = KVM_LOONGARCH_VM_FEAT_MIPSBT; in kvm_feature_supported()
913 ret |= kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
917 attr.group = KVM_LOONGARCH_VM_FEAT_CTRL; in kvm_feature_supported()
918 attr.attr = KVM_LOONGARCH_VM_FEAT_PMU; in kvm_feature_supported()
919 ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
923 attr.group = KVM_LOONGARCH_VM_FEAT_CTRL; in kvm_feature_supported()
924 attr.attr = KVM_LOONGARCH_VM_FEAT_PV_IPI; in kvm_feature_supported()
925 ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
929 attr.group = KVM_LOONGARCH_VM_FEAT_CTRL; in kvm_feature_supported()
930 attr.attr = KVM_LOONGARCH_VM_FEAT_PV_STEALTIME; in kvm_feature_supported()
931 ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr); in kvm_feature_supported()
948 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LSX, 0); in kvm_cpu_check_lsx()
949 if (cpu->lsx == ON_OFF_AUTO_ON) { in kvm_cpu_check_lsx()
951 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LSX, 1); in kvm_cpu_check_lsx()
954 return -ENOTSUP; in kvm_cpu_check_lsx()
956 } else if ((cpu->lsx == ON_OFF_AUTO_AUTO) && kvm_supported) { in kvm_cpu_check_lsx()
957 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LSX, 1); in kvm_cpu_check_lsx()
970 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LASX, 0); in kvm_cpu_check_lasx()
971 if (cpu->lasx == ON_OFF_AUTO_ON) { in kvm_cpu_check_lasx()
973 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LASX, 1); in kvm_cpu_check_lasx()
976 return -ENOTSUP; in kvm_cpu_check_lasx()
978 } else if ((cpu->lasx == ON_OFF_AUTO_AUTO) && kvm_supported) { in kvm_cpu_check_lasx()
979 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LASX, 1); in kvm_cpu_check_lasx()
992 if (cpu->lbt == ON_OFF_AUTO_ON) { in kvm_cpu_check_lbt()
994 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LBT_ALL, 7); in kvm_cpu_check_lbt()
997 return -ENOTSUP; in kvm_cpu_check_lbt()
999 } else if ((cpu->lbt == ON_OFF_AUTO_AUTO) && kvm_supported) { in kvm_cpu_check_lbt()
1000 env->cpucfg[2] = FIELD_DP32(env->cpucfg[2], CPUCFG2, LBT_ALL, 7); in kvm_cpu_check_lbt()
1013 if (cpu->pmu == ON_OFF_AUTO_ON) { in kvm_cpu_check_pmu()
1016 return -ENOTSUP; in kvm_cpu_check_pmu()
1018 } else if (cpu->pmu != ON_OFF_AUTO_AUTO) { in kvm_cpu_check_pmu()
1019 /* disable pmu if ON_OFF_AUTO_OFF is set */ in kvm_cpu_check_pmu()
1024 env->cpucfg[6] = FIELD_DP32(env->cpucfg[6], CPUCFG6, PMP, 1); in kvm_cpu_check_pmu()
1025 env->cpucfg[6] = FIELD_DP32(env->cpucfg[6], CPUCFG6, PMNUM, 3); in kvm_cpu_check_pmu()
1026 env->cpucfg[6] = FIELD_DP32(env->cpucfg[6], CPUCFG6, PMBITS, 63); in kvm_cpu_check_pmu()
1027 env->cpucfg[6] = FIELD_DP32(env->cpucfg[6], CPUCFG6, UPM, 1); in kvm_cpu_check_pmu()
1040 if (cpu->kvm_pv_ipi == ON_OFF_AUTO_ON) { in kvm_cpu_check_pv_features()
1043 return -ENOTSUP; in kvm_cpu_check_pv_features()
1045 } else if (cpu->kvm_pv_ipi != ON_OFF_AUTO_AUTO) { in kvm_cpu_check_pv_features()
1050 env->pv_features |= BIT(KVM_FEATURE_IPI); in kvm_cpu_check_pv_features()
1054 if (cpu->kvm_steal_time == ON_OFF_AUTO_ON) { in kvm_cpu_check_pv_features()
1057 return -ENOTSUP; in kvm_cpu_check_pv_features()
1059 } else if (cpu->kvm_steal_time != ON_OFF_AUTO_AUTO) { in kvm_cpu_check_pv_features()
1064 env->pv_features |= BIT(KVM_FEATURE_STEAL_TIME); in kvm_cpu_check_pv_features()
1071 env->pv_features |= BIT(KVM_FEATURE_VIRT_EXTIOI); in kvm_cpu_check_pv_features()
1089 cpu->vmsentry = qemu_add_vm_change_state_handler( in kvm_arch_init_vcpu()
1131 return LOONGARCH_CPU(obj)->lbt != ON_OFF_AUTO_OFF; in loongarch_get_lbt()
1138 cpu->lbt = value ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF; in loongarch_set_lbt()
1143 return LOONGARCH_CPU(obj)->pmu != ON_OFF_AUTO_OFF; in loongarch_get_pmu()
1150 cpu->pmu = value ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF; in loongarch_set_pmu()
1155 return LOONGARCH_CPU(obj)->kvm_pv_ipi != ON_OFF_AUTO_OFF; in kvm_pv_ipi_get()
1162 cpu->kvm_pv_ipi = value ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF; in kvm_pv_ipi_set()
1167 return LOONGARCH_CPU(obj)->kvm_steal_time != ON_OFF_AUTO_OFF; in kvm_steal_time_get()
1174 cpu->kvm_steal_time = value ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF; in kvm_steal_time_set()
1179 cpu->lbt = ON_OFF_AUTO_AUTO; in kvm_loongarch_cpu_post_init()
1183 "Set off to disable Binary Tranlation."); in kvm_loongarch_cpu_post_init()
1185 cpu->pmu = ON_OFF_AUTO_AUTO; in kvm_loongarch_cpu_post_init()
1189 "Set off to disable performance monitor unit."); in kvm_loongarch_cpu_post_init()
1191 cpu->kvm_pv_ipi = ON_OFF_AUTO_AUTO; in kvm_loongarch_cpu_post_init()
1192 object_property_add_bool(OBJECT(cpu), "kvm-pv-ipi", kvm_pv_ipi_get, in kvm_loongarch_cpu_post_init()
1194 object_property_set_description(OBJECT(cpu), "kvm-pv-ipi", in kvm_loongarch_cpu_post_init()
1195 "Set off to disable KVM paravirt IPI."); in kvm_loongarch_cpu_post_init()
1197 cpu->kvm_steal_time = ON_OFF_AUTO_AUTO; in kvm_loongarch_cpu_post_init()
1198 object_property_add_bool(OBJECT(cpu), "kvm-steal-time", kvm_steal_time_get, in kvm_loongarch_cpu_post_init()
1200 object_property_set_description(OBJECT(cpu), "kvm-steal-time", in kvm_loongarch_cpu_post_init()
1201 "Set off to disable KVM steal time."); in kvm_loongarch_cpu_post_init()
1208 qemu_del_vm_change_state_handler(cpu->vmsentry); in kvm_arch_destroy_vcpu()
1214 return cs->cpu_index; in kvm_arch_vcpu_id()
1291 return cs->halted; in kvm_arch_process_async_events()
1302 dbg->control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP; in kvm_arch_update_guest_debug()
1308 if (cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&bp->saved_insn, 4, 0) || in kvm_arch_insert_sw_breakpoint()
1309 cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&brk_insn, 4, 1)) { in kvm_arch_insert_sw_breakpoint()
1311 return -EINVAL; in kvm_arch_insert_sw_breakpoint()
1320 if (cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&brk, 4, 0) || in kvm_arch_remove_sw_breakpoint()
1322 cpu_memory_rw_debug(cs, bp->pc, (uint8_t *)&bp->saved_insn, 4, 1)) { in kvm_arch_remove_sw_breakpoint()
1324 return -EINVAL; in kvm_arch_remove_sw_breakpoint()
1331 return -ENOSYS; in kvm_arch_insert_hw_breakpoint()
1336 return -ENOSYS; in kvm_arch_remove_hw_breakpoint()
1346 CPULoongArchState *env = &cpu->env; in kvm_loongarch_handle_debug()
1349 if (cs->singlestep_enabled) { in kvm_loongarch_handle_debug()
1353 if (kvm_find_sw_breakpoint(cs, env->pc)) { in kvm_loongarch_handle_debug()
1366 attrs.requester_id = env_cpu(env)->cpu_index; in kvm_arch_handle_exit()
1368 trace_kvm_arch_handle_exit(run->exit_reason); in kvm_arch_handle_exit()
1369 switch (run->exit_reason) { in kvm_arch_handle_exit()
1371 address_space_rw(env->address_space_iocsr, in kvm_arch_handle_exit()
1372 run->iocsr_io.phys_addr, in kvm_arch_handle_exit()
1374 run->iocsr_io.data, in kvm_arch_handle_exit()
1375 run->iocsr_io.len, in kvm_arch_handle_exit()
1376 run->iocsr_io.is_write); in kvm_arch_handle_exit()
1386 ret = -1; in kvm_arch_handle_exit()
1387 warn_report("KVM: unknown exit reason %d", run->exit_reason); in kvm_arch_handle_exit()
1401 intr.irq = -irq; in kvm_loongarch_set_interrupt()