qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH -V6 3/3] target-ppc: Fix htab_mask calculation


From: Aneesh Kumar K.V
Subject: Re: [Qemu-devel] [PATCH -V6 3/3] target-ppc: Fix htab_mask calculation
Date: Thu, 07 Nov 2013 19:34:13 +0530
User-agent: Notmuch/0.16+99~g10596a5 (http://notmuchmail.org) Emacs/24.3.1 (x86_64-pc-linux-gnu)

Alexander Graf <address@hidden> writes:

> On 15.10.2013, at 01:58, Aneesh Kumar K.V <address@hidden> wrote:
>
>> From: "Aneesh Kumar K.V" <address@hidden>
>> 
>> Correctly update the htab_mask using the return value of
>> KVM_PPC_ALLOCATE_HTAB ioctl. Also we don't update sdr1
>> on GET_SREGS for HV. So don't update htab_mask if sdr1
>> is found to be zero. Fix the pte index calculation to be
>> same as that found in the kernel
>> 
>> Signed-off-by: Aneesh Kumar K.V <address@hidden>
>> ---
>> hw/ppc/spapr.c          | 3 ++-
>> target-ppc/mmu-hash64.c | 2 +-
>> target-ppc/mmu_helper.c | 4 +++-
>> 3 files changed, 6 insertions(+), 3 deletions(-)
>> 
>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
>> index 22f2a8a..d4f3502 100644
>> --- a/hw/ppc/spapr.c
>> +++ b/hw/ppc/spapr.c
>> @@ -724,7 +724,8 @@ static void spapr_cpu_reset(void *opaque)
>>         env->external_htab = (void *)1;
>>     }
>>     env->htab_base = -1;
>> -    env->htab_mask = HTAB_SIZE(spapr) - 1;
>> +    /* 128 (2**7) bytes in each HPTEG */
>> +    env->htab_mask = (1ULL << ((spapr)->htab_shift - 7)) - 1;
>
> HTAB_SIZE(spapr) / 128? The compiler should be smart enough to produce
> the same code out of that.

(HTAB_SIZE(spapr) - 1) / 128. I am not sure that is any better ?


>
> However, could you please explain why it's better to have the mask be
> on the PTEG rather than the offset? Is this something you missed in
> the previous patch? If so, please change the semantics on what
> htab_mask means before you break the code as that makes bisecting
> hard.


That is how kernel does the masking. In kvmppc_alloc_hpt() we have

        /* 128 (2**7) bytes in each HPTEG */
        kvm->arch.hpt_mask = (1ul << (order - 7)) - 1;

If we don't have it same, we would end up with wrong hpte index 


>
> Furthermore, since you are changing the semantics of htab_mask, have
> you checked all other users of it? Most notably the hash32 code.


I can verify the code, but i don't have setup

-aneesh




reply via email to

[Prev in Thread] Current Thread [Next in Thread]