On Thu, Nov 21, 2024 at 07:07:44AM -0800, Dave Hansen wrote:
On 11/21/24 03:12, Peter Zijlstra wrote:
I see e.g. ds_clear_cea() clears PTEs that can have the _PAGE_GLOBAL flag, and it correctly uses the non-deferrable flush_tlb_kernel_range().
I always forget what we use global pages for, dhansen might know, but let me try and have a look.
I *think* we only have GLOBAL on kernel text, and that only sometimes.
I think you're remembering how _PAGE_GLOBAL gets used when KPTI is in play.
Yah, I suppose I am. That was the last time I had a good look at this stuff :-)
Ignoring KPTI for a sec... We use _PAGE_GLOBAL for all kernel mappings. Before PCIDs, global mappings let the kernel TLB entries live across CR3 writes. When PCIDs are in play, global mappings let two different ASIDs share TLB entries.
Hurmph.. bah. That means we do need that horrible CR4 dance :/