On Wed, Nov 20, 2024 at 06:24:56PM +0100, Valentin Schneider wrote:
Oh gawd, just having looked at xen_write_cr3() this might not be entirely trivial to mark noinstr :/
... I hadn't even seen that.
AIUI the CR3 RMW is not "enough" if we have PGE enabled, because then global pages aren't flushed.
The question becomes: what is held in global pages and do we care about that when it comes to vmalloc()? I'm starting to think no, but this is x86, I don't know what surprises are waiting for me.
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.