x86/paravirt/xen: Introduce pte_flags.
We are providing a version of pte_flags where the processing
under Xen goes couple of extra steps (if pat is enabled).
The baremetal version looks quite identical to the pte_val
one and the idea is to piggyback on the DEF_NATIVE/PTE_IDENT
mechanism that pte_val uses for baremetal.
Specifically we move the logical processing of "& PTE_FLAGS_MASK"
out of the functions to minimize the amount of operations
the paravirt operations have to do. This benefits us greatly
as this way we don't have do that logical operations in the function:
(native_pte_flags):
pushq %rbp
movq %rdi, %rax
movabsq $-70368744173569, %rdx
andq %rdx, %rax
movq %rsp, %rbp
popq %rbp
ret
but instead the paravirt function ends up being:
pushq %rbp
movq %rdi, %rax
movq %rsp, %rbp
popq %rbp
ret
and the logical "and" operation is done outside the call.
This means that the only real operation that native_pte_flags
is "movq %rdi, %rax" we can take advantage of the PTE_IDENT
functionality introduced in patch:
"x86/paravirt/xen: Optimize pte_flags by marking it as paravirt_ident_[32|64] type."
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
6 files changed