In order to avoid indirect function calls on the hypercall path as
much as possible this series is removing the hypercall function tables
and is replacing the hypercall handler calls via the function array
by automatically generated call macros.
Another by-product of generating the call macros is the automatic
generating of the hypercall handler prototypes from the same data base
which is used to generate the macros.
This has the additional advantage of using type safe calls of the
handlers and to ensure related handler (e.g. PV and HVM ones) share
the same prototypes.
A very brief performance test (parallel build of the Xen hypervisor
in a 6 vcpu guest) showed a very slim improvement (less than 1%) of
the performance with the patches applied. The test was performed using
a PV and a PVH guest.
Changes in V2:
- new patches 6, 14, 15
- patch 7: support hypercall priorities for faster code
- comments addressed
Changes in V3:
- patches 1 and 4 removed as already applied
- comments addressed
Changes in V4:
- 5 patches removed al already applied
- new patches 1, 3 and 11
- avoid switching Arm hypercall handlers to return long (no change of
handlers returning long already)
Changes in V5:
- patch 3 of V4 has been applied already
- comments addressed
- rebase
Juergen Gross (10):
xen/arm: rename do_phydev_op() to do_arm_physdev_op()
xen: move do_vcpu_op() to arch specific code
xen: harmonize return types of hypercall handlers
xen: don't include asm/hypercall.h from C sources
xen: include compat/platform.h from hypercall.h
xen: generate hypercall interface related code
xen: use generated prototypes for hypercall handlers
xen/x86: call hypercall handlers via generated macro
xen/arm: call hypercall handlers via generated macro
xen/x86: remove cf_check attribute from hypercall handlers
.gitignore | 1 +
xen/arch/arm/domain.c | 15 +-
xen/arch/arm/hvm.c | 3 +-
xen/arch/arm/include/asm/hypercall.h | 7 +-
xen/arch/arm/physdev.c | 2 +-
xen/arch/arm/platform_hypercall.c | 1 +
xen/arch/arm/traps.c | 117 ++-------
xen/arch/x86/compat.c | 6 +-
xen/arch/x86/cpu/mcheck/mce.c | 2 +-
xen/arch/x86/cpu/vpmu.c | 3 +-
xen/arch/x86/domain.c | 11 +-
xen/arch/x86/domctl.c | 4 +-
xen/arch/x86/hvm/dm.c | 2 +-
xen/arch/x86/hvm/hvm.c | 2 +-
xen/arch/x86/hvm/hypercall.c | 177 ++-----------
xen/arch/x86/hypercall.c | 59 -----
xen/arch/x86/include/asm/hypercall.h | 201 ++++-----------
xen/arch/x86/include/asm/paging.h | 3 -
xen/arch/x86/mm.c | 13 +-
xen/arch/x86/mm/paging.c | 3 +-
xen/arch/x86/physdev.c | 2 +-
xen/arch/x86/platform_hypercall.c | 3 +-
xen/arch/x86/pv/callback.c | 26 +-
xen/arch/x86/pv/descriptor-tables.c | 8 +-
xen/arch/x86/pv/emul-priv-op.c | 2 +-
xen/arch/x86/pv/hypercall.c | 187 ++------------
xen/arch/x86/pv/iret.c | 5 +-
xen/arch/x86/pv/misc-hypercalls.c | 22 +-
xen/arch/x86/pv/shim.c | 4 +-
xen/arch/x86/traps.c | 2 +-
xen/arch/x86/x86_64/compat/mm.c | 3 +-
xen/arch/x86/x86_64/domain.c | 16 +-
xen/arch/x86/x86_64/mm.c | 2 -
xen/arch/x86/x86_64/platform_hypercall.c | 3 +-
xen/common/argo.c | 8 +-
xen/common/compat/domain.c | 15 +-
xen/common/compat/grant_table.c | 3 +-
xen/common/compat/kernel.c | 2 +-
xen/common/compat/memory.c | 3 +-
xen/common/dm.c | 2 +-
xen/common/domain.c | 14 +-
xen/common/domctl.c | 2 +-
xen/common/event_channel.c | 3 +-
xen/common/grant_table.c | 4 +-
xen/common/hypfs.c | 2 +-
xen/common/kernel.c | 2 +-
xen/common/kexec.c | 6 +-
xen/common/memory.c | 2 +-
xen/common/multicall.c | 4 +-
xen/common/sched/compat.c | 2 +-
xen/common/sched/core.c | 4 +-
xen/common/sysctl.c | 2 +-
xen/common/xenoprof.c | 2 +-
xen/drivers/char/console.c | 2 +-
xen/include/Makefile | 13 +
xen/include/hypercall-defs.c | 285 ++++++++++++++++++++
xen/include/xen/hypercall.h | 185 +------------
xen/scripts/gen_hypercall.awk | 314 +++++++++++++++++++++++
xen/xsm/xsm_core.c | 4 +-
59 files changed, 863 insertions(+), 939 deletions(-)
create mode 100644 xen/include/hypercall-defs.c
create mode 100644 xen/scripts/gen_hypercall.awk
--
2.34.1