All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: Mihai Caraman <mihai.caraman@freescale.com>, kvm-ppc@vger.kernel.org
Cc: kvm@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH 1/6 v2] KVM: PPC: Book3E: Use common defines for SPE/FP/AltiVec int numbers
Date: Thu, 03 Jul 2014 12:21:01 +0000	[thread overview]
Message-ID: <53B54AAD.4040609@suse.de> (raw)
In-Reply-To: <1404142497-6430-2-git-send-email-mihai.caraman@freescale.com>


On 30.06.14 17:34, Mihai Caraman wrote:
> Use common BOOKE_IRQPRIO and BOOKE_INTERRUPT defines for SPE/FP/AltiVec
> which share the same interrupt numbers.
>
> Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
> ---
> v2:
>   - remove outdated definitions
>
>   arch/powerpc/include/asm/kvm_asm.h    |  8 --------
>   arch/powerpc/kvm/booke.c              | 17 +++++++++--------
>   arch/powerpc/kvm/booke.h              |  4 ++--
>   arch/powerpc/kvm/booke_interrupts.S   |  9 +++++----
>   arch/powerpc/kvm/bookehv_interrupts.S |  4 ++--
>   arch/powerpc/kvm/e500.c               | 10 ++++++----
>   arch/powerpc/kvm/e500_emulate.c       | 10 ++++++----
>   7 files changed, 30 insertions(+), 32 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_asm.h b/arch/powerpc/include/asm/kvm_asm.h
> index 9601741..c94fd33 100644
> --- a/arch/powerpc/include/asm/kvm_asm.h
> +++ b/arch/powerpc/include/asm/kvm_asm.h
> @@ -56,14 +56,6 @@
>   /* E500 */
>   #define BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL 32
>   #define BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST 33
> -/*
> - * TODO: Unify 32-bit and 64-bit kernel exception handlers to use same defines
> - */
> -#define BOOKE_INTERRUPT_SPE_UNAVAIL BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> -#define BOOKE_INTERRUPT_SPE_FP_DATA BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST
> -#define BOOKE_INTERRUPT_ALTIVEC_UNAVAIL BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> -#define BOOKE_INTERRUPT_ALTIVEC_ASSIST \
> -				BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST

I think I'd prefer to keep them separate.

>   #define BOOKE_INTERRUPT_SPE_FP_ROUND 34
>   #define BOOKE_INTERRUPT_PERFORMANCE_MONITOR 35
>   #define BOOKE_INTERRUPT_DOORBELL 36
> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
> index ab62109..3c86d9b 100644
> --- a/arch/powerpc/kvm/booke.c
> +++ b/arch/powerpc/kvm/booke.c
> @@ -388,8 +388,8 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
>   	case BOOKE_IRQPRIO_ITLB_MISS:
>   	case BOOKE_IRQPRIO_SYSCALL:
>   	case BOOKE_IRQPRIO_FP_UNAVAIL:
> -	case BOOKE_IRQPRIO_SPE_UNAVAIL:
> -	case BOOKE_IRQPRIO_SPE_FP_DATA:
> +	case BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL:
> +	case BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST:

#ifdef CONFIG_KVM_E500V2
   case ...SPE:
#else
   case ..ALTIVEC:
#endif

>   	case BOOKE_IRQPRIO_SPE_FP_ROUND:
>   	case BOOKE_IRQPRIO_AP_UNAVAIL:
>   		allowed = 1;
> @@ -977,18 +977,19 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   		break;
>   
>   #ifdef CONFIG_SPE
> -	case BOOKE_INTERRUPT_SPE_UNAVAIL: {
> +	case BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL: {
>   		if (vcpu->arch.shared->msr & MSR_SPE)
>   			kvmppc_vcpu_enable_spe(vcpu);
>   		else
>   			kvmppc_booke_queue_irqprio(vcpu,
> -						   BOOKE_IRQPRIO_SPE_UNAVAIL);
> +				BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL);
>   		r = RESUME_GUEST;
>   		break;
>   	}
>   
> -	case BOOKE_INTERRUPT_SPE_FP_DATA:
> -		kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_SPE_FP_DATA);
> +	case BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST:
> +		kvmppc_booke_queue_irqprio(vcpu,
> +			BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST);
>   		r = RESUME_GUEST;
>   		break;
>   
> @@ -997,7 +998,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   		r = RESUME_GUEST;
>   		break;
>   #else
> -	case BOOKE_INTERRUPT_SPE_UNAVAIL:
> +	case BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL:
>   		/*
>   		 * Guest wants SPE, but host kernel doesn't support it.  Send
>   		 * an "unimplemented operation" program check to the guest.
> @@ -1010,7 +1011,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   	 * These really should never happen without CONFIG_SPE,
>   	 * as we should never enable the real MSR[SPE] in the guest.
>   	 */
> -	case BOOKE_INTERRUPT_SPE_FP_DATA:
> +	case BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST:
>   	case BOOKE_INTERRUPT_SPE_FP_ROUND:
>   		printk(KERN_CRIT "%s: unexpected SPE interrupt %u at %08lx\n",
>   		       __func__, exit_nr, vcpu->arch.pc);
> diff --git a/arch/powerpc/kvm/booke.h b/arch/powerpc/kvm/booke.h
> index b632cd3..f182b32 100644
> --- a/arch/powerpc/kvm/booke.h
> +++ b/arch/powerpc/kvm/booke.h
> @@ -32,8 +32,8 @@
>   #define BOOKE_IRQPRIO_ALIGNMENT 2
>   #define BOOKE_IRQPRIO_PROGRAM 3
>   #define BOOKE_IRQPRIO_FP_UNAVAIL 4
> -#define BOOKE_IRQPRIO_SPE_UNAVAIL 5
> -#define BOOKE_IRQPRIO_SPE_FP_DATA 6
> +#define BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL 5
> +#define BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST 6

#ifdef CONFIG_KVM_E500V2
#define ...SPE...
#else
#define ...ALTIVEC...
#endif

That way we can be 100% sure that no SPE cruft leaks into anything.


>   #define BOOKE_IRQPRIO_SPE_FP_ROUND 7
>   #define BOOKE_IRQPRIO_SYSCALL 8
>   #define BOOKE_IRQPRIO_AP_UNAVAIL 9
> diff --git a/arch/powerpc/kvm/booke_interrupts.S b/arch/powerpc/kvm/booke_interrupts.S
> index 2c6deb5ef..a275dc5 100644
> --- a/arch/powerpc/kvm/booke_interrupts.S
> +++ b/arch/powerpc/kvm/booke_interrupts.S
> @@ -137,8 +137,9 @@ KVM_HANDLER BOOKE_INTERRUPT_WATCHDOG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0
>   KVM_HANDLER BOOKE_INTERRUPT_DTLB_MISS SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   KVM_HANDLER BOOKE_INTERRUPT_ITLB_MISS SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   KVM_DBG_HANDLER BOOKE_INTERRUPT_DEBUG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0
> -KVM_HANDLER BOOKE_INTERRUPT_SPE_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> -KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> +KVM_HANDLER BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> +KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST SPRN_SPRG_RSCRATCH0 \
> +	SPRN_SRR0

Same thing here - just only trap SPE when CONFIG_KVM_E500V2 is available 
and trap altivec otherwise (to make sure we always have a handler).


Alex

>   KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_ROUND SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   _GLOBAL(kvmppc_handlers_end)
>   
> @@ -525,8 +526,8 @@ KVM_HANDLER_ADDR BOOKE_INTERRUPT_WATCHDOG
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_DTLB_MISS
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_ITLB_MISS
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_DEBUG
> -KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_UNAVAIL
> -KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_DATA
> +KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> +KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_ROUND
>   KVM_HANDLER_END /*Always keep this in end*/
>   
> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
> index a1712b8..ff73143 100644
> --- a/arch/powerpc/kvm/bookehv_interrupts.S
> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
> @@ -300,9 +300,9 @@ kvm_handler BOOKE_INTERRUPT_DTLB_MISS, EX_PARAMS_TLB, \
>   	SPRN_SRR0, SPRN_SRR1, (NEED_EMU | NEED_DEAR | NEED_ESR)
>   kvm_handler BOOKE_INTERRUPT_ITLB_MISS, EX_PARAMS_TLB, \
>   	SPRN_SRR0, SPRN_SRR1, 0
> -kvm_handler BOOKE_INTERRUPT_SPE_UNAVAIL, EX_PARAMS(GEN), \
> +kvm_handler BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
> -kvm_handler BOOKE_INTERRUPT_SPE_FP_DATA, EX_PARAMS(GEN), \
> +kvm_handler BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
>   kvm_handler BOOKE_INTERRUPT_SPE_FP_ROUND, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
> diff --git a/arch/powerpc/kvm/e500.c b/arch/powerpc/kvm/e500.c
> index 2e02ed8..3c1a30d 100644
> --- a/arch/powerpc/kvm/e500.c
> +++ b/arch/powerpc/kvm/e500.c
> @@ -383,8 +383,10 @@ static int kvmppc_core_get_sregs_e500(struct kvm_vcpu *vcpu,
>   	sregs->u.e.impl.fsl.hid0 = vcpu_e500->hid0;
>   	sregs->u.e.impl.fsl.mcar = vcpu_e500->mcar;
>   
> -	sregs->u.e.ivor_high[0] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL];
> -	sregs->u.e.ivor_high[1] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA];
> +	sregs->u.e.ivor_high[0] > +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL];
> +	sregs->u.e.ivor_high[1] > +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST];
>   	sregs->u.e.ivor_high[2] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND];
>   	sregs->u.e.ivor_high[3] >   		vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR];
> @@ -414,9 +416,9 @@ static int kvmppc_core_set_sregs_e500(struct kvm_vcpu *vcpu,
>   		return 0;
>   
>   	if (sregs->u.e.features & KVM_SREGS_E_SPE) {
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL] > +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL] >   			sregs->u.e.ivor_high[0];
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA] > +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST] >   			sregs->u.e.ivor_high[1];
>   		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND] >   			sregs->u.e.ivor_high[2];
> diff --git a/arch/powerpc/kvm/e500_emulate.c b/arch/powerpc/kvm/e500_emulate.c
> index 98a22e5..6a6833f 100644
> --- a/arch/powerpc/kvm/e500_emulate.c
> +++ b/arch/powerpc/kvm/e500_emulate.c
> @@ -256,10 +256,11 @@ int kvmppc_core_emulate_mtspr_e500(struct kvm_vcpu *vcpu, int sprn, ulong spr_va
>   
>   	/* extra exceptions */
>   	case SPRN_IVOR32:
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL] = spr_val;
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL] = spr_val;
>   		break;
>   	case SPRN_IVOR33:
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA] = spr_val;
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST] > +			spr_val;
>   		break;
>   	case SPRN_IVOR34:
>   		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND] = spr_val;
> @@ -378,10 +379,11 @@ int kvmppc_core_emulate_mfspr_e500(struct kvm_vcpu *vcpu, int sprn, ulong *spr_v
>   
>   	/* extra exceptions */
>   	case SPRN_IVOR32:
> -		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL];
> +		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL];
>   		break;
>   	case SPRN_IVOR33:
> -		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA];
> +		*spr_val > +		    vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST];
>   		break;
>   	case SPRN_IVOR34:
>   		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND];


WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: Mihai Caraman <mihai.caraman@freescale.com>, kvm-ppc@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org
Subject: Re: [PATCH 1/6 v2] KVM: PPC: Book3E: Use common defines for SPE/FP/AltiVec int numbers
Date: Thu, 03 Jul 2014 14:21:01 +0200	[thread overview]
Message-ID: <53B54AAD.4040609@suse.de> (raw)
In-Reply-To: <1404142497-6430-2-git-send-email-mihai.caraman@freescale.com>


On 30.06.14 17:34, Mihai Caraman wrote:
> Use common BOOKE_IRQPRIO and BOOKE_INTERRUPT defines for SPE/FP/AltiVec
> which share the same interrupt numbers.
>
> Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
> ---
> v2:
>   - remove outdated definitions
>
>   arch/powerpc/include/asm/kvm_asm.h    |  8 --------
>   arch/powerpc/kvm/booke.c              | 17 +++++++++--------
>   arch/powerpc/kvm/booke.h              |  4 ++--
>   arch/powerpc/kvm/booke_interrupts.S   |  9 +++++----
>   arch/powerpc/kvm/bookehv_interrupts.S |  4 ++--
>   arch/powerpc/kvm/e500.c               | 10 ++++++----
>   arch/powerpc/kvm/e500_emulate.c       | 10 ++++++----
>   7 files changed, 30 insertions(+), 32 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_asm.h b/arch/powerpc/include/asm/kvm_asm.h
> index 9601741..c94fd33 100644
> --- a/arch/powerpc/include/asm/kvm_asm.h
> +++ b/arch/powerpc/include/asm/kvm_asm.h
> @@ -56,14 +56,6 @@
>   /* E500 */
>   #define BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL 32
>   #define BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST 33
> -/*
> - * TODO: Unify 32-bit and 64-bit kernel exception handlers to use same defines
> - */
> -#define BOOKE_INTERRUPT_SPE_UNAVAIL BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> -#define BOOKE_INTERRUPT_SPE_FP_DATA BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST
> -#define BOOKE_INTERRUPT_ALTIVEC_UNAVAIL BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> -#define BOOKE_INTERRUPT_ALTIVEC_ASSIST \
> -				BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST

I think I'd prefer to keep them separate.

>   #define BOOKE_INTERRUPT_SPE_FP_ROUND 34
>   #define BOOKE_INTERRUPT_PERFORMANCE_MONITOR 35
>   #define BOOKE_INTERRUPT_DOORBELL 36
> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
> index ab62109..3c86d9b 100644
> --- a/arch/powerpc/kvm/booke.c
> +++ b/arch/powerpc/kvm/booke.c
> @@ -388,8 +388,8 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
>   	case BOOKE_IRQPRIO_ITLB_MISS:
>   	case BOOKE_IRQPRIO_SYSCALL:
>   	case BOOKE_IRQPRIO_FP_UNAVAIL:
> -	case BOOKE_IRQPRIO_SPE_UNAVAIL:
> -	case BOOKE_IRQPRIO_SPE_FP_DATA:
> +	case BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL:
> +	case BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST:

#ifdef CONFIG_KVM_E500V2
   case ...SPE:
#else
   case ..ALTIVEC:
#endif

>   	case BOOKE_IRQPRIO_SPE_FP_ROUND:
>   	case BOOKE_IRQPRIO_AP_UNAVAIL:
>   		allowed = 1;
> @@ -977,18 +977,19 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   		break;
>   
>   #ifdef CONFIG_SPE
> -	case BOOKE_INTERRUPT_SPE_UNAVAIL: {
> +	case BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL: {
>   		if (vcpu->arch.shared->msr & MSR_SPE)
>   			kvmppc_vcpu_enable_spe(vcpu);
>   		else
>   			kvmppc_booke_queue_irqprio(vcpu,
> -						   BOOKE_IRQPRIO_SPE_UNAVAIL);
> +				BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL);
>   		r = RESUME_GUEST;
>   		break;
>   	}
>   
> -	case BOOKE_INTERRUPT_SPE_FP_DATA:
> -		kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_SPE_FP_DATA);
> +	case BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST:
> +		kvmppc_booke_queue_irqprio(vcpu,
> +			BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST);
>   		r = RESUME_GUEST;
>   		break;
>   
> @@ -997,7 +998,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   		r = RESUME_GUEST;
>   		break;
>   #else
> -	case BOOKE_INTERRUPT_SPE_UNAVAIL:
> +	case BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL:
>   		/*
>   		 * Guest wants SPE, but host kernel doesn't support it.  Send
>   		 * an "unimplemented operation" program check to the guest.
> @@ -1010,7 +1011,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   	 * These really should never happen without CONFIG_SPE,
>   	 * as we should never enable the real MSR[SPE] in the guest.
>   	 */
> -	case BOOKE_INTERRUPT_SPE_FP_DATA:
> +	case BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST:
>   	case BOOKE_INTERRUPT_SPE_FP_ROUND:
>   		printk(KERN_CRIT "%s: unexpected SPE interrupt %u at %08lx\n",
>   		       __func__, exit_nr, vcpu->arch.pc);
> diff --git a/arch/powerpc/kvm/booke.h b/arch/powerpc/kvm/booke.h
> index b632cd3..f182b32 100644
> --- a/arch/powerpc/kvm/booke.h
> +++ b/arch/powerpc/kvm/booke.h
> @@ -32,8 +32,8 @@
>   #define BOOKE_IRQPRIO_ALIGNMENT 2
>   #define BOOKE_IRQPRIO_PROGRAM 3
>   #define BOOKE_IRQPRIO_FP_UNAVAIL 4
> -#define BOOKE_IRQPRIO_SPE_UNAVAIL 5
> -#define BOOKE_IRQPRIO_SPE_FP_DATA 6
> +#define BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL 5
> +#define BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST 6

#ifdef CONFIG_KVM_E500V2
#define ...SPE...
#else
#define ...ALTIVEC...
#endif

That way we can be 100% sure that no SPE cruft leaks into anything.


>   #define BOOKE_IRQPRIO_SPE_FP_ROUND 7
>   #define BOOKE_IRQPRIO_SYSCALL 8
>   #define BOOKE_IRQPRIO_AP_UNAVAIL 9
> diff --git a/arch/powerpc/kvm/booke_interrupts.S b/arch/powerpc/kvm/booke_interrupts.S
> index 2c6deb5ef..a275dc5 100644
> --- a/arch/powerpc/kvm/booke_interrupts.S
> +++ b/arch/powerpc/kvm/booke_interrupts.S
> @@ -137,8 +137,9 @@ KVM_HANDLER BOOKE_INTERRUPT_WATCHDOG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0
>   KVM_HANDLER BOOKE_INTERRUPT_DTLB_MISS SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   KVM_HANDLER BOOKE_INTERRUPT_ITLB_MISS SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   KVM_DBG_HANDLER BOOKE_INTERRUPT_DEBUG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0
> -KVM_HANDLER BOOKE_INTERRUPT_SPE_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> -KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> +KVM_HANDLER BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> +KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST SPRN_SPRG_RSCRATCH0 \
> +	SPRN_SRR0

Same thing here - just only trap SPE when CONFIG_KVM_E500V2 is available 
and trap altivec otherwise (to make sure we always have a handler).


Alex

>   KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_ROUND SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   _GLOBAL(kvmppc_handlers_end)
>   
> @@ -525,8 +526,8 @@ KVM_HANDLER_ADDR BOOKE_INTERRUPT_WATCHDOG
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_DTLB_MISS
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_ITLB_MISS
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_DEBUG
> -KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_UNAVAIL
> -KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_DATA
> +KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> +KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_ROUND
>   KVM_HANDLER_END /*Always keep this in end*/
>   
> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
> index a1712b8..ff73143 100644
> --- a/arch/powerpc/kvm/bookehv_interrupts.S
> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
> @@ -300,9 +300,9 @@ kvm_handler BOOKE_INTERRUPT_DTLB_MISS, EX_PARAMS_TLB, \
>   	SPRN_SRR0, SPRN_SRR1, (NEED_EMU | NEED_DEAR | NEED_ESR)
>   kvm_handler BOOKE_INTERRUPT_ITLB_MISS, EX_PARAMS_TLB, \
>   	SPRN_SRR0, SPRN_SRR1, 0
> -kvm_handler BOOKE_INTERRUPT_SPE_UNAVAIL, EX_PARAMS(GEN), \
> +kvm_handler BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
> -kvm_handler BOOKE_INTERRUPT_SPE_FP_DATA, EX_PARAMS(GEN), \
> +kvm_handler BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
>   kvm_handler BOOKE_INTERRUPT_SPE_FP_ROUND, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
> diff --git a/arch/powerpc/kvm/e500.c b/arch/powerpc/kvm/e500.c
> index 2e02ed8..3c1a30d 100644
> --- a/arch/powerpc/kvm/e500.c
> +++ b/arch/powerpc/kvm/e500.c
> @@ -383,8 +383,10 @@ static int kvmppc_core_get_sregs_e500(struct kvm_vcpu *vcpu,
>   	sregs->u.e.impl.fsl.hid0 = vcpu_e500->hid0;
>   	sregs->u.e.impl.fsl.mcar = vcpu_e500->mcar;
>   
> -	sregs->u.e.ivor_high[0] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL];
> -	sregs->u.e.ivor_high[1] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA];
> +	sregs->u.e.ivor_high[0] =
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL];
> +	sregs->u.e.ivor_high[1] =
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST];
>   	sregs->u.e.ivor_high[2] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND];
>   	sregs->u.e.ivor_high[3] =
>   		vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR];
> @@ -414,9 +416,9 @@ static int kvmppc_core_set_sregs_e500(struct kvm_vcpu *vcpu,
>   		return 0;
>   
>   	if (sregs->u.e.features & KVM_SREGS_E_SPE) {
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL] =
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL] =
>   			sregs->u.e.ivor_high[0];
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA] =
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST] =
>   			sregs->u.e.ivor_high[1];
>   		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND] =
>   			sregs->u.e.ivor_high[2];
> diff --git a/arch/powerpc/kvm/e500_emulate.c b/arch/powerpc/kvm/e500_emulate.c
> index 98a22e5..6a6833f 100644
> --- a/arch/powerpc/kvm/e500_emulate.c
> +++ b/arch/powerpc/kvm/e500_emulate.c
> @@ -256,10 +256,11 @@ int kvmppc_core_emulate_mtspr_e500(struct kvm_vcpu *vcpu, int sprn, ulong spr_va
>   
>   	/* extra exceptions */
>   	case SPRN_IVOR32:
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL] = spr_val;
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL] = spr_val;
>   		break;
>   	case SPRN_IVOR33:
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA] = spr_val;
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST] =
> +			spr_val;
>   		break;
>   	case SPRN_IVOR34:
>   		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND] = spr_val;
> @@ -378,10 +379,11 @@ int kvmppc_core_emulate_mfspr_e500(struct kvm_vcpu *vcpu, int sprn, ulong *spr_v
>   
>   	/* extra exceptions */
>   	case SPRN_IVOR32:
> -		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL];
> +		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL];
>   		break;
>   	case SPRN_IVOR33:
> -		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA];
> +		*spr_val =
> +		    vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST];
>   		break;
>   	case SPRN_IVOR34:
>   		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND];

WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: Mihai Caraman <mihai.caraman@freescale.com>, kvm-ppc@vger.kernel.org
Cc: kvm@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH 1/6 v2] KVM: PPC: Book3E: Use common defines for SPE/FP/AltiVec int numbers
Date: Thu, 03 Jul 2014 14:21:01 +0200	[thread overview]
Message-ID: <53B54AAD.4040609@suse.de> (raw)
In-Reply-To: <1404142497-6430-2-git-send-email-mihai.caraman@freescale.com>


On 30.06.14 17:34, Mihai Caraman wrote:
> Use common BOOKE_IRQPRIO and BOOKE_INTERRUPT defines for SPE/FP/AltiVec
> which share the same interrupt numbers.
>
> Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
> ---
> v2:
>   - remove outdated definitions
>
>   arch/powerpc/include/asm/kvm_asm.h    |  8 --------
>   arch/powerpc/kvm/booke.c              | 17 +++++++++--------
>   arch/powerpc/kvm/booke.h              |  4 ++--
>   arch/powerpc/kvm/booke_interrupts.S   |  9 +++++----
>   arch/powerpc/kvm/bookehv_interrupts.S |  4 ++--
>   arch/powerpc/kvm/e500.c               | 10 ++++++----
>   arch/powerpc/kvm/e500_emulate.c       | 10 ++++++----
>   7 files changed, 30 insertions(+), 32 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_asm.h b/arch/powerpc/include/asm/kvm_asm.h
> index 9601741..c94fd33 100644
> --- a/arch/powerpc/include/asm/kvm_asm.h
> +++ b/arch/powerpc/include/asm/kvm_asm.h
> @@ -56,14 +56,6 @@
>   /* E500 */
>   #define BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL 32
>   #define BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST 33
> -/*
> - * TODO: Unify 32-bit and 64-bit kernel exception handlers to use same defines
> - */
> -#define BOOKE_INTERRUPT_SPE_UNAVAIL BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> -#define BOOKE_INTERRUPT_SPE_FP_DATA BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST
> -#define BOOKE_INTERRUPT_ALTIVEC_UNAVAIL BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> -#define BOOKE_INTERRUPT_ALTIVEC_ASSIST \
> -				BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST

I think I'd prefer to keep them separate.

>   #define BOOKE_INTERRUPT_SPE_FP_ROUND 34
>   #define BOOKE_INTERRUPT_PERFORMANCE_MONITOR 35
>   #define BOOKE_INTERRUPT_DOORBELL 36
> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
> index ab62109..3c86d9b 100644
> --- a/arch/powerpc/kvm/booke.c
> +++ b/arch/powerpc/kvm/booke.c
> @@ -388,8 +388,8 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
>   	case BOOKE_IRQPRIO_ITLB_MISS:
>   	case BOOKE_IRQPRIO_SYSCALL:
>   	case BOOKE_IRQPRIO_FP_UNAVAIL:
> -	case BOOKE_IRQPRIO_SPE_UNAVAIL:
> -	case BOOKE_IRQPRIO_SPE_FP_DATA:
> +	case BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL:
> +	case BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST:

#ifdef CONFIG_KVM_E500V2
   case ...SPE:
#else
   case ..ALTIVEC:
#endif

>   	case BOOKE_IRQPRIO_SPE_FP_ROUND:
>   	case BOOKE_IRQPRIO_AP_UNAVAIL:
>   		allowed = 1;
> @@ -977,18 +977,19 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   		break;
>   
>   #ifdef CONFIG_SPE
> -	case BOOKE_INTERRUPT_SPE_UNAVAIL: {
> +	case BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL: {
>   		if (vcpu->arch.shared->msr & MSR_SPE)
>   			kvmppc_vcpu_enable_spe(vcpu);
>   		else
>   			kvmppc_booke_queue_irqprio(vcpu,
> -						   BOOKE_IRQPRIO_SPE_UNAVAIL);
> +				BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL);
>   		r = RESUME_GUEST;
>   		break;
>   	}
>   
> -	case BOOKE_INTERRUPT_SPE_FP_DATA:
> -		kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_SPE_FP_DATA);
> +	case BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST:
> +		kvmppc_booke_queue_irqprio(vcpu,
> +			BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST);
>   		r = RESUME_GUEST;
>   		break;
>   
> @@ -997,7 +998,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   		r = RESUME_GUEST;
>   		break;
>   #else
> -	case BOOKE_INTERRUPT_SPE_UNAVAIL:
> +	case BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL:
>   		/*
>   		 * Guest wants SPE, but host kernel doesn't support it.  Send
>   		 * an "unimplemented operation" program check to the guest.
> @@ -1010,7 +1011,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
>   	 * These really should never happen without CONFIG_SPE,
>   	 * as we should never enable the real MSR[SPE] in the guest.
>   	 */
> -	case BOOKE_INTERRUPT_SPE_FP_DATA:
> +	case BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST:
>   	case BOOKE_INTERRUPT_SPE_FP_ROUND:
>   		printk(KERN_CRIT "%s: unexpected SPE interrupt %u at %08lx\n",
>   		       __func__, exit_nr, vcpu->arch.pc);
> diff --git a/arch/powerpc/kvm/booke.h b/arch/powerpc/kvm/booke.h
> index b632cd3..f182b32 100644
> --- a/arch/powerpc/kvm/booke.h
> +++ b/arch/powerpc/kvm/booke.h
> @@ -32,8 +32,8 @@
>   #define BOOKE_IRQPRIO_ALIGNMENT 2
>   #define BOOKE_IRQPRIO_PROGRAM 3
>   #define BOOKE_IRQPRIO_FP_UNAVAIL 4
> -#define BOOKE_IRQPRIO_SPE_UNAVAIL 5
> -#define BOOKE_IRQPRIO_SPE_FP_DATA 6
> +#define BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL 5
> +#define BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST 6

#ifdef CONFIG_KVM_E500V2
#define ...SPE...
#else
#define ...ALTIVEC...
#endif

That way we can be 100% sure that no SPE cruft leaks into anything.


>   #define BOOKE_IRQPRIO_SPE_FP_ROUND 7
>   #define BOOKE_IRQPRIO_SYSCALL 8
>   #define BOOKE_IRQPRIO_AP_UNAVAIL 9
> diff --git a/arch/powerpc/kvm/booke_interrupts.S b/arch/powerpc/kvm/booke_interrupts.S
> index 2c6deb5ef..a275dc5 100644
> --- a/arch/powerpc/kvm/booke_interrupts.S
> +++ b/arch/powerpc/kvm/booke_interrupts.S
> @@ -137,8 +137,9 @@ KVM_HANDLER BOOKE_INTERRUPT_WATCHDOG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0
>   KVM_HANDLER BOOKE_INTERRUPT_DTLB_MISS SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   KVM_HANDLER BOOKE_INTERRUPT_ITLB_MISS SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   KVM_DBG_HANDLER BOOKE_INTERRUPT_DEBUG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0
> -KVM_HANDLER BOOKE_INTERRUPT_SPE_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> -KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> +KVM_HANDLER BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0
> +KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST SPRN_SPRG_RSCRATCH0 \
> +	SPRN_SRR0

Same thing here - just only trap SPE when CONFIG_KVM_E500V2 is available 
and trap altivec otherwise (to make sure we always have a handler).


Alex

>   KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_ROUND SPRN_SPRG_RSCRATCH0 SPRN_SRR0
>   _GLOBAL(kvmppc_handlers_end)
>   
> @@ -525,8 +526,8 @@ KVM_HANDLER_ADDR BOOKE_INTERRUPT_WATCHDOG
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_DTLB_MISS
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_ITLB_MISS
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_DEBUG
> -KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_UNAVAIL
> -KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_DATA
> +KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL
> +KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST
>   KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_ROUND
>   KVM_HANDLER_END /*Always keep this in end*/
>   
> diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S
> index a1712b8..ff73143 100644
> --- a/arch/powerpc/kvm/bookehv_interrupts.S
> +++ b/arch/powerpc/kvm/bookehv_interrupts.S
> @@ -300,9 +300,9 @@ kvm_handler BOOKE_INTERRUPT_DTLB_MISS, EX_PARAMS_TLB, \
>   	SPRN_SRR0, SPRN_SRR1, (NEED_EMU | NEED_DEAR | NEED_ESR)
>   kvm_handler BOOKE_INTERRUPT_ITLB_MISS, EX_PARAMS_TLB, \
>   	SPRN_SRR0, SPRN_SRR1, 0
> -kvm_handler BOOKE_INTERRUPT_SPE_UNAVAIL, EX_PARAMS(GEN), \
> +kvm_handler BOOKE_INTERRUPT_SPE_ALTIVEC_UNAVAIL, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
> -kvm_handler BOOKE_INTERRUPT_SPE_FP_DATA, EX_PARAMS(GEN), \
> +kvm_handler BOOKE_INTERRUPT_SPE_FP_DATA_ALTIVEC_ASSIST, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
>   kvm_handler BOOKE_INTERRUPT_SPE_FP_ROUND, EX_PARAMS(GEN), \
>   	SPRN_SRR0, SPRN_SRR1, 0
> diff --git a/arch/powerpc/kvm/e500.c b/arch/powerpc/kvm/e500.c
> index 2e02ed8..3c1a30d 100644
> --- a/arch/powerpc/kvm/e500.c
> +++ b/arch/powerpc/kvm/e500.c
> @@ -383,8 +383,10 @@ static int kvmppc_core_get_sregs_e500(struct kvm_vcpu *vcpu,
>   	sregs->u.e.impl.fsl.hid0 = vcpu_e500->hid0;
>   	sregs->u.e.impl.fsl.mcar = vcpu_e500->mcar;
>   
> -	sregs->u.e.ivor_high[0] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL];
> -	sregs->u.e.ivor_high[1] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA];
> +	sregs->u.e.ivor_high[0] =
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL];
> +	sregs->u.e.ivor_high[1] =
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST];
>   	sregs->u.e.ivor_high[2] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND];
>   	sregs->u.e.ivor_high[3] =
>   		vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR];
> @@ -414,9 +416,9 @@ static int kvmppc_core_set_sregs_e500(struct kvm_vcpu *vcpu,
>   		return 0;
>   
>   	if (sregs->u.e.features & KVM_SREGS_E_SPE) {
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL] =
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL] =
>   			sregs->u.e.ivor_high[0];
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA] =
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST] =
>   			sregs->u.e.ivor_high[1];
>   		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND] =
>   			sregs->u.e.ivor_high[2];
> diff --git a/arch/powerpc/kvm/e500_emulate.c b/arch/powerpc/kvm/e500_emulate.c
> index 98a22e5..6a6833f 100644
> --- a/arch/powerpc/kvm/e500_emulate.c
> +++ b/arch/powerpc/kvm/e500_emulate.c
> @@ -256,10 +256,11 @@ int kvmppc_core_emulate_mtspr_e500(struct kvm_vcpu *vcpu, int sprn, ulong spr_va
>   
>   	/* extra exceptions */
>   	case SPRN_IVOR32:
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL] = spr_val;
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL] = spr_val;
>   		break;
>   	case SPRN_IVOR33:
> -		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA] = spr_val;
> +		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST] =
> +			spr_val;
>   		break;
>   	case SPRN_IVOR34:
>   		vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND] = spr_val;
> @@ -378,10 +379,11 @@ int kvmppc_core_emulate_mfspr_e500(struct kvm_vcpu *vcpu, int sprn, ulong *spr_v
>   
>   	/* extra exceptions */
>   	case SPRN_IVOR32:
> -		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL];
> +		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_ALTIVEC_UNAVAIL];
>   		break;
>   	case SPRN_IVOR33:
> -		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA];
> +		*spr_val =
> +		    vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA_ALTIVEC_ASSIST];
>   		break;
>   	case SPRN_IVOR34:
>   		*spr_val = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND];

  reply	other threads:[~2014-07-03 12:21 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-30 15:34 [PATCH 0/6 v2] KVM: PPC: Book3e: AltiVec support Mihai Caraman
2014-06-30 15:34 ` Mihai Caraman
2014-06-30 15:34 ` Mihai Caraman
2014-06-30 15:34 ` [PATCH 1/6 v2] KVM: PPC: Book3E: Use common defines for SPE/FP/AltiVec int numbers Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-07-03 12:21   ` Alexander Graf [this message]
2014-07-03 12:21     ` Alexander Graf
2014-07-03 12:21     ` Alexander Graf
2014-07-03 15:25     ` mihai.caraman
2014-07-03 15:25       ` mihai.caraman
2014-07-03 15:25       ` mihai.caraman
2014-07-03 15:30       ` Alexander Graf
2014-07-03 15:30         ` Alexander Graf
2014-07-03 15:30         ` Alexander Graf
2014-07-03 15:53         ` mihai.caraman
2014-07-03 15:53           ` mihai.caraman
2014-07-03 15:53           ` mihai.caraman
2014-07-03 22:15       ` Scott Wood
2014-07-03 22:15         ` Scott Wood
2014-07-03 22:15         ` Scott Wood
2014-07-03 22:31         ` Scott Wood
2014-07-03 22:31           ` Scott Wood
2014-07-03 22:31           ` Scott Wood
2014-07-03 22:35           ` Alexander Graf
2014-07-03 22:35             ` Alexander Graf
2014-07-03 22:35             ` Alexander Graf
2014-07-03 23:00             ` Scott Wood
2014-07-03 23:00               ` Scott Wood
2014-07-03 23:00               ` Scott Wood
2014-07-03 23:02               ` Alexander Graf
2014-07-03 23:02                 ` Alexander Graf
2014-07-03 23:02                 ` Alexander Graf
2014-07-03 22:31         ` Alexander Graf
2014-07-03 22:31           ` Alexander Graf
2014-07-03 22:31           ` Alexander Graf
2014-07-21 13:23     ` mihai.caraman
2014-07-21 13:23       ` mihai.caraman
2014-07-24  9:16       ` mihai.caraman
2014-07-24  9:16         ` mihai.caraman
2014-07-26  0:10         ` Scott Wood
2014-07-26  0:10           ` Scott Wood
2014-07-26  0:10           ` Scott Wood
2014-07-28  8:54           ` mihai.caraman
2014-07-28  8:54             ` mihai.caraman
2014-07-28  8:54             ` mihai.caraman
2014-07-28 22:42             ` Scott Wood
2014-07-28 22:42               ` Scott Wood
2014-07-28 22:42               ` Scott Wood
2014-06-30 15:34 ` [PATCH 2/6 v2] KVM: PPC: Book3E: Refactor SPE/FP exit handling Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-07-03 12:21   ` Alexander Graf
2014-07-03 12:21     ` Alexander Graf
2014-07-03 12:21     ` Alexander Graf
2014-06-30 15:34 ` [PATCH 3/6 v2] KVM: PPC: Book3E: Increase FPU laziness Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-07-03 12:28   ` Alexander Graf
2014-07-03 12:28     ` Alexander Graf
2014-07-03 12:28     ` Alexander Graf
2014-07-03 15:46     ` mihai.caraman
2014-07-03 15:46       ` mihai.caraman
2014-07-03 15:46       ` mihai.caraman
2014-07-04  7:46       ` Alexander Graf
2014-07-04  7:46         ` Alexander Graf
2014-07-04  7:46         ` Alexander Graf
2014-07-04  7:52         ` Alexander Graf
2014-07-04  7:52           ` Alexander Graf
2014-07-04  7:52           ` Alexander Graf
2014-06-30 15:34 ` [PATCH 4/6 v2] KVM: PPC: Book3E: Add AltiVec support Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-07-03 12:32   ` Alexander Graf
2014-07-03 12:32     ` Alexander Graf
2014-07-03 12:32     ` Alexander Graf
2014-07-03 15:58     ` mihai.caraman
2014-07-03 15:58       ` mihai.caraman
2014-07-03 15:58       ` mihai.caraman
2014-07-03 23:07   ` Scott Wood
2014-07-03 23:07     ` Scott Wood
2014-07-03 23:07     ` Scott Wood
2014-06-30 15:34 ` [PATCH 5/6 v2] KVM: PPC: Book3E: Add ONE_REG " Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-07-03 12:33   ` Alexander Graf
2014-07-03 12:33     ` Alexander Graf
2014-07-03 12:33     ` Alexander Graf
2014-07-03 16:11     ` mihai.caraman
2014-07-03 16:11       ` mihai.caraman
2014-07-03 16:11       ` mihai.caraman
2014-07-04  7:54       ` Alexander Graf
2014-07-04  7:54         ` Alexander Graf
2014-07-04  7:54         ` Alexander Graf
2014-06-30 15:34 ` [PATCH 6/6 v2] KVM: PPC: Book3E: Enable e6500 core Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman
2014-06-30 15:34   ` Mihai Caraman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53B54AAD.4040609@suse.de \
    --to=agraf@suse.de \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mihai.caraman@freescale.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.