On Wed, Jan 27, 2021 at 12:23:37PM -0800, Michael Kelley wrote: > The definition of enum hv_message_type includes arch neutral and > x86/x64-specific values. Ideally there would be a way to put the > arch neutral values in an arch neutral module, and the arch > specific values in an arch specific module. But C doesn't provide > a way to extend enum types. As a compromise, move the entire > definition into an arch neutral module, to avoid duplicating the > arch neutral values for x86/x64 and for ARM64. > > No functional change. > > Signed-off-by: Michael Kelley <mikelley@xxxxxxxxxxxxx> Reviewed-by: Boqun Feng <boqun.feng@xxxxxxxxx> Regards, Boqun > --- > arch/x86/include/asm/hyperv-tlfs.h | 29 ----------------------------- > include/asm-generic/hyperv-tlfs.h | 35 +++++++++++++++++++++++++++++++++++ > 2 files changed, 35 insertions(+), 29 deletions(-) > > diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h > index 6bf42ae..dd74066 100644 > --- a/arch/x86/include/asm/hyperv-tlfs.h > +++ b/arch/x86/include/asm/hyperv-tlfs.h > @@ -263,35 +263,6 @@ struct hv_tsc_emulation_status { > #define HV_X64_MSR_TSC_REFERENCE_ENABLE 0x00000001 > #define HV_X64_MSR_TSC_REFERENCE_ADDRESS_SHIFT 12 > > - > -/* Define hypervisor message types. */ > -enum hv_message_type { > - HVMSG_NONE = 0x00000000, > - > - /* Memory access messages. */ > - HVMSG_UNMAPPED_GPA = 0x80000000, > - HVMSG_GPA_INTERCEPT = 0x80000001, > - > - /* Timer notification messages. */ > - HVMSG_TIMER_EXPIRED = 0x80000010, > - > - /* Error messages. */ > - HVMSG_INVALID_VP_REGISTER_VALUE = 0x80000020, > - HVMSG_UNRECOVERABLE_EXCEPTION = 0x80000021, > - HVMSG_UNSUPPORTED_FEATURE = 0x80000022, > - > - /* Trace buffer complete messages. */ > - HVMSG_EVENTLOG_BUFFERCOMPLETE = 0x80000040, > - > - /* Platform-specific processor intercept messages. */ > - HVMSG_X64_IOPORT_INTERCEPT = 0x80010000, > - HVMSG_X64_MSR_INTERCEPT = 0x80010001, > - HVMSG_X64_CPUID_INTERCEPT = 0x80010002, > - HVMSG_X64_EXCEPTION_INTERCEPT = 0x80010003, > - HVMSG_X64_APIC_EOI = 0x80010004, > - HVMSG_X64_LEGACY_FP_ERROR = 0x80010005 > -}; > - > struct hv_nested_enlightenments_control { > struct { > __u32 directhypercall:1; > diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h > index e73a118..d06f7b1 100644 > --- a/include/asm-generic/hyperv-tlfs.h > +++ b/include/asm-generic/hyperv-tlfs.h > @@ -213,6 +213,41 @@ enum HV_GENERIC_SET_FORMAT { > #define HV_MESSAGE_PAYLOAD_BYTE_COUNT (240) > #define HV_MESSAGE_PAYLOAD_QWORD_COUNT (30) > > +/* > + * Define hypervisor message types. Some of the message types > + * are x86/x64 specific, but there's no good way to separate > + * them out into the arch-specific version of hyperv-tlfs.h > + * because C doesn't provide a way to extend enum types. > + * Keeping them all in the arch neutral hyperv-tlfs.h seems > + * the least messy compromise. > + */ > +enum hv_message_type { > + HVMSG_NONE = 0x00000000, > + > + /* Memory access messages. */ > + HVMSG_UNMAPPED_GPA = 0x80000000, > + HVMSG_GPA_INTERCEPT = 0x80000001, > + > + /* Timer notification messages. */ > + HVMSG_TIMER_EXPIRED = 0x80000010, > + > + /* Error messages. */ > + HVMSG_INVALID_VP_REGISTER_VALUE = 0x80000020, > + HVMSG_UNRECOVERABLE_EXCEPTION = 0x80000021, > + HVMSG_UNSUPPORTED_FEATURE = 0x80000022, > + > + /* Trace buffer complete messages. */ > + HVMSG_EVENTLOG_BUFFERCOMPLETE = 0x80000040, > + > + /* Platform-specific processor intercept messages. */ > + HVMSG_X64_IOPORT_INTERCEPT = 0x80010000, > + HVMSG_X64_MSR_INTERCEPT = 0x80010001, > + HVMSG_X64_CPUID_INTERCEPT = 0x80010002, > + HVMSG_X64_EXCEPTION_INTERCEPT = 0x80010003, > + HVMSG_X64_APIC_EOI = 0x80010004, > + HVMSG_X64_LEGACY_FP_ERROR = 0x80010005 > +}; > + > /* Define synthetic interrupt controller message flags. */ > union hv_message_flags { > __u8 asu8; > -- > 1.8.3.1 >