Lines Matching refs:vcpu
113 unsigned long *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num) in vcpu_reg() argument
115 unsigned long *reg_array = (unsigned long *)&vcpu->arch.regs; in vcpu_reg()
116 unsigned long mode = *vcpu_cpsr(vcpu) & MODE_MASK; in vcpu_reg()
145 unsigned long *vcpu_spsr(struct kvm_vcpu *vcpu) in vcpu_spsr() argument
147 unsigned long mode = *vcpu_cpsr(vcpu) & MODE_MASK; in vcpu_spsr()
150 return &vcpu->arch.regs.KVM_ARM_SVC_spsr; in vcpu_spsr()
152 return &vcpu->arch.regs.KVM_ARM_ABT_spsr; in vcpu_spsr()
154 return &vcpu->arch.regs.KVM_ARM_UND_spsr; in vcpu_spsr()
156 return &vcpu->arch.regs.KVM_ARM_IRQ_spsr; in vcpu_spsr()
158 return &vcpu->arch.regs.KVM_ARM_FIQ_spsr; in vcpu_spsr()
169 bool kvm_condition_valid(struct kvm_vcpu *vcpu) in kvm_condition_valid() argument
178 BUG_ON(!kvm_vcpu_trap_get_class(vcpu)); in kvm_condition_valid()
181 if (kvm_vcpu_get_hsr(vcpu) >> 30) in kvm_condition_valid()
184 cpsr = *vcpu_cpsr(vcpu); in kvm_condition_valid()
187 if ((kvm_vcpu_get_hsr(vcpu) & HSR_CV) >> HSR_CV_SHIFT) in kvm_condition_valid()
188 cond = (kvm_vcpu_get_hsr(vcpu) & HSR_COND) >> HSR_COND_SHIFT; in kvm_condition_valid()
218 static void kvm_adjust_itstate(struct kvm_vcpu *vcpu) in kvm_adjust_itstate() argument
221 unsigned long cpsr = *vcpu_cpsr(vcpu); in kvm_adjust_itstate()
243 *vcpu_cpsr(vcpu) = cpsr; in kvm_adjust_itstate()
250 void kvm_skip_instr(struct kvm_vcpu *vcpu, bool is_wide_instr) in kvm_skip_instr() argument
254 is_thumb = !!(*vcpu_cpsr(vcpu) & PSR_T_BIT); in kvm_skip_instr()
256 *vcpu_pc(vcpu) += 2; in kvm_skip_instr()
258 *vcpu_pc(vcpu) += 4; in kvm_skip_instr()
259 kvm_adjust_itstate(vcpu); in kvm_skip_instr()
267 static u32 exc_vector_base(struct kvm_vcpu *vcpu) in exc_vector_base() argument
269 u32 sctlr = vcpu->arch.cp15[c1_SCTLR]; in exc_vector_base()
270 u32 vbar = vcpu->arch.cp15[c12_VBAR]; in exc_vector_base()
287 void kvm_inject_undefined(struct kvm_vcpu *vcpu) in kvm_inject_undefined() argument
291 unsigned long cpsr = *vcpu_cpsr(vcpu); in kvm_inject_undefined()
292 u32 sctlr = vcpu->arch.cp15[c1_SCTLR]; in kvm_inject_undefined()
298 new_lr_value = *vcpu_pc(vcpu) - return_offset; in kvm_inject_undefined()
300 *vcpu_cpsr(vcpu) = (cpsr & ~MODE_MASK) | UND_MODE; in kvm_inject_undefined()
301 *vcpu_cpsr(vcpu) |= PSR_I_BIT; in kvm_inject_undefined()
302 *vcpu_cpsr(vcpu) &= ~(PSR_IT_MASK | PSR_J_BIT | PSR_E_BIT | PSR_T_BIT); in kvm_inject_undefined()
305 *vcpu_cpsr(vcpu) |= PSR_T_BIT; in kvm_inject_undefined()
307 *vcpu_cpsr(vcpu) |= PSR_E_BIT; in kvm_inject_undefined()
310 *vcpu_spsr(vcpu) = cpsr; in kvm_inject_undefined()
311 *vcpu_reg(vcpu, 14) = new_lr_value; in kvm_inject_undefined()
314 *vcpu_pc(vcpu) = exc_vector_base(vcpu) + vect_offset; in kvm_inject_undefined()
321 static void inject_abt(struct kvm_vcpu *vcpu, bool is_pabt, unsigned long addr) in inject_abt() argument
325 unsigned long cpsr = *vcpu_cpsr(vcpu); in inject_abt()
326 u32 sctlr = vcpu->arch.cp15[c1_SCTLR]; in inject_abt()
333 new_lr_value = *vcpu_pc(vcpu) + return_offset; in inject_abt()
335 *vcpu_cpsr(vcpu) = (cpsr & ~MODE_MASK) | ABT_MODE; in inject_abt()
336 *vcpu_cpsr(vcpu) |= PSR_I_BIT | PSR_A_BIT; in inject_abt()
337 *vcpu_cpsr(vcpu) &= ~(PSR_IT_MASK | PSR_J_BIT | PSR_E_BIT | PSR_T_BIT); in inject_abt()
340 *vcpu_cpsr(vcpu) |= PSR_T_BIT; in inject_abt()
342 *vcpu_cpsr(vcpu) |= PSR_E_BIT; in inject_abt()
345 *vcpu_spsr(vcpu) = cpsr; in inject_abt()
346 *vcpu_reg(vcpu, 14) = new_lr_value; in inject_abt()
354 *vcpu_pc(vcpu) = exc_vector_base(vcpu) + vect_offset; in inject_abt()
358 vcpu->arch.cp15[c6_IFAR] = addr; in inject_abt()
359 is_lpae = (vcpu->arch.cp15[c2_TTBCR] >> 31); in inject_abt()
362 vcpu->arch.cp15[c5_IFSR] = 1 << 9 | 0x22; in inject_abt()
364 vcpu->arch.cp15[c5_IFSR] = 2; in inject_abt()
367 vcpu->arch.cp15[c6_DFAR] = addr; in inject_abt()
368 is_lpae = (vcpu->arch.cp15[c2_TTBCR] >> 31); in inject_abt()
371 vcpu->arch.cp15[c5_DFSR] = 1 << 9 | 0x22; in inject_abt()
373 vcpu->arch.cp15[c5_DFSR] = 2; in inject_abt()
386 void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr) in kvm_inject_dabt() argument
388 inject_abt(vcpu, false, addr); in kvm_inject_dabt()
399 void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr) in kvm_inject_pabt() argument
401 inject_abt(vcpu, true, addr); in kvm_inject_pabt()