[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH WIP] xen/public: move incomplete type definitions to xen.h
Hypercall wrappers need the incomplete type definitions. Only when the actual structure needed. As such these incomplete definitions should be in xen.h next to their hypercalls, rather than spread all over. trap_info_t is particularly notable since even though the hypercall is x86-only, the wrapper is likely to be visible to generic source code. Signed-off-by: Elliott Mitchell <ehem+xen@xxxxxxx> --- trap_info_t and HYPERVISOR_set_trap_table() is something I ran into. With the incomplete definition, the wrapper is accaptable to an ARM compiler. Without the incomplete definition, it fails. Note, this has been shown to build in my environment. I'm unsure whether the incomplete structure plus type definition is acceptable to all supportted compilers. I'm wondering about __ASSEMBLY__. I suspect this could be handled better by having a macro for all these suspiciously similar type definitions. I suspect it would be handy for DEFINE_XEN_GUEST_HANDLE() to be null when __ASSEMBLY__ is defined. This seems to suggest all the __HYPERVISOR_* definitions need to move later in the file. --- xen/include/public/arch-x86/xen.h | 2 -- xen/include/public/platform.h | 2 -- xen/include/public/sched.h | 2 -- xen/include/public/xen.h | 24 ++++++++++++++++++++---- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/xen/include/public/arch-x86/xen.h b/xen/include/public/arch-x86/xen.h index c0f4551247..896440333c 100644 --- a/xen/include/public/arch-x86/xen.h +++ b/xen/include/public/arch-x86/xen.h @@ -143,8 +143,6 @@ struct trap_info { uint16_t cs; /* code selector */ unsigned long address; /* code offset */ }; -typedef struct trap_info trap_info_t; -DEFINE_XEN_GUEST_HANDLE(trap_info_t); typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */ diff --git a/xen/include/public/platform.h b/xen/include/public/platform.h index 15777b5416..bb7f2dfcb0 100644 --- a/xen/include/public/platform.h +++ b/xen/include/public/platform.h @@ -659,8 +659,6 @@ struct xen_platform_op { uint8_t pad[128]; } u; }; -typedef struct xen_platform_op xen_platform_op_t; -DEFINE_XEN_GUEST_HANDLE(xen_platform_op_t); #endif /* __XEN_PUBLIC_PLATFORM_H__ */ diff --git a/xen/include/public/sched.h b/xen/include/public/sched.h index b4362c6a1d..2b65c0db8c 100644 --- a/xen/include/public/sched.h +++ b/xen/include/public/sched.h @@ -118,8 +118,6 @@ struct sched_shutdown { unsigned int reason; /* SHUTDOWN_* => enum sched_shutdown_reason */ }; -typedef struct sched_shutdown sched_shutdown_t; -DEFINE_XEN_GUEST_HANDLE(sched_shutdown_t); struct sched_poll { XEN_GUEST_HANDLE(evtchn_port_t) ports; diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h index b812a0a324..32a76afbd4 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -75,13 +75,25 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t); */ #define __HYPERVISOR_set_trap_table 0 +#ifndef __ASSEMBLY__ +typedef struct trap_info trap_info_t; +DEFINE_XEN_GUEST_HANDLE(trap_info_t); +#endif #define __HYPERVISOR_mmu_update 1 +#ifndef __ASSEMBLY__ +typedef struct mmu_update mmu_update_t; +DEFINE_XEN_GUEST_HANDLE(mmu_update_t); +#endif #define __HYPERVISOR_set_gdt 2 #define __HYPERVISOR_stack_switch 3 #define __HYPERVISOR_set_callbacks 4 #define __HYPERVISOR_fpu_taskswitch 5 #define __HYPERVISOR_sched_op_compat 6 /* compat since 0x00030101 */ #define __HYPERVISOR_platform_op 7 +#ifndef __ASSEMBLY__ +typedef struct xen_platform_op xen_platform_op_t; +DEFINE_XEN_GUEST_HANDLE(xen_platform_op_t); +#endif #define __HYPERVISOR_set_debugreg 8 #define __HYPERVISOR_get_debugreg 9 #define __HYPERVISOR_update_descriptor 10 @@ -100,9 +112,17 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t); #define __HYPERVISOR_vcpu_op 24 #define __HYPERVISOR_set_segment_base 25 /* x86/64 only */ #define __HYPERVISOR_mmuext_op 26 +#ifndef __ASSEMBLY__ +typedef struct mmuext_op mmuext_op_t; +DEFINE_XEN_GUEST_HANDLE(mmuext_op_t); +#endif #define __HYPERVISOR_xsm_op 27 #define __HYPERVISOR_nmi_op 28 #define __HYPERVISOR_sched_op 29 +#ifndef __ASSEMBLY__ +typedef struct sched_shutdown sched_shutdown_t; +DEFINE_XEN_GUEST_HANDLE(sched_shutdown_t); +#endif #define __HYPERVISOR_callback_op 30 #define __HYPERVISOR_xenoprof_op 31 #define __HYPERVISOR_event_channel_op 32 @@ -449,8 +469,6 @@ struct mmuext_op { xen_pfn_t src_mfn; } arg2; }; -typedef struct mmuext_op mmuext_op_t; -DEFINE_XEN_GUEST_HANDLE(mmuext_op_t); #endif /* @@ -615,8 +633,6 @@ struct mmu_update { uint64_t ptr; /* Machine address of PTE. */ uint64_t val; /* New contents of PTE. */ }; -typedef struct mmu_update mmu_update_t; -DEFINE_XEN_GUEST_HANDLE(mmu_update_t); /* * ` enum neg_errnoval -- (\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/) \BS ( | ehem+sigmsg@xxxxxxx PGP 87145445 | ) / \_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/ 8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |