xen/version: Drop compat/kernel.c

kernel.c is mostly in an #ifndef COMPAT guard, because compat/kernel.c
re-includes kernel.c to recompile xen_version() in a compat form.

However, the xen_version hypercall is almost guest-ABI-agnostic; only
XENVER_platform_parameters has a compat split.  Handle this locally, and do
away with the re-include entirely.  Also drop the CHECK_TYPE()'s between types
that are simply char-arrays in their native and compat form.

In particular, this removed the final instances of obfuscation via the DO()
macro.

No functional change.  Also saves 2k of of .text in the x86 build.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2023-01-12 18:42:00 +00:00
1 parent 73f0696dc1
commit e6ee01ad24
5 files changed
+33 -70

No files matched your search

+1 -1
View File
@@ -59,7 +59,7 @@ obj-y += xmalloc_tlsf.o
obj-bin-$(CONFIG_X86) += $(foreach n,decompress bunzip2 unxz unlzma lzo unlzo unlz4 unzstd earlycpio,$(n).init.o)
obj-$(CONFIG_COMPAT) += $(addprefix compat/,domain.o kernel.o memory.o multicall.o xlat.o)
obj-$(CONFIG_COMPAT) += $(addprefix compat/,domain.o memory.o multicall.o xlat.o)
ifneq ($(CONFIG_PV_SHIM_EXCLUSIVE),y)
obj-y += domctl.o
-53
View File
@@ -1,53 +0,0 @@
/******************************************************************************
* kernel.c
*/
EMIT_FILE;
#include <xen/init.h>
#include <xen/lib.h>
#include <xen/errno.h>
#include <xen/version.h>
#include <xen/sched.h>
#include <xen/guest_access.h>
#include <asm/current.h>
#include <compat/xen.h>
#include <compat/version.h>
extern xen_commandline_t saved_cmdline;
#define xen_extraversion compat_extraversion
#define xen_extraversion_t compat_extraversion_t
#define xen_compile_info compat_compile_info
#define xen_compile_info_t compat_compile_info_t
CHECK_TYPE(capabilities_info);
#define xen_platform_parameters compat_platform_parameters
#define xen_platform_parameters_t compat_platform_parameters_t
#undef HYPERVISOR_VIRT_START
#define HYPERVISOR_VIRT_START HYPERVISOR_COMPAT_VIRT_START(current->domain)
#define xen_changeset_info compat_changeset_info
#define xen_changeset_info_t compat_changeset_info_t
#define xen_feature_info compat_feature_info
#define xen_feature_info_t compat_feature_info_t
CHECK_TYPE(domain_handle);
#define DO(fn) int compat_##fn
#define COMPAT
#include "../kernel.c"
/*
* Local variables:
* mode: C
* c-file-style: "BSD"
* c-basic-offset: 4
* tab-width: 4
* indent-tabs-mode: nil
* End:
*/
+28 -15
View File
@@ -18,7 +18,13 @@
#include <asm/current.h>
#include <public/version.h>
#ifndef COMPAT
#ifdef CONFIG_COMPAT
#include <compat/version.h>
CHECK_build_id;
CHECK_compile_info;
CHECK_feature_info;
#endif
enum system_state system_state = SYS_STATE_early_boot;
@@ -463,15 +469,7 @@ static int __init cf_check param_init(void)
__initcall(param_init);
#endif
# define DO(fn) long do_##fn
#endif
/*
* Simple hypercalls.
*/
DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
{
bool_t deny = !!xsm_xen_version(XSM_OTHER, cmd);
@@ -520,12 +518,27 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
case XENVER_platform_parameters:
{
xen_platform_parameters_t params = {
.virt_start = HYPERVISOR_VIRT_START
};
#ifdef CONFIG_COMPAT
if ( current->hcall_compat )
{
compat_platform_parameters_t params = {
.virt_start = HYPERVISOR_COMPAT_VIRT_START(current->domain),
};
if ( copy_to_guest(arg, &params, 1) )
return -EFAULT;
}
else
#endif
{
xen_platform_parameters_t params = {
.virt_start = HYPERVISOR_VIRT_START,
};
if ( copy_to_guest(arg, &params, 1) )
return -EFAULT;
}
if ( copy_to_guest(arg, &params, 1) )
return -EFAULT;
return 0;
}
+1 -1
View File
@@ -245,7 +245,7 @@ multicall compat:2 do:2 compat do do
update_va_mapping compat do - - -
set_timer_op compat do compat do -
event_channel_op_compat do do - - dep
xen_version compat do compat do do
xen_version do do do do do
console_io do do do do do
physdev_op_compat compat do - - dep
#if defined(CONFIG_GRANT_TABLE)
+3
View File
@@ -169,6 +169,9 @@
! vcpu_runstate_info vcpu.h
? vcpu_set_periodic_timer vcpu.h
! vcpu_set_singleshot_timer vcpu.h
? build_id version.h
? compile_info version.h
? feature_info version.h
? xenoprof_init xenoprof.h
? xenoprof_passive xenoprof.h
? flask_access xsm/flask_op.h
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.