From: Magnus Kulke <magnuskulke@linux.microsoft.com>
To: "Doru Blânzeanu" <dblanzeanu@linux.microsoft.com>
Cc: qemu-devel@nongnu.org, Zhao Liu <zhao1.liu@intel.com>,
Wei Liu <wei.liu@kernel.org>, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v2 3/7] include/hw/hyperv: add hv_vp_register_page struct definition
Date: Wed, 6 May 2026 12:38:15 +0200 [thread overview]
Message-ID: <afsaF3B52XxzXlkJ@example.com> (raw)
In-Reply-To: <20260505185028.237207-4-dblanzeanu@linux.microsoft.com>
On Tue, May 05, 2026 at 09:50:24PM +0300, Doru Blânzeanu wrote:
> Define the `hv_vp_register_page` structure that the linux kernel uses
> to allow access to vcpu registers.
>
> This structure is going to be used in later patches to access vcpu
> registers.
>
> Signed-off-by: Doru Blânzeanu <dblanzeanu@linux.microsoft.com>
> ---
> include/hw/hyperv/hvgdk.h | 2 +
> include/hw/hyperv/hvhdk.h | 105 ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 107 insertions(+)
>
> diff --git a/include/hw/hyperv/hvgdk.h b/include/hw/hyperv/hvgdk.h
> index 71161f477c..e4be861716 100644
> --- a/include/hw/hyperv/hvgdk.h
> +++ b/include/hw/hyperv/hvgdk.h
> @@ -9,6 +9,8 @@
> #ifndef HW_HYPERV_HVGDK_H
> #define HW_HYPERV_HVGDK_H
>
> +#include "hvgdk_mini.h"
> +
> #define HVGDK_H_VERSION (25125)
>
> enum hv_unimplemented_msr_action {
> diff --git a/include/hw/hyperv/hvhdk.h b/include/hw/hyperv/hvhdk.h
> index 41af743847..4a3b543893 100644
> --- a/include/hw/hyperv/hvhdk.h
> +++ b/include/hw/hyperv/hvhdk.h
> @@ -9,7 +9,11 @@
> #ifndef HW_HYPERV_HVHDK_H
> #define HW_HYPERV_HVHDK_H
>
> +#include "hvgdk.h"
> +#include "hvhdk_mini.h"
> +
> #define HV_PARTITION_SYNTHETIC_PROCESSOR_FEATURES_BANKS 1
> +#define HV_VP_REGISTER_PAGE_MAX_VECTOR_COUNT 7
>
> struct hv_input_set_partition_property {
> uint64_t partition_id;
> @@ -246,4 +250,105 @@ typedef struct hv_input_register_intercept_result {
> union hv_register_intercept_result_parameters parameters;
> } QEMU_PACKED hv_input_register_intercept_result;
>
> +/* Flags for dirty mask of hv_vp_register_page */
> +enum hv_x64_register_class_type {
> + HV_X64_REGISTER_CLASS_GENERAL = 0,
> + HV_X64_REGISTER_CLASS_IP = 1,
> + HV_X64_REGISTER_CLASS_XMM = 2,
> + HV_X64_REGISTER_CLASS_SEGMENT = 3,
> + HV_X64_REGISTER_CLASS_FLAGS = 4,
> +};
> +
> +union hv_vp_register_page_interrupt_vectors {
> + uint64_t as_uint64;
> + struct {
> + uint8_t vector_count;
> + uint8_t vector[HV_VP_REGISTER_PAGE_MAX_VECTOR_COUNT];
> + };
> +};
> +
> +struct hv_vp_register_page {
> + uint16_t version;
> + uint8_t isvalid;
> + uint8_t rsvdz;
> + uint32_t dirty;
> +
> + union {
> + struct {
> + /* General purpose registers (HV_X64_REGISTER_CLASS_GENERAL) */
> + union {
> + struct {
> + uint64_t rax;
> + uint64_t rcx;
> + uint64_t rdx;
> + uint64_t rbx;
> + uint64_t rsp;
> + uint64_t rbp;
> + uint64_t rsi;
> + uint64_t rdi;
> + uint64_t r8;
> + uint64_t r9;
> + uint64_t r10;
> + uint64_t r11;
> + uint64_t r12;
> + uint64_t r13;
> + uint64_t r14;
> + uint64_t r15;
> + } QEMU_PACKED;
> +
> + uint64_t gp_registers[16];
> + };
> + /* Instruction pointer (HV_X64_REGISTER_CLASS_IP) */
> + uint64_t rip;
> + /* Flags (HV_X64_REGISTER_CLASS_FLAGS) */
> + uint64_t rflags;
> + } QEMU_PACKED;
> +
> + uint64_t registers[18];
> + };
> + uint8_t reserved[8];
> + /* Volatile XMM registers (HV_X64_REGISTER_CLASS_XMM) */
> + union {
> + struct {
> + struct hv_u128 xmm0;
> + struct hv_u128 xmm1;
> + struct hv_u128 xmm2;
> + struct hv_u128 xmm3;
> + struct hv_u128 xmm4;
> + struct hv_u128 xmm5;
> + } QEMU_PACKED;
> +
> + struct hv_u128 xmm_registers[6];
> + };
> + /* Segment registers (HV_X64_REGISTER_CLASS_SEGMENT) */
> + union {
> + struct {
> + struct hv_x64_segment_register es;
> + struct hv_x64_segment_register cs;
> + struct hv_x64_segment_register ss;
> + struct hv_x64_segment_register ds;
> + struct hv_x64_segment_register fs;
> + struct hv_x64_segment_register gs;
> + } QEMU_PACKED;
> +
> + struct hv_x64_segment_register segment_registers[6];
> + };
> + /* Misc. control registers (cannot be set via this interface) */
> + uint64_t cr0;
> + uint64_t cr3;
> + uint64_t cr4;
> + uint64_t cr8;
> + uint64_t efer;
> + uint64_t dr7;
> + union hv_x64_pending_interruption_register pending_interruption;
> + union hv_x64_interrupt_state_register interrupt_state;
> + uint64_t instruction_emulation_hints;
> + uint64_t xfem;
> +
> + uint8_t reserved1[0x100];
> +
> + /* Interrupts injected as part of HvCallDispatchVp. */
> + union hv_vp_register_page_interrupt_vectors interrupt_vectors;
> +} QEMU_PACKED;
> +
> #endif /* HW_HYPERV_HVHDK_H */
> --
> 2.53.0
Reviewed-by: Magnus Kulke <magnuskulke@linux.microsoft.com>
next prev parent reply other threads:[~2026-05-06 10:38 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-05 18:50 [PATCH v2 0/7] target/i386/mshv: use hv_vp_register_page for fast register access Doru Blânzeanu
2026-05-05 18:50 ` [PATCH v2 1/7] target/i386/mshv: remove duplicate function for reading vcpu registers Doru Blânzeanu
2026-05-06 10:34 ` Magnus Kulke
2026-05-06 10:35 ` Magnus Kulke
2026-05-07 13:12 ` Anirudh Rayabharam
2026-05-05 18:50 ` [PATCH v2 2/7] accel/mshv: move vcpu arch specific initialization after vcpu creation Doru Blânzeanu
2026-05-06 14:31 ` Magnus Kulke
2026-05-07 13:12 ` Anirudh Rayabharam
2026-05-05 18:50 ` [PATCH v2 3/7] include/hw/hyperv: add hv_vp_register_page struct definition Doru Blânzeanu
2026-05-06 10:38 ` Magnus Kulke [this message]
2026-05-07 13:15 ` Anirudh Rayabharam
2026-05-05 18:50 ` [PATCH v2 4/7] target/i386/mshv: hv_vp_register_page setup for the vcpu Doru Blânzeanu
2026-05-06 14:36 ` Magnus Kulke
2026-05-05 18:50 ` [PATCH v2 5/7] target/i386/mshv: use the register page to get registers Doru Blânzeanu
2026-05-07 13:23 ` Anirudh Rayabharam
2026-05-05 18:50 ` [PATCH v2 6/7] target/i386/mshv: use the register page to set registers Doru Blânzeanu
2026-05-07 13:29 ` Anirudh Rayabharam
2026-05-05 18:50 ` [PATCH v2 7/7] target/i386/mshv: fix pio handlers clobbering device-modified registers Doru Blânzeanu
2026-05-06 14:38 ` Magnus Kulke
2026-05-06 14:43 ` [PATCH v2 0/7] target/i386/mshv: use hv_vp_register_page for fast register access Magnus Kulke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=afsaF3B52XxzXlkJ@example.com \
--to=magnuskulke@linux.microsoft.com \
--cc=dblanzeanu@linux.microsoft.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wei.liu@kernel.org \
--cc=zhao1.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.