From: Olof Johansson We need to indicate to the hypervisor that it needs to save our VMX registers when switching partitions on a shared-processor system, just as it needs to for FP and PMC registers. This could be made to be on-demand when VMX is used, but we don't do that for FP nor PMC right now either so let's not overcomplicate things. Signed-off-by: Olof Johansson Cc: Paul Mackerras Cc: Anton Blanchard Cc: Signed-off-by: Andrew Morton --- arch/ppc64/kernel/pSeries_lpar.c | 4 ++++ arch/ppc64/kernel/pacaData.c | 1 + include/asm-ppc64/lppaca.h | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff -puN arch/ppc64/kernel/pacaData.c~ppc64-add-vmx-save-flag-to-vpa arch/ppc64/kernel/pacaData.c --- devel/arch/ppc64/kernel/pacaData.c~ppc64-add-vmx-save-flag-to-vpa 2005-08-05 01:03:09.000000000 -0700 +++ devel-akpm/arch/ppc64/kernel/pacaData.c 2005-08-05 01:03:09.000000000 -0700 @@ -59,6 +59,7 @@ extern unsigned long __toc_start; .fpregs_in_use = 1, \ .end_of_quantum = 0xfffffffffffffffful, \ .slb_count = 64, \ + .vmxregs_in_use = 0, \ }, \ #ifdef CONFIG_PPC_ISERIES diff -puN arch/ppc64/kernel/pSeries_lpar.c~ppc64-add-vmx-save-flag-to-vpa arch/ppc64/kernel/pSeries_lpar.c --- devel/arch/ppc64/kernel/pSeries_lpar.c~ppc64-add-vmx-save-flag-to-vpa 2005-08-05 01:03:09.000000000 -0700 +++ devel-akpm/arch/ppc64/kernel/pSeries_lpar.c 2005-08-05 01:03:09.000000000 -0700 @@ -267,6 +267,10 @@ void vpa_init(int cpu) /* Register the Virtual Processor Area (VPA) */ flags = 1UL << (63 - 18); + + if (cpu_has_feature(CPU_FTR_ALTIVEC)) + paca[cpu].lppaca.vmxregs_in_use = 1; + ret = register_vpa(flags, hwcpu, __pa(vpa)); if (ret) diff -puN include/asm-ppc64/lppaca.h~ppc64-add-vmx-save-flag-to-vpa include/asm-ppc64/lppaca.h --- devel/include/asm-ppc64/lppaca.h~ppc64-add-vmx-save-flag-to-vpa 2005-08-05 01:03:09.000000000 -0700 +++ devel-akpm/include/asm-ppc64/lppaca.h 2005-08-05 01:03:09.000000000 -0700 @@ -108,7 +108,7 @@ struct lppaca volatile u32 virtual_decr; // Virtual DECR for shared procsx78-x7B u16 slb_count; // # of SLBs to maintain x7C-x7D u8 idle; // Indicate OS is idle x7E - u8 reserved5; // Reserved x7F + u8 vmxregs_in_use; // VMX registers in use x7F //============================================================================= _