[prev in list] [next in list] [prev in thread] [next in thread] 

List:       qemu-devel
Subject:    Re: [Qemu-devel] [PATCH -V4 1/4] target-ppc: Update slb array with correct index values.
From:       Alexander Graf <agraf () suse ! de>
Date:       2013-09-30 17:40:53
Message-ID: 5249B7A5.1000703 () suse ! de
[Download RAW message or body]

On 09/25/2013 05:41 PM, Aneesh Kumar K.V wrote:
> Hi Alex,
>
> Any update on this ?

The patch itself never made it to the qemu-devel mailing list which I 
pull things off of (through patchworks). Please resend.


Alex

>
> -aneesh
>
> "Aneesh Kumar K.V"<aneesh.kumar@linux.vnet.ibm.com>  writes:
>
>> From: "Aneesh Kumar K.V"<aneesh.kumar@linux.vnet.ibm.com>
>>
>> Without this, a value of rb=0 and rs=0 results in replacing the 0th
>> index. This can be observed when using gdb remote debugging support.
>>
>> (gdb) x/10i do_fork
>>     0xc000000000085330<do_fork>:        Cannot access memory at address 0xc000000000085330
>> (gdb)
>>
>> This is because when we do the slb sync via kvm_cpu_synchronize_state,
>> we overwrite the slb entry (0th entry) for 0xc000000000085330
>>
>> Signed-off-by: Aneesh Kumar K.V<aneesh.kumar@linux.vnet.ibm.com>
>> ---
>>   target-ppc/kvm.c | 17 +++++++++++++++--
>>   1 file changed, 15 insertions(+), 2 deletions(-)
>>
>> diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
>> index 30a870e..1838465 100644
>> --- a/target-ppc/kvm.c
>> +++ b/target-ppc/kvm.c
>> @@ -1033,9 +1033,22 @@ int kvm_arch_get_registers(CPUState *cs)
>>
>>           /* Sync SLB */
>>   #ifdef TARGET_PPC64
>> +        /*
>> +         * The packed SLB array we get from KVM_GET_SREGS only contains
>> +         * information about valid entries. So we flush our internal
>> +         * copy to get rid of stale ones, then put all valid SLB entries
>> +         * back in.
>> +         */
>> +        memset(env->slb, 0, sizeof(env->slb));
>>           for (i = 0; i<  64; i++) {
>> -            ppc_store_slb(env, sregs.u.s.ppc64.slb[i].slbe,
>> -                               sregs.u.s.ppc64.slb[i].slbv);
>> +            target_ulong rb = sregs.u.s.ppc64.slb[i].slbe;
>> +            target_ulong rs = sregs.u.s.ppc64.slb[i].slbv;
>> +            /*
>> +             * Only restore valid entries
>> +             */
>> +            if (rb&  SLB_ESID_V) {
>> +                ppc_store_slb(env, rb, rs);
>> +            }
>>           }
>>   #endif
>>
>> -- 
>> 1.8.1.2
>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic