Hi,
I found that in `ghes_unmap` protected by spinlock, arm64 and x86 have
different strategies for flushing tlb.
# arm64 call trace:
```
holding a spin lock
ghes_unmap
clear_fixmap
__set_fixmap
flush_tlb_kernel_range
```
# x86 call trace:
```
holding a spin lock
ghes_unmap
clear_fixmap
__set_fixmap
mmu.set_fixmap
native_set_fixmap
__native_set_fixmap
set_pte_vaddr
set_pte_vaddr_p4d
__set_pte_vaddr
flush_tlb_one_kernel
```
arm64 broadcast TLB invalidation in ghes_unmap, because TLB entry can be
allocated regardless of whether the CPU explicitly accesses memory.
Why doesn't x86 broadcast TLB invalidation in ghes_unmap? Is there any
difference between x86 and arm64 in TLB allocation and invalidation strategy?
4.10.2.3 Details of TLB Use
Subject to the limitations given in the previous paragraph, the
processor may cache a translation for any linear address, even if that
address is not used to access memory. For example, the processor may
cache translations required for prefetches and for accesses that result
from speculative execution that would never actually occur in the
executed code path.