On 28 January 2014 02:07, Peter Crosthwaite
<peter.crosthwa...@xilinx.com> wrote:
> On Sat, Jan 25, 2014 at 10:09 AM, Peter Maydell
> <peter.mayd...@linaro.org> wrote:
>> On 24 January 2014 23:44, Peter Crosthwaite
>> <peter.crosthwa...@xilinx.com> wrote:
>>> On Wed, Jan 22, 2014 at 6:12 AM, Peter Maydell <peter.mayd...@linaro.org> 
>>> wrote:
>>>> +static int vmsa_ttbr_write(CPUARMState *env, const ARMCPRegInfo *ri,
>>>> +                             uint64_t value)
>>>> +{
>>>> +    /* 64 bit accesses to the TTBRs can change the ASID and so we
>>>> +     * must flush the TLB.
>>>> +     */
>>>> +    if ((ri->state == ARM_CP_STATE_AA64) || (ri->type & ARM_CP_64BIT)) {
>>>> +        tlb_flush(env, 1);
>>>> +    }
>>>
>>> With the level of complexity this if has reached, is it better to just
>>> check for this ASID change rather than make this overly conservative
>>> flush?
>>
>> Adding an "is the ASID the same" would make the check more complicated
>> again. Maybe we should do it but I'd rather keep that separate from the
>> "handle 64 bit formats" patches.
>>
>
> Seems similar compexity to me.

Well, you'd need all the checks we have here, plus another condition
for the ASID match:

  if (((ri->state == ARM_CP_STATE_AA64) || (ri->type & ARM_CP_64BIT))
       && (value & some_mask != old_value & some_mask)) {
        tlb_flush(env, 1);
   }

thanks
-- PMM

Reply via email to