diff mbox

target-ppc: fix sync of SPR_SDR1 with KVM

Message ID 20160301180310.13357.91023.stgit@bahia.huguette.org (mailing list archive)
State New, archived
Headers show

Commit Message

Greg Kurz March 1, 2016, 6:03 p.m. UTC
The gdbstub can't access guest memory with current master. This is what you
get in gdb:

0x00000000100009b8 in main (argc=<error reading variable: Cannot access memory
at address 0x3fffce4d3620>, argv=<error reading variable: Cannot access memory
at address 0x3fffce4d3628>) at fp.c:11

Bisect leads to the following commit:

commit fa48b4328c39b2532e47efcfcba6d4031512f514
Author: David Gibson <david@gibson.dropbear.id.au>
Date:   Tue Feb 9 09:30:21 2016 +1000

    target-ppc: Remove hack for ppc_hash64_load_hpte*() with HV KVM

Looking at the env->external_htab users, I've spotted a behaviour change in
kvm_arch_get_registers(), which now always calls ppc_store_sdr1().

Checking kvmppc_kern_htab, like it is done in the MMU helpers, fixes the
issue.

Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
---
 target-ppc/kvm.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Gibson March 2, 2016, 12:06 a.m. UTC | #1
On Tue, Mar 01, 2016 at 07:03:10PM +0100, Greg Kurz wrote:
> The gdbstub can't access guest memory with current master. This is what you
> get in gdb:
> 
> 0x00000000100009b8 in main (argc=<error reading variable: Cannot access memory
> at address 0x3fffce4d3620>, argv=<error reading variable: Cannot access memory
> at address 0x3fffce4d3628>) at fp.c:11
> 
> Bisect leads to the following commit:
> 
> commit fa48b4328c39b2532e47efcfcba6d4031512f514
> Author: David Gibson <david@gibson.dropbear.id.au>
> Date:   Tue Feb 9 09:30:21 2016 +1000
> 
>     target-ppc: Remove hack for ppc_hash64_load_hpte*() with HV KVM
> 
> Looking at the env->external_htab users, I've spotted a behaviour change in
> kvm_arch_get_registers(), which now always calls ppc_store_sdr1().
> 
> Checking kvmppc_kern_htab, like it is done in the MMU helpers, fixes the
> issue.
> 
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>

Mea culpa.  Good catch, applied to ppc-for-2.6, thanks.


> ---
>  target-ppc/kvm.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> index d67c169ba324..dbc37f25af2b 100644
> --- a/target-ppc/kvm.c
> +++ b/target-ppc/kvm.c
> @@ -1190,7 +1190,7 @@ int kvm_arch_get_registers(CPUState *cs)
>              return ret;
>          }
>  
> -        if (!env->external_htab) {
> +        if (!kvmppc_kern_htab && !env->external_htab) {
>              ppc_store_sdr1(env, sregs.u.s.sdr1);
>          }
>  
>
David Gibson March 3, 2016, 4:35 a.m. UTC | #2
On Wed, Mar 02, 2016 at 11:06:19AM +1100, David Gibson wrote:
> On Tue, Mar 01, 2016 at 07:03:10PM +0100, Greg Kurz wrote:
> > The gdbstub can't access guest memory with current master. This is what you
> > get in gdb:
> > 
> > 0x00000000100009b8 in main (argc=<error reading variable: Cannot access memory
> > at address 0x3fffce4d3620>, argv=<error reading variable: Cannot access memory
> > at address 0x3fffce4d3628>) at fp.c:11
> > 
> > Bisect leads to the following commit:
> > 
> > commit fa48b4328c39b2532e47efcfcba6d4031512f514
> > Author: David Gibson <david@gibson.dropbear.id.au>
> > Date:   Tue Feb 9 09:30:21 2016 +1000
> > 
> >     target-ppc: Remove hack for ppc_hash64_load_hpte*() with HV KVM
> > 
> > Looking at the env->external_htab users, I've spotted a behaviour change in
> > kvm_arch_get_registers(), which now always calls ppc_store_sdr1().
> > 
> > Checking kvmppc_kern_htab, like it is done in the MMU helpers, fixes the
> > issue.
> > 
> > Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> 
> Mea culpa.  Good catch, applied to ppc-for-2.6, thanks.

Ah.. wait.. this patch breaks compile for the ppc32 target.  Can you
fix this please.

> > ---
> >  target-ppc/kvm.c |    2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> > index d67c169ba324..dbc37f25af2b 100644
> > --- a/target-ppc/kvm.c
> > +++ b/target-ppc/kvm.c
> > @@ -1190,7 +1190,7 @@ int kvm_arch_get_registers(CPUState *cs)
> >              return ret;
> >          }
> >  
> > -        if (!env->external_htab) {
> > +        if (!kvmppc_kern_htab && !env->external_htab) {
> >              ppc_store_sdr1(env, sregs.u.s.sdr1);
> >          }
> >  
> > 
>
Greg Kurz March 3, 2016, 11:45 p.m. UTC | #3
On Thu, 3 Mar 2016 15:35:07 +1100
David Gibson <david@gibson.dropbear.id.au> wrote:

> On Wed, Mar 02, 2016 at 11:06:19AM +1100, David Gibson wrote:
> > On Tue, Mar 01, 2016 at 07:03:10PM +0100, Greg Kurz wrote:  
> > > The gdbstub can't access guest memory with current master. This is what you
> > > get in gdb:
> > > 
> > > 0x00000000100009b8 in main (argc=<error reading variable: Cannot access memory
> > > at address 0x3fffce4d3620>, argv=<error reading variable: Cannot access memory
> > > at address 0x3fffce4d3628>) at fp.c:11
> > > 
> > > Bisect leads to the following commit:
> > > 
> > > commit fa48b4328c39b2532e47efcfcba6d4031512f514
> > > Author: David Gibson <david@gibson.dropbear.id.au>
> > > Date:   Tue Feb 9 09:30:21 2016 +1000
> > > 
> > >     target-ppc: Remove hack for ppc_hash64_load_hpte*() with HV KVM
> > > 
> > > Looking at the env->external_htab users, I've spotted a behaviour change in
> > > kvm_arch_get_registers(), which now always calls ppc_store_sdr1().
> > > 
> > > Checking kvmppc_kern_htab, like it is done in the MMU helpers, fixes the
> > > issue.
> > > 
> > > Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>  
> > 
> > Mea culpa.  Good catch, applied to ppc-for-2.6, thanks.  
> 
> Ah.. wait.. this patch breaks compile for the ppc32 target.  Can you
> fix this please.
> 

Oops... I'm on vacation this week. Not sure I can find time before next monday... :\

> > > ---
> > >  target-ppc/kvm.c |    2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> > > index d67c169ba324..dbc37f25af2b 100644
> > > --- a/target-ppc/kvm.c
> > > +++ b/target-ppc/kvm.c
> > > @@ -1190,7 +1190,7 @@ int kvm_arch_get_registers(CPUState *cs)
> > >              return ret;
> > >          }
> > >  
> > > -        if (!env->external_htab) {
> > > +        if (!kvmppc_kern_htab && !env->external_htab) {
> > >              ppc_store_sdr1(env, sregs.u.s.sdr1);
> > >          }
> > >  
> > >   
> >   
> 
> 
>
David Gibson March 4, 2016, 2:39 a.m. UTC | #4
On Fri, Mar 04, 2016 at 12:45:29AM +0100, Greg Kurz wrote:
> On Thu, 3 Mar 2016 15:35:07 +1100
> David Gibson <david@gibson.dropbear.id.au> wrote:
> 
> > On Wed, Mar 02, 2016 at 11:06:19AM +1100, David Gibson wrote:
> > > On Tue, Mar 01, 2016 at 07:03:10PM +0100, Greg Kurz wrote:  
> > > > The gdbstub can't access guest memory with current master. This is what you
> > > > get in gdb:
> > > > 
> > > > 0x00000000100009b8 in main (argc=<error reading variable: Cannot access memory
> > > > at address 0x3fffce4d3620>, argv=<error reading variable: Cannot access memory
> > > > at address 0x3fffce4d3628>) at fp.c:11
> > > > 
> > > > Bisect leads to the following commit:
> > > > 
> > > > commit fa48b4328c39b2532e47efcfcba6d4031512f514
> > > > Author: David Gibson <david@gibson.dropbear.id.au>
> > > > Date:   Tue Feb 9 09:30:21 2016 +1000
> > > > 
> > > >     target-ppc: Remove hack for ppc_hash64_load_hpte*() with HV KVM
> > > > 
> > > > Looking at the env->external_htab users, I've spotted a behaviour change in
> > > > kvm_arch_get_registers(), which now always calls ppc_store_sdr1().
> > > > 
> > > > Checking kvmppc_kern_htab, like it is done in the MMU helpers, fixes the
> > > > issue.
> > > > 
> > > > Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>  
> > > 
> > > Mea culpa.  Good catch, applied to ppc-for-2.6, thanks.  
> > 
> > Ah.. wait.. this patch breaks compile for the ppc32 target.  Can you
> > fix this please.
> > 
> 
> Oops... I'm on vacation this week. Not sure I can find time before
> next monday... :\

Ok.  I've had a closer look and realized that the earlier commit
(fa48b43) was basically a bad idea.  I'll shortly post something to
accomplish its aims in a different and better way.

> 
> > > > ---
> > > >  target-ppc/kvm.c |    2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > > 
> > > > diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> > > > index d67c169ba324..dbc37f25af2b 100644
> > > > --- a/target-ppc/kvm.c
> > > > +++ b/target-ppc/kvm.c
> > > > @@ -1190,7 +1190,7 @@ int kvm_arch_get_registers(CPUState *cs)
> > > >              return ret;
> > > >          }
> > > >  
> > > > -        if (!env->external_htab) {
> > > > +        if (!kvmppc_kern_htab && !env->external_htab) {
> > > >              ppc_store_sdr1(env, sregs.u.s.sdr1);
> > > >          }
> > > >  
> > > >   
> > >   
> > 
> > 
> > 
>
diff mbox

Patch

diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index d67c169ba324..dbc37f25af2b 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -1190,7 +1190,7 @@  int kvm_arch_get_registers(CPUState *cs)
             return ret;
         }
 
-        if (!env->external_htab) {
+        if (!kvmppc_kern_htab && !env->external_htab) {
             ppc_store_sdr1(env, sregs.u.s.sdr1);
         }