qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH for-2.5] target-arm: Don't mask out bits [47:40]


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH for-2.5] target-arm: Don't mask out bits [47:40] in LPAE descriptors for v8
Date: Fri, 20 Nov 2015 15:20:09 +0000

On 20 November 2015 at 15:18, Laurent Desnogues
<address@hidden> wrote:
> Hello,
>
> On Fri, Nov 20, 2015 at 3:32 PM, Peter Maydell <address@hidden> wrote:
>> In an LPAE format descriptor in ARMv8 the address field extends
>> up to bit 47, not just bit 39. Correct the masking so we don't
>> give incorrect results if the output address size is greater
>> than 40 bits, as it can be for AArch64.
>>
>> (Note that we don't yet support the new-in-v8 Address Size fault which
>> should be generated if any translation table entry or TTBR contains
>> an address with non-zero bits above the most significant bit of the
>> maximum output address size.)
>>
>> Signed-off-by: Peter Maydell <address@hidden>

>> +    /* The address field in the descriptor goes up to bit 39 for ARMv7
>> +     * but up to bit 47 for ARMv8.
>> +     */
>> +    if (arm_feature(env, ARM_FEATURE_V8)) {
>> +        descaddrmask = 0xfffffffff000ULL;
>> +    } else {
>> +        descaddrmask = 0xfffffff000ULL;
>> +    }
>
> My understanding is that 48 bits are used if you are running AArch64
> code, and 40 bits are used for 32-bit code even on an ARMv8 CPU, so
> checking for ARM_FEATURE_V8 is perhaps not enough.

For v8 32-bit code the usable address width is only 40 bits, but
setting a bit in [47:40] causes an AddressSize fault on v8 (but not
v7). So the mask should be 48 bits for v8 regardless of 32-vs-64,
and when we support AddressSize faults we'll then check the upper
bits of the masked-out address and raise a fault if needed.

thanks
-- PMM



reply via email to

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