Re: [PATCH 4/4] x86: add new pte_get_and_clear hypercall

Teddy Astie <[email protected]>
Newsgroups org.xenproject.lists.xen-devel
Message-ID <1785839438.8631fc262581453bbf619ec5b2062170.19fcc534b55000e099@vates.tech>
Le 27/07/2026 à 17:07, Kevin Lampis a écrit :
> This new hypercall uses the same interface as the mmu_update hypercall except
> the old PTE value is returned in the mmu_update_t->val field.
> 
> The purpose of this new hypercall is to improve performance over the current
> trap and emulate behavior. Only l1 PTEs are supported because they have the
> biggest performance impact.
> 
> Signed-off-by: Kevin Lampis <[email protected]>
> ---
>   xen/arch/x86/mm.c            | 24 +++++++++++++++++-------
>   xen/include/hypercall-defs.c |  2 ++
>   xen/include/public/xen.h     |  1 +
>   3 files changed, 20 insertions(+), 7 deletions(-)
> 
> diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
> index 278b992aca5c..e5fdfc66081a 100644
> --- a/xen/arch/x86/mm.c
> +++ b/xen/arch/x86/mm.c
> @@ -3993,6 +3993,7 @@ static long __do_mmu_update(
>       unsigned int count,

...

>   #endif /* CONFIG_PV */
> diff --git a/xen/include/hypercall-defs.c b/xen/include/hypercall-defs.c
> index a625d634b694..0552e93ab560 100644
> --- a/xen/include/hypercall-defs.c
> +++ b/xen/include/hypercall-defs.c
> @@ -174,6 +174,7 @@ multicall(multicall_entry_t *call_list, unsigned long nr_calls)
>   #ifdef CONFIG_PV
>   mmuext_op(mmuext_op_t *uops, unsigned int count, unsigned int *pdone, unsigned int foreigndom)
>   mmu_update(mmu_update_t *ureqs, unsigned int count, unsigned int *pdone, unsigned int foreigndom)
> +pte_get_and_clear(mmu_update_t *ureqs, unsigned int count, unsigned int *pdone, unsigned int foreigndom)
>   stack_switch(unsigned long ss, unsigned long esp)
>   fpu_taskswitch(int set)
>   set_debugreg(int reg, unsigned long value)
> @@ -232,6 +233,7 @@ caller: arm
>   table:                             pv32     pv64     hvm32    hvm64    arm
>   set_trap_table                     compat   do       -        -        -
>   mmu_update                         do:1     do:1     -        -        -
> +pte_get_and_clear                  do:1     do:1     -        -        -
>   set_gdt                            compat   do       -        -        -
>   stack_switch                       do:2     do:2     -        -        -
>   set_callbacks                      compat   do       -        -        -
> diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h
> index 2149b8dd3808..9e2ba0107d3b 100644
> --- a/xen/include/public/xen.h
> +++ b/xen/include/public/xen.h
> @@ -118,6 +118,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
>   #define __HYPERVISOR_xenpmu_op            40
>   #define __HYPERVISOR_dm_op                41
>   #define __HYPERVISOR_hypfs_op             42
> +#define __HYPERVISOR_pte_get_and_clear    43
>   

I'm not sure __HYPERVISOR_pte_get_and_clear is a great name, as I 
understand it, it's more that it's doing (more general) CMPXCHG 
operation and returning the old value than strictly doing a 
get_and_clear one (which is the main intent for Linux).

I also think we can find a way to expand HYPERVISOR_mmu_update instead 
of introducing a new hypercall.

HYPERVISOR_mmu_update actually has a undocumented "actually reserved 
bit" (at least, for PV32-pae and PV64 guests) which currently must be 
zero (otherwise, hypercall fails); but we can repurpose it to expand 
available command count to add "cmpxchg semantics" variants. That would 
greatly simplify the implementation as we won't have to introduce a new 
separate hypercall just for this.
(I will send a patch regarding this in particular)

---

Aside that, new features wants to be enumerated so that the kernel knows 
that it's supported before trying to use it. We can expand features.h 
with a new flag for this.

>   /* Architecture-specific hypercall definitions. */
>   #define __HYPERVISOR_arch_0               48

Teddy
OpenPGP_0x660FA9D102CBCFD0.asc (application/pgp-keys, 2.4 KB)
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
x9fhaZEsniw8/bYgC3igkk5YJiOa
=lUIA
-----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.asc (application/pgp-signature, 665 B)
-----BEGIN PGP SIGNATURE-----

wsD5BAABCAAjFiEEGAIew9LzHY3pdrqtZg+p0QLLz9AFAmpxv00FAwAAAAAACgkQZg+p0QLLz9Ci
nQv/VvGFEbUTC5o7Bn7nY5jNoQgfXOeAu582//4PlPlCGmptOeSCXWRNBe148Yrbjsf89bQSYC9J
CuzJ2RSb2FFbRoHoTflR1biBJp22ptSnbi0mPMXKWODfGkNH6F8gmo045StniJr7TfVtu8PnIhXz
nZc0BUAmOG+Swq6/Udwl23VgG1qNXvCQRXQeWsyrEoNCTo8FM2LjTY5vEOaBU/iHkiFgHoblP7gS
wn4NUaqiK1aTZSxW4qhw29y8N2PVfXTKTbx+lfLZT2BRAqvKXXrkh54TI1HdzOmcRv11rhQPHzj4
p3qylNA3Fd7RwF61DAXDCux9J1MsAc8aYmkaEhxl1pgh2GiwOGFkHqbYmAJBqDVJXynTAutl4Djg
lGvwG75wVHGENZs2PfKJUmps55zIK2wCjs5hG7QU7EiUayHPyosiq3ozz6u2nCQZWvZJdaYukxjt
tidgAqN6/7yNqqREPTQKI+pVcIeEvNUV3pjrQiPbpHJQnER2d5jjp+K2vBET
=hjVR
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.