On Fri, Oct 05, 2012 at 04:36:46AM +0200, Alexander Graf wrote: > In the sregs API, upper and lower 32bit segments of the BAT registers > are swapped when doing a set. Since we need to support old kernels out > there, don't bother to fix it in the kernel, but instead work around > the problem in QEMU by swapping on put. > > Signed-off-by: Alexander Graf <[email protected]> > --- > target-ppc/kvm.c | 9 +++++---- > 1 files changed, 5 insertions(+), 4 deletions(-) > > diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c > index 1975323..93c5bb7 100644 > --- a/target-ppc/kvm.c > +++ b/target-ppc/kvm.c > @@ -493,10 +493,11 @@ int kvm_arch_put_registers(CPUPPCState *env, int level) > > /* Sync BATs */ > for (i = 0; i < 8; i++) { > - sregs.u.s.ppc32.dbat[i] = ((uint64_t)env->DBAT[1][i] << 32) > - | env->DBAT[0][i]; > - sregs.u.s.ppc32.ibat[i] = ((uint64_t)env->IBAT[1][i] << 32) > - | env->IBAT[0][i]; > + /* Beware. We have to swap upper and lower bits here */ > + sregs.u.s.ppc32.dbat[i] = ((uint64_t)env->DBAT[0][i] << 32) > + | env->DBAT[1][i]; > + sregs.u.s.ppc32.ibat[i] = ((uint64_t)env->IBAT[0][i] << 32) > + | env->IBAT[1][i]; > } > > ret = kvm_vcpu_ioctl(env, KVM_SET_SREGS, &sregs);
Applied (actually as part of the PPC pull). -- Aurelien Jarno GPG: 1024D/F1BCDB73 [email protected] http://www.aurel32.net
