History

virt: acrn: Introduce an ioctl to set vCPU registers state

A virtual CPU of User VM has different context due to the different registers state. ACRN userspace needs to set the virtual CPU registers state (e.g. giving a initial registers state to a virtual BSP of a User VM). HSM provides an ioctl ACRN_IOCTL_SET_VCPU_REGS to do the virtual CPU registers state setting. The ioctl passes the registers state from ACRN userspace to the hypervisor directly.

Shuo Liu committed 5 years ago

Commit 2ad2aae1 parent 9c5137a3 files · +165 −1Browse files

Showing the changes to include/uapi (1 of 3 files). Show all

Unified · Split

include/uapi/linux/acrn.h+119−0
@@ -38,6 +38,123 @@ struct acrn_vm_creation { · 37 unmodified lines
38 __u64 cpu_affinity;38 __u64 cpu_affinity;
39};39};
40 40
41/**
42 * struct acrn_gp_regs - General registers of a User VM
43 * @rax: Value of register RAX
44 * @rcx: Value of register RCX
45 * @rdx: Value of register RDX
46 * @rbx: Value of register RBX
47 * @rsp: Value of register RSP
48 * @rbp: Value of register RBP
49 * @rsi: Value of register RSI
50 * @rdi: Value of register RDI
51 * @r8: Value of register R8
52 * @r9: Value of register R9
53 * @r10: Value of register R10
54 * @r11: Value of register R11
55 * @r12: Value of register R12
56 * @r13: Value of register R13
57 * @r14: Value of register R14
58 * @r15: Value of register R15
59 */
60struct acrn_gp_regs {
61 __le64 rax;
62 __le64 rcx;
63 __le64 rdx;
64 __le64 rbx;
65 __le64 rsp;
66 __le64 rbp;
67 __le64 rsi;
68 __le64 rdi;
69 __le64 r8;
70 __le64 r9;
71 __le64 r10;
72 __le64 r11;
73 __le64 r12;
74 __le64 r13;
75 __le64 r14;
76 __le64 r15;
77};
78
79/**
80 * struct acrn_descriptor_ptr - Segment descriptor table of a User VM.
81 * @limit: Limit field.
82 * @base: Base field.
83 * @reserved: Reserved and must be 0.
84 */
85struct acrn_descriptor_ptr {
86 __le16 limit;
87 __le64 base;
88 __le16 reserved[3];
89} __attribute__ ((__packed__));
90
91/**
92 * struct acrn_regs - Registers structure of a User VM
93 * @gprs: General registers
94 * @gdt: Global Descriptor Table
95 * @idt: Interrupt Descriptor Table
96 * @rip: Value of register RIP
97 * @cs_base: Base of code segment selector
98 * @cr0: Value of register CR0
99 * @cr4: Value of register CR4
100 * @cr3: Value of register CR3
101 * @ia32_efer: Value of IA32_EFER MSR
102 * @rflags: Value of regsiter RFLAGS
103 * @reserved_64: Reserved and must be 0
104 * @cs_ar: Attribute field of code segment selector
105 * @cs_limit: Limit field of code segment selector
106 * @reserved_32: Reserved and must be 0
107 * @cs_sel: Value of code segment selector
108 * @ss_sel: Value of stack segment selector
109 * @ds_sel: Value of data segment selector
110 * @es_sel: Value of extra segment selector
111 * @fs_sel: Value of FS selector
112 * @gs_sel: Value of GS selector
113 * @ldt_sel: Value of LDT descriptor selector
114 * @tr_sel: Value of TSS descriptor selector
115 */
116struct acrn_regs {
117 struct acrn_gp_regs gprs;
118 struct acrn_descriptor_ptr gdt;
119 struct acrn_descriptor_ptr idt;
120
121 __le64 rip;
122 __le64 cs_base;
123 __le64 cr0;
124 __le64 cr4;
125 __le64 cr3;
126 __le64 ia32_efer;
127 __le64 rflags;
128 __le64 reserved_64[4];
129
130 __le32 cs_ar;
131 __le32 cs_limit;
132 __le32 reserved_32[3];
133
134 __le16 cs_sel;
135 __le16 ss_sel;
136 __le16 ds_sel;
137 __le16 es_sel;
138 __le16 fs_sel;
139 __le16 gs_sel;
140 __le16 ldt_sel;
141 __le16 tr_sel;
142};
143
144/**
145 * struct acrn_vcpu_regs - Info of vCPU registers state
146 * @vcpu_id: vCPU ID
147 * @reserved: Reserved and must be 0
148 * @vcpu_regs: vCPU registers state
149 *
150 * This structure will be passed to hypervisor directly.
151 */
152struct acrn_vcpu_regs {
153 __u16 vcpu_id;
154 __u16 reserved[3];
155 struct acrn_regs vcpu_regs;
156};
157
41/* The ioctl type, documented in ioctl-number.rst */158/* The ioctl type, documented in ioctl-number.rst */
42#define ACRN_IOCTL_TYPE 0xA2159#define ACRN_IOCTL_TYPE 0xA2
43 160
@@ -54,5 +171,7 @@ struct acrn_vm_creation { · 10 unmodified lines
54 _IO(ACRN_IOCTL_TYPE, 0x13)171 _IO(ACRN_IOCTL_TYPE, 0x13)
55#define ACRN_IOCTL_RESET_VM \172#define ACRN_IOCTL_RESET_VM \
56 _IO(ACRN_IOCTL_TYPE, 0x15)173 _IO(ACRN_IOCTL_TYPE, 0x15)
174#define ACRN_IOCTL_SET_VCPU_REGS \
175 _IOW(ACRN_IOCTL_TYPE, 0x16, struct acrn_vcpu_regs)
57 176
58#endif /* _UAPI_ACRN_H */177#endif /* _UAPI_ACRN_H */