diff mbox

[3/3] arm64/kvm: use alternative auto-nop

Message ID 1473242830-26246-4-git-send-email-mark.rutland@arm.com
State New
Headers show

Commit Message

Mark Rutland Sept. 7, 2016, 10:07 a.m. UTC
Make use of the new alternative_if and alternative_else_nop_endif and
get rid of our homebew NOP sleds, making the code simpler to read.

Note that for __kvm_call_hyp the branch to __vhe_hyp_call has been moved
out of the alternative sequence, and in the default case there will be
four additional NOPs executed.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>

Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Christoffer Dall <christoffer.dall@linaro.org>
Cc: kvmarm@lists.cs.columbia.edu
---
 arch/arm64/include/asm/kvm_mmu.h | 10 +++-------
 arch/arm64/kvm/hyp.S             |  6 +-----
 2 files changed, 4 insertions(+), 12 deletions(-)

-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Comments

Christoffer Dall Sept. 8, 2016, 11:16 a.m. UTC | #1
On Wed, Sep 07, 2016 at 11:07:10AM +0100, Mark Rutland wrote:
> Make use of the new alternative_if and alternative_else_nop_endif and

> get rid of our homebew NOP sleds, making the code simpler to read.


homebew?

> 

> Note that for __kvm_call_hyp the branch to __vhe_hyp_call has been moved

> out of the alternative sequence, and in the default case there will be

> four additional NOPs executed.

> 

> Signed-off-by: Mark Rutland <mark.rutland@arm.com>

> Cc: Marc Zyngier <marc.zyngier@arm.com>

> Cc: Christoffer Dall <christoffer.dall@linaro.org>

> Cc: kvmarm@lists.cs.columbia.edu


Acked-by: Christoffer Dall <christoffer.dall@linaro.org>


> ---

>  arch/arm64/include/asm/kvm_mmu.h | 10 +++-------

>  arch/arm64/kvm/hyp.S             |  6 +-----

>  2 files changed, 4 insertions(+), 12 deletions(-)

> 

> diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h

> index b6bb834..dff1098 100644

> --- a/arch/arm64/include/asm/kvm_mmu.h

> +++ b/arch/arm64/include/asm/kvm_mmu.h

> @@ -99,14 +99,10 @@

>  .macro kern_hyp_va	reg

>  alternative_if_not ARM64_HAS_VIRT_HOST_EXTN

>  	and     \reg, \reg, #HYP_PAGE_OFFSET_HIGH_MASK

> -alternative_else

> -	nop

> -alternative_endif

> -alternative_if_not ARM64_HYP_OFFSET_LOW

> -	nop

> -alternative_else

> +alternative_else_nop_endif

> +alternative_if ARM64_HYP_OFFSET_LOW

>  	and     \reg, \reg, #HYP_PAGE_OFFSET_LOW_MASK

> -alternative_endif

> +alternative_else_nop_endif

>  .endm

>  

>  #else

> diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S

> index 7ce9315..2726635 100644

> --- a/arch/arm64/kvm/hyp.S

> +++ b/arch/arm64/kvm/hyp.S

> @@ -46,10 +46,6 @@ alternative_if_not ARM64_HAS_VIRT_HOST_EXTN

>  	hvc	#0

>  	ldr     lr, [sp], #16

>  	ret

> -alternative_else

> +alternative_else_nop_endif

>  	b	__vhe_hyp_call

> -	nop

> -	nop

> -	nop

> -alternative_endif

>  ENDPROC(__kvm_call_hyp)

> -- 

> 1.9.1

> 


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Mark Rutland Sept. 8, 2016, 11:33 a.m. UTC | #2
On Thu, Sep 08, 2016 at 01:16:48PM +0200, Christoffer Dall wrote:
> On Wed, Sep 07, 2016 at 11:07:10AM +0100, Mark Rutland wrote:

> > Make use of the new alternative_if and alternative_else_nop_endif and

> > get rid of our homebew NOP sleds, making the code simpler to read.

> 

> homebew?


Whoops. Should have been 'homebrew', though I'll change that to
'open-coded' to make this clearer.

> > Note that for __kvm_call_hyp the branch to __vhe_hyp_call has been moved

> > out of the alternative sequence, and in the default case there will be

> > four additional NOPs executed.

> > 

> > Signed-off-by: Mark Rutland <mark.rutland@arm.com>

> > Cc: Marc Zyngier <marc.zyngier@arm.com>

> > Cc: Christoffer Dall <christoffer.dall@linaro.org>

> > Cc: kvmarm@lists.cs.columbia.edu

> 

> Acked-by: Christoffer Dall <christoffer.dall@linaro.org>


Cheers!

Mark.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff mbox

Patch

diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h
index b6bb834..dff1098 100644
--- a/arch/arm64/include/asm/kvm_mmu.h
+++ b/arch/arm64/include/asm/kvm_mmu.h
@@ -99,14 +99,10 @@ 
 .macro kern_hyp_va	reg
 alternative_if_not ARM64_HAS_VIRT_HOST_EXTN
 	and     \reg, \reg, #HYP_PAGE_OFFSET_HIGH_MASK
-alternative_else
-	nop
-alternative_endif
-alternative_if_not ARM64_HYP_OFFSET_LOW
-	nop
-alternative_else
+alternative_else_nop_endif
+alternative_if ARM64_HYP_OFFSET_LOW
 	and     \reg, \reg, #HYP_PAGE_OFFSET_LOW_MASK
-alternative_endif
+alternative_else_nop_endif
 .endm
 
 #else
diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S
index 7ce9315..2726635 100644
--- a/arch/arm64/kvm/hyp.S
+++ b/arch/arm64/kvm/hyp.S
@@ -46,10 +46,6 @@  alternative_if_not ARM64_HAS_VIRT_HOST_EXTN
 	hvc	#0
 	ldr     lr, [sp], #16
 	ret
-alternative_else
+alternative_else_nop_endif
 	b	__vhe_hyp_call
-	nop
-	nop
-	nop
-alternative_endif
 ENDPROC(__kvm_call_hyp)