|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 01/18] xen/arm64: flushtlb: Reduce scope of barrier for local TLB flush
Hi Julien,
On 13/12/2022 10:45, Julien Grall wrote:
>
>
> On 13/12/2022 09:11, Michal Orzel wrote:
>> Hi Julien,
>
> Hi Michal,
>
>> On 12/12/2022 10:55, Julien Grall wrote:
>>>
>>>
>>> From: Julien Grall <jgrall@xxxxxxxxxx>
>>>
>>> Per D5-4929 in ARM DDI 0487H.a:
>>> "A DSB NSH is sufficient to ensure completion of TLB maintenance
>>> instructions that apply to a single PE. A DSB ISH is sufficient to
>>> ensure completion of TLB maintenance instructions that apply to PEs
>>> in the same Inner Shareable domain.
>>> "
>>>
>>> This means barrier after local TLB flushes could be reduced to
>>> non-shareable.
>>>
>>> Note that the scope of the barrier in the workaround has not been
>>> changed because Linux v6.1-rc8 is also using 'ish' and I couldn't
>>> find anything in the Neoverse N1 suggesting that a 'nsh' would
>>> be sufficient.
>>>
>>> Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx>
>>>
>>> ---
>>>
>>> I have used an older version of the Arm Arm because the explanation
>>> in the latest (ARM DDI 0487I.a) is less obvious. I reckon the paragraph
>>> about DSB in D8.13.8 is missing the shareability. But this is implied
>>> in B2.3.11:
>>>
>>> "If the required access types of the DSB is reads and writes, the
>>> following instructions issued by PEe before the DSB are complete for
>>> the required shareability domain:
>>>
>>> [...]
>>>
>>> — All TLB maintenance instructions.
>>> "
>>>
>>> Changes in v3:
>>> - Patch added
>>> ---
>>> xen/arch/arm/include/asm/arm64/flushtlb.h | 27 ++++++++++++++---------
>>> 1 file changed, 16 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/xen/arch/arm/include/asm/arm64/flushtlb.h
>>> b/xen/arch/arm/include/asm/arm64/flushtlb.h
>>> index 7c5431518741..39d429ace552 100644
>>> --- a/xen/arch/arm/include/asm/arm64/flushtlb.h
>>> +++ b/xen/arch/arm/include/asm/arm64/flushtlb.h
>>> @@ -12,8 +12,9 @@
>>> * ARM64_WORKAROUND_REPEAT_TLBI:
>> Before this line, in the same comment, we state DSB ISHST. This should also
>> be changed
>> to reflect the change done by this patch.
>
> This is on purpose. I decided to keep the sequence as-is and instead add
> a paragraph explaining that 'nsh' is sufficient for local TLB flushes.
>
>>
>>> * Modification of the translation table for a virtual address might lead
>>> to
>>> * read-after-read ordering violation.
>>> - * The workaround repeats TLBI+DSB operation for all the TLB flush
>>> operations.
>>> - * While this is stricly not necessary, we don't want to take any risk.
>>> + * The workaround repeats TLBI+DSB ISH operation for all the TLB flush
>>> + * operations. While this is stricly not necessary, we don't want to
>> s/stricly/strictly/
>>
>>> + * take any risk.
>>> *
>>> * For Xen page-tables the ISB will discard any instructions fetched
>>> * from the old mappings.
>>> @@ -21,38 +22,42 @@
>>> * For the Stage-2 page-tables the ISB ensures the completion of the DSB
>>> * (and therefore the TLB invalidation) before continuing. So we know
>>> * the TLBs cannot contain an entry for a mapping we may have removed.
>>> + *
>>> + * Note that for local TLB flush, using non-shareable (nsh) is sufficient
>>> + * (see D5-4929 in ARM DDI 0487H.a). Althougth, the memory barrier in
>> s/Althougth/Although/
>>
>>> + * for the workaround is left as inner-shareable to match with Linux.
>> So for the workaround we stay with DSB ISH. But ...
>>
>>> */
>>> -#define TLB_HELPER(name, tlbop) \
>>> +#define TLB_HELPER(name, tlbop, sh) \
>>> static inline void name(void) \
>>> { \
>>> asm volatile( \
>>> - "dsb ishst;" \
>>> + "dsb " # sh "st;" \
>>> "tlbi " # tlbop ";" \
>>> ALTERNATIVE( \
>>> "nop; nop;", \
>>> - "dsb ish;" \
>>> + "dsb " # sh ";" \
>> ... you do not adhere to this.
>
> This is a leftover from my previous approach. I will drop it.
>
> [...]
>
>>
>> With the remarks fixed:
>> Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
>
> I am not planning to fix the first remark. Please let me know if your
> Reviewed-by tag stands.
I'm ok with it so you can keep my tag.
>
> Cheers,
>
> --
> Julien Grall
~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |