[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1bf0ce72-a377-4c3f-b68a-0f890f8b5d09@linux.microsoft.com>
Date: Thu, 26 Dec 2024 14:11:00 -0800
From: Easwar Hariharan <eahariha@...ux.microsoft.com>
To: Roman Kisel <romank@...ux.microsoft.com>, nunodasneves@...ux.microsoft.com
Cc: hpa@...or.com, kys@...rosoft.com, bp@...en8.de,
dave.hansen@...ux.intel.com, decui@...rosoft.com, haiyangz@...rosoft.com,
mingo@...hat.com, mhklinux@...look.com, tglx@...utronix.de,
tiala@...rosoft.com, wei.liu@...nel.org, linux-hyperv@...r.kernel.org,
linux-kernel@...r.kernel.org, x86@...nel.org, eahariha@...ux.microsoft.com,
apais@...rosoft.com, benhill@...rosoft.com, ssengar@...rosoft.com,
sunilmut@...rosoft.com, vdso@...bites.dev
Subject: Re: [PATCH v3 1/5] hyperv: Define struct hv_output_get_vp_registers
On 12/26/2024 1:31 PM, Roman Kisel wrote:
> There is no definition of the output structure for the
> GetVpRegisters hypercall. Hence, using the hypercall
> is not possible when the output value has some structure
> to it. Even getting a datum of a primitive type reads
> as ad-hoc without that definition.
>
> Define struct hv_output_get_vp_registers to enable using
> the GetVpRegisters hypercall. Make provisions for all
> supported architectures. No functional changes.
>
> Signed-off-by: Roman Kisel <romank@...ux.microsoft.com>
> ---
> include/hyperv/hvgdk_mini.h | 58 +++++++++++++++++++++++++++++++++++--
> 1 file changed, 56 insertions(+), 2 deletions(-)
>
> struct {
> @@ -1091,6 +1130,8 @@ union hv_x64_pending_interruption_register {
> } __packed;
> };
>
> +#endif
> +
> union hv_register_value {
> struct hv_u128 reg128;
> u64 reg64;
> @@ -1098,13 +1139,26 @@ union hv_register_value {
> u16 reg16;
> u8 reg8;
>
> - struct hv_x64_segment_register segment;
> - struct hv_x64_table_register table;
> union hv_explicit_suspend_register explicit_suspend;
> union hv_intercept_suspend_register intercept_suspend;
> union hv_dispatch_suspend_register dispatch_suspend;
> +#if defined(CONFIG_X86)
> + struct hv_x64_segment_register segment;
> + struct hv_x64_table_register table;
> union hv_x64_interrupt_state_register interrupt_state;
> union hv_x64_pending_interruption_register pending_interruption;
> +#elif defined(CONFIG_ARM64)
> + union hv_arm64_pending_interruption_register pending_interruption;
> + union hv_arm64_interrupt_state_register interrupt_state;
> + union hv_arm64_pending_synthetic_exception_event pending_synthetic_exception_event;
> +#else
> + #error "This architecture is not supported"
> +#endif
> +};
I don't love the #error for unsupported architectures when Kconfig takes
care of that for us, but I suppose it's for completeness since the arm64
members have to be conditioned on CONFIG_ARM64?
> +
> +/* NOTE: Linux helper struct - NOT from Hyper-V code */
> +struct hv_output_get_vp_registers {
> + DECLARE_FLEX_ARRAY(union hv_register_value, values);
> };
I'm not super familiar with DECLARE_FLEX_ARRAY() but it appears this
needs to be wrapped in an anonymous struct at the least per this comment
for the definition of DECLARE_FLEX_ARRAY()
> * In order to have a flexible array member [...] alone in a
> * struct, it needs to be wrapped in an anonymous struct with at least 1
> * named member, but that member can be empty.
Nuno, since you seem to be more familiar, can you provide some guidance?
Thanks,
Easwar
Powered by blists - more mailing lists