Re: TLB flushes on fixmap changes

From: Nadav Amit
Date: Fri Aug 24 2018 - 16:25:00 EST


at 12:31 PM, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:

> On Fri, Aug 24, 2018 at 11:36 AM Nadav Amit <nadav.amit@xxxxxxxxx> wrote:
>>> Urgh.. weren't the fixmaps per cpu? Bah, I remember looking at this
>>> during PTI, but I seem to have forgotten everything again.
>>
>> [ Changed the title. Sorry for hijacking the thread. ]
>>
>> Since:
>>
>> native_set_fixmap()->set_pte_vaddr()->pgd_offset_k()
>
> The fixmaps should be entirely fixed after bootup to constant
> mappings, except for the KMAP ones, and they are indexed per-cpu.
>
> That's what my mental model is, at least.
>
> Can you actually find something that changes the fixmaps after boot
> (again, ignoring kmap)?

At least the alternatives mechanism appears to do so.

IIUC the following path is possible when adding a module:

jump_label_add_module()
->__jump_label_update()
->arch_jump_label_transform()
->__jump_label_transform()
->text_poke_bp()
->text_poke()
->set_fixmap()

And a similar path can happen when static_key_enable/disable() is called.