Skip to content

Commit c5cb12b

Browse files
bibo-maochenhuacai
authored andcommitted
LoongArch: KVM: Handle LOONGARCH_CSR_IPR during vCPU context switch
Register LOONGARCH_CSR_IPR is interrupt priority setting for nested interrupt handling. Though LoongArch Linux AVEC driver does not use this register, KVM hypervisor needs to save and restore this it during vCPU context switch. Because Linux AVEC driver may use this register in future, or other OS may use it. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
1 parent c2f94da commit c5cb12b

3 files changed

Lines changed: 4 additions & 0 deletions

File tree

arch/loongarch/include/asm/loongarch.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,7 @@
690690
#define LOONGARCH_CSR_ISR3 0xa3
691691

692692
#define LOONGARCH_CSR_IRR 0xa4
693+
#define LOONGARCH_CSR_IPR 0xa5
693694

694695
#define LOONGARCH_CSR_PRID 0xc0
695696

arch/loongarch/kvm/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ static void kvm_init_gcsr_flag(void)
194194
set_gcsr_sw_flag(LOONGARCH_CSR_PERFCNTR3);
195195

196196
if (cpu_has_msgint) {
197+
set_gcsr_hw_flag(LOONGARCH_CSR_IPR);
197198
set_gcsr_hw_flag(LOONGARCH_CSR_ISR0);
198199
set_gcsr_hw_flag(LOONGARCH_CSR_ISR1);
199200
set_gcsr_hw_flag(LOONGARCH_CSR_ISR2);

arch/loongarch/kvm/vcpu.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,6 +1681,7 @@ static int _kvm_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
16811681
kvm_restore_hw_gcsr(csr, LOONGARCH_CSR_LLBCTL);
16821682

16831683
if (kvm_guest_has_msgint(&vcpu->arch)) {
1684+
kvm_restore_hw_gcsr(csr, LOONGARCH_CSR_IPR);
16841685
kvm_restore_hw_gcsr(csr, LOONGARCH_CSR_ISR0);
16851686
kvm_restore_hw_gcsr(csr, LOONGARCH_CSR_ISR1);
16861687
kvm_restore_hw_gcsr(csr, LOONGARCH_CSR_ISR2);
@@ -1777,6 +1778,7 @@ static int _kvm_vcpu_put(struct kvm_vcpu *vcpu, int cpu)
17771778
kvm_save_hw_gcsr(csr, LOONGARCH_CSR_DMWIN3);
17781779

17791780
if (kvm_guest_has_msgint(&vcpu->arch)) {
1781+
kvm_save_hw_gcsr(csr, LOONGARCH_CSR_IPR);
17801782
kvm_save_hw_gcsr(csr, LOONGARCH_CSR_ISR0);
17811783
kvm_save_hw_gcsr(csr, LOONGARCH_CSR_ISR1);
17821784
kvm_save_hw_gcsr(csr, LOONGARCH_CSR_ISR2);

0 commit comments

Comments
 (0)