On Thu, May 15, 2014 at 02:43:53PM +0200, Alexander Graf wrote:
> On LPAR guest systems Linux enables the shadow SLB to indicate to the
> hypervisor a number of SLB entries that always have to be available.
> 
> Today we go through this shadow SLB and disable all ESID's valid bits.
> However, pHyp doesn't like this approach very much and honors us with
> fancy machine checks.
> 
> Fortunately the shadow SLB descriptor also has an entry that indicates
> the number of valid entries following. During the lifetime of a guest
> we can just swap that value to 0 and don't have to worry about the
> SLB restoration magic.

I think this is a great idea; I have been thinking we should do
something like this.

> While we're touching the code, let's also make it more readable (get
> rid of rldicl), allow it to deal with a dynamic number of bolted
> SLB entries and only do shadow SLB swizzling on LPAR systems.
> 
> Signed-off-by: Alexander Graf <[email protected]>

[snip]

> +#define SHADOW_SLB_ENTRY_LEN 0x10

Normally we'd define structure offsets/sizes like this in
asm-offsets.c.  However, since the structure can't change I guess this
is OK.

>       /* Fill SLB with our shadow */
>  
> +     lis     r7, SLB_ESID_V@h
> +
>       lbz     r12, SVCPU_SLB_MAX(r3)
>       mulli   r12, r12, 16
>       addi    r12, r12, SVCPU_SLB
> @@ -99,7 +76,7 @@ slb_loop_enter:
>  
>       ld      r10, 0(r11)
>  
> -     rldicl. r0, r10, 37, 63
> +     and.    r9, r10, r7

Or...
        andis.  r9, r10, SLB_ESID_V@h
and save a register and an instruction.

>       cmpd    cr0, r11, r12
>       blt     slb_loop_enter
>  
> +     isync
> +     sync

Why?

> +BEGIN_FW_FTR_SECTION
> +
> +     /* Declare SLB shadow as SLB_NUM_BOLTED entries big */
> +
> +     li      r8, SLB_NUM_BOLTED
> +     stb     r8, 3(r11)

Currently it's true that slb_shadow.persistent is always
SLB_NUM_BOLTED, but if you are going to embed that assumption here in
the KVM code you should at least add some comments over in
arch/powerpc/mm/slb.c and in arch/powerpc/kernel/paca.c (where
slb_shadow.persistent gets initialized) warning people that if they
break that assumption they need to fix KVM code as well.

Paul.
--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to