diff options
Diffstat (limited to 'arch/powerpc/kvm/booke.c')
| -rw-r--r-- | arch/powerpc/kvm/booke.c | 30 | 
1 files changed, 19 insertions, 11 deletions
| diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index 01adffb24667..6a5be025a8af 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c @@ -283,9 +283,10 @@ void kvmppc_core_queue_dtlb_miss(struct kvm_vcpu *vcpu,  	kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_DTLB_MISS);  } -void kvmppc_core_queue_data_storage(struct kvm_vcpu *vcpu, +void kvmppc_core_queue_data_storage(struct kvm_vcpu *vcpu, ulong srr1_flags,  				    ulong dear_flags, ulong esr_flags)  { +	WARN_ON_ONCE(srr1_flags);  	vcpu->arch.queued_dear = dear_flags;  	vcpu->arch.queued_esr = esr_flags;  	kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_DATA_STORAGE); @@ -316,14 +317,16 @@ void kvmppc_core_queue_program(struct kvm_vcpu *vcpu, ulong esr_flags)  	kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_PROGRAM);  } -void kvmppc_core_queue_fpunavail(struct kvm_vcpu *vcpu) +void kvmppc_core_queue_fpunavail(struct kvm_vcpu *vcpu, ulong srr1_flags)  { +	WARN_ON_ONCE(srr1_flags);  	kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_FP_UNAVAIL);  }  #ifdef CONFIG_ALTIVEC -void kvmppc_core_queue_vec_unavail(struct kvm_vcpu *vcpu) +void kvmppc_core_queue_vec_unavail(struct kvm_vcpu *vcpu, ulong srr1_flags)  { +	WARN_ON_ONCE(srr1_flags);  	kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_ALTIVEC_UNAVAIL);  }  #endif @@ -623,7 +626,7 @@ static void arm_next_watchdog(struct kvm_vcpu *vcpu)  	spin_unlock_irqrestore(&vcpu->arch.wdt_lock, flags);  } -void kvmppc_watchdog_func(struct timer_list *t) +static void kvmppc_watchdog_func(struct timer_list *t)  {  	struct kvm_vcpu *vcpu = from_timer(vcpu, t, arch.wdt_timer);  	u32 tsr, new_tsr; @@ -841,7 +844,7 @@ static int emulation_exit(struct kvm_vcpu *vcpu)  		return RESUME_GUEST;  	case EMULATE_FAIL: -		printk(KERN_CRIT "%s: emulation at %lx failed (%08x)\n", +		printk(KERN_CRIT "%s: emulation at %lx failed (%08lx)\n",  		       __func__, vcpu->arch.regs.nip, vcpu->arch.last_inst);  		/* For debugging, encode the failing instruction and  		 * report it to userspace. */ @@ -1000,7 +1003,7 @@ static int kvmppc_resume_inst_load(struct kvm_vcpu *vcpu,  	}  } -/** +/*   * kvmppc_handle_exit   *   * Return value is in the form (errcode<<2 | RESUME_FLAG_HOST | RESUME_FLAG_NV) @@ -1012,6 +1015,7 @@ int kvmppc_handle_exit(struct kvm_vcpu *vcpu, unsigned int exit_nr)  	int s;  	int idx;  	u32 last_inst = KVM_INST_FETCH_FAILED; +	ppc_inst_t pinst;  	enum emulation_result emulated = EMULATE_DONE;  	/* Fix irq state (pairs with kvmppc_fix_ee_before_entry()) */ @@ -1031,12 +1035,15 @@ int kvmppc_handle_exit(struct kvm_vcpu *vcpu, unsigned int exit_nr)  	case BOOKE_INTERRUPT_DATA_STORAGE:  	case BOOKE_INTERRUPT_DTLB_MISS:  	case BOOKE_INTERRUPT_HV_PRIV: -		emulated = kvmppc_get_last_inst(vcpu, INST_GENERIC, &last_inst); +		emulated = kvmppc_get_last_inst(vcpu, INST_GENERIC, &pinst); +		last_inst = ppc_inst_val(pinst);  		break;  	case BOOKE_INTERRUPT_PROGRAM:  		/* SW breakpoints arrive as illegal instructions on HV */ -		if (vcpu->guest_debug & KVM_GUESTDBG_USE_SW_BP) -			emulated = kvmppc_get_last_inst(vcpu, INST_GENERIC, &last_inst); +		if (vcpu->guest_debug & KVM_GUESTDBG_USE_SW_BP) { +			emulated = kvmppc_get_last_inst(vcpu, INST_GENERIC, &pinst); +			last_inst = ppc_inst_val(pinst); +		}  		break;  	default:  		break; @@ -1225,7 +1232,7 @@ int kvmppc_handle_exit(struct kvm_vcpu *vcpu, unsigned int exit_nr)  #endif  	case BOOKE_INTERRUPT_DATA_STORAGE: -		kvmppc_core_queue_data_storage(vcpu, vcpu->arch.fault_dear, +		kvmppc_core_queue_data_storage(vcpu, 0, vcpu->arch.fault_dear,  		                               vcpu->arch.fault_esr);  		kvmppc_account_exit(vcpu, DSI_EXITS);  		r = RESUME_GUEST; @@ -1946,7 +1953,8 @@ static int kvmppc_booke_add_watchpoint(struct debug_reg *dbg_reg, uint64_t addr,  	dbg_reg->dbcr0 |= DBCR0_IDM;  	return 0;  } -void kvm_guest_protect_msr(struct kvm_vcpu *vcpu, ulong prot_bitmap, bool set) +static void kvm_guest_protect_msr(struct kvm_vcpu *vcpu, ulong prot_bitmap, +				  bool set)  {  	/* XXX: Add similar MSR protection for BookE-PR */  #ifdef CONFIG_KVM_BOOKE_HV | 
