[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH WIP] xen/public: move incomplete type definitions to xen.h
On 21.09.2023 18:18, Elliott Mitchell wrote: > Hypercall wrappers need the incomplete type definitions. Only when the > actual structure needed. While in the first sentence "only" looks to be missing, I can't really make sense of the second (without implying what I think you mean). > As such these incomplete definitions should be > in xen.h next to their hypercalls, rather than spread all over. Perhaps s/incomplete definitions/forward declarations/. There's a downside to the movement, though: You now introduce items into the namespace which may be entirely unused. The two contradicting goals need weighing as to their usefulness. > 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. Why would it be? > 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. It's permitted by the standard, so ought to be acceptable to all C89 compilers (which is what we use as baseline for the public headers). > --- 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 Interspersing the #define-s with typedef-s and DEFINE_XEN_GUEST_HANDLE()s clutters this section imo. If movement to a central place was wanted, then perhaps below all of the #define-s, then allowing to get away with just a single "#ifndef __ASSEMBLY__". > @@ -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); Imo a prereq to moving these up is to move the struct-s themselves into the x86 header. From all we can tell no present or future port is going to use these PV-only interfaces. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |