• Jan Beulich's avatar
    xen/x86: restore (fix) xen_set_pte_init() behavior · cae73951
    Jan Beulich authored
    Commit f7c90c2a ("x86/xen: don't write ptes directly in 32-bit PV
    guests") needlessly (and heavily) penalized 64-bit guests here: The
    majority of the early page table updates is to writable pages (which get
    converted to r/o only after all the writes are done), in particular
    those involved in building the direct map (which consists of all 4k
    mappings in PV). On my test system this accounts for almost 16 million
    hypercalls when each could simply have been a plain memory write.
    
    Switch back to using native_set_pte(), except for updates of early
    ioremap tables (where a suitable accessor exists to recognize them).
    With 32-bit PV support gone, this doesn't need to be further
    conditionalized (albeit backports thereof may need adjustment).
    
    To avoid a fair number (almost 256k on my test system) of trap-and-
    emulate cases appearing as a result, switch the hook in
    xen_pagetable_init().
    
    Finally commit d6b186c1 ("x86/xen: avoid m2p lookup when setting
    early page table entries") inserted a function ahead of
    xen_set_pte_init(), separating it from its comment (which may have been
    part of the reason why the performance regression wasn't anticipated /
    recognized while codeing / reviewing the change mentioned further up).
    Move the function up and adjust that comment to describe the new
    behavior.
    Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
    Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
    Link: https://lore.kernel.org/r/57ce1289-0297-e96e-79e1-cedafb5d9bf6@suse.comSigned-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
    cae73951
mmu_pv.c 63.5 KB