hv: dm: Use new ioctl ACRN_IOCTL_SET_VCPU_REGS

struct acrn_set_vcpu_regs	->	struct acrn_vcpu_regs
struct acrn_vcpu_regs		->	struct acrn_regs
IC_SET_VCPU_REGS		->	ACRN_IOCTL_SET_VCPU_REGS

Tracked-On: #6282
Signed-off-by: Shuo A Liu <shuo.a.liu@intel.com>
This commit is contained in:
Shuo A Liu 2021-07-07 14:02:31 +08:00 committed by wenlingz
parent f476ca55ab
commit 107cae316a
12 changed files with 23 additions and 26 deletions

View File

@ -310,7 +310,7 @@ acrn_sw_load_bzimage(struct vmctx *ctx)
{ {
int ret, setup_size; int ret, setup_size;
memset(&ctx->bsp_regs, 0, sizeof(struct acrn_set_vcpu_regs)); memset(&ctx->bsp_regs, 0, sizeof(struct acrn_vcpu_regs));
ctx->bsp_regs.vcpu_id = 0; ctx->bsp_regs.vcpu_id = 0;
if (with_bootargs) { if (with_bootargs) {

View File

@ -272,7 +272,7 @@ acrn_sw_load_elf(struct vmctx *ctx)
/* set guest bsp state. Will call hypercall set bsp state /* set guest bsp state. Will call hypercall set bsp state
* after bsp is created. * after bsp is created.
*/ */
memset(&ctx->bsp_regs, 0, sizeof( struct acrn_set_vcpu_regs)); memset(&ctx->bsp_regs, 0, sizeof( struct acrn_vcpu_regs));
ctx->bsp_regs.vcpu_id = 0; ctx->bsp_regs.vcpu_id = 0;
memcpy(ctx->baseaddr + GDT_LOAD_OFF(ctx), &acrn_init_gdt, memcpy(ctx->baseaddr + GDT_LOAD_OFF(ctx), &acrn_init_gdt,

View File

@ -299,7 +299,7 @@ acrn_sw_load_ovmf(struct vmctx *ctx)
/* set guest bsp state. Will call hypercall set bsp state /* set guest bsp state. Will call hypercall set bsp state
* after bsp is created. * after bsp is created.
*/ */
memset(&ctx->bsp_regs, 0, sizeof(struct acrn_set_vcpu_regs)); memset(&ctx->bsp_regs, 0, sizeof(struct acrn_vcpu_regs));
ctx->bsp_regs.vcpu_id = 0; ctx->bsp_regs.vcpu_id = 0;
/* CR0_ET | CR0_NE */ /* CR0_ET | CR0_NE */

View File

@ -297,7 +297,7 @@ acrn_sw_load_vsbl(struct vmctx *ctx)
/* set guest bsp state. Will call hypercall set bsp state /* set guest bsp state. Will call hypercall set bsp state
* after bsp is created. * after bsp is created.
*/ */
memset(&ctx->bsp_regs, 0, sizeof( struct acrn_set_vcpu_regs)); memset(&ctx->bsp_regs, 0, sizeof( struct acrn_vcpu_regs));
ctx->bsp_regs.vcpu_id = 0; ctx->bsp_regs.vcpu_id = 0;
/* CR0_ET | CR0_NE */ /* CR0_ET | CR0_NE */

View File

@ -642,9 +642,9 @@ vm_reset_ptdev_intx_info(struct vmctx *ctx, uint16_t virt_bdf, uint16_t phys_bdf
} }
int int
vm_set_vcpu_regs(struct vmctx *ctx, struct acrn_set_vcpu_regs *vcpu_regs) vm_set_vcpu_regs(struct vmctx *ctx, struct acrn_vcpu_regs *vcpu_regs)
{ {
return ioctl(ctx->fd, IC_SET_VCPU_REGS, vcpu_regs); return ioctl(ctx->fd, ACRN_IOCTL_SET_VCPU_REGS, vcpu_regs);
} }
int int

View File

@ -72,7 +72,6 @@
#define ACRN_IOCTL_GET_PLATFORM_INFO \ #define ACRN_IOCTL_GET_PLATFORM_INFO \
_IOR(ACRN_IOCTL_TYPE, 0x03, struct acrn_platform_info) _IOR(ACRN_IOCTL_TYPE, 0x03, struct acrn_platform_info)
#define IC_ID_VM_BASE 0x10UL
#define ACRN_IOCTL_CREATE_VM \ #define ACRN_IOCTL_CREATE_VM \
_IOWR(ACRN_IOCTL_TYPE, 0x10, struct acrn_vm_creation) _IOWR(ACRN_IOCTL_TYPE, 0x10, struct acrn_vm_creation)
#define ACRN_IOCTL_DESTROY_VM \ #define ACRN_IOCTL_DESTROY_VM \
@ -83,8 +82,8 @@
_IO(ACRN_IOCTL_TYPE, 0x13) _IO(ACRN_IOCTL_TYPE, 0x13)
#define ACRN_IOCTL_RESET_VM \ #define ACRN_IOCTL_RESET_VM \
_IO(ACRN_IOCTL_TYPE, 0x15) _IO(ACRN_IOCTL_TYPE, 0x15)
#define ACRN_IOCTL_SET_VCPU_REGS \
#define IC_SET_VCPU_REGS _IC_ID(IC_ID, IC_ID_VM_BASE + 0x06) _IOW(ACRN_IOCTL_TYPE, 0x16, struct acrn_vcpu_regs)
/* IRQ and Interrupts */ /* IRQ and Interrupts */
#define IC_ID_IRQ_BASE 0x20UL #define IC_ID_IRQ_BASE 0x20UL

View File

@ -67,7 +67,7 @@ struct vmctx {
void *tpm_dev; void *tpm_dev;
/* BSP state. guest loader needs to fill it */ /* BSP state. guest loader needs to fill it */
struct acrn_set_vcpu_regs bsp_regs; struct acrn_vcpu_regs bsp_regs;
/* if gvt-g is enabled for current VM */ /* if gvt-g is enabled for current VM */
bool gvt_enabled; bool gvt_enabled;
@ -142,7 +142,7 @@ int vm_remove_hv_vdev(struct vmctx *ctx, struct acrn_emul_dev *dev);
int acrn_parse_cpu_affinity(char *arg); int acrn_parse_cpu_affinity(char *arg);
uint64_t vm_get_cpu_affinity_dm(void); uint64_t vm_get_cpu_affinity_dm(void);
int vm_set_vcpu_regs(struct vmctx *ctx, struct acrn_set_vcpu_regs *cpu_regs); int vm_set_vcpu_regs(struct vmctx *ctx, struct acrn_vcpu_regs *cpu_regs);
int vm_get_cpu_state(struct vmctx *ctx, void *state_buf); int vm_get_cpu_state(struct vmctx *ctx, void *state_buf);
int vm_intr_monitor(struct vmctx *ctx, void *intr_buf); int vm_intr_monitor(struct vmctx *ctx, void *intr_buf);

View File

@ -568,7 +568,7 @@ For a guest vCPU's state initialization:
- If it's AP, then it will always start from real mode, and the start - If it's AP, then it will always start from real mode, and the start
vector will always come from vlapic INIT-SIPI emulation. vector will always come from vlapic INIT-SIPI emulation.
.. doxygenstruct:: acrn_vcpu_regs .. doxygenstruct:: acrn_regs
:project: Project ACRN :project: Project ACRN
.. list-table:: .. list-table::

View File

@ -323,7 +323,7 @@ static void init_xsave(struct acrn_vcpu *vcpu)
ectx->xs_area.xsave_hdr.hdr.xcomp_bv |= XSAVE_COMPACTED_FORMAT; ectx->xs_area.xsave_hdr.hdr.xcomp_bv |= XSAVE_COMPACTED_FORMAT;
} }
void set_vcpu_regs(struct acrn_vcpu *vcpu, struct acrn_vcpu_regs *vcpu_regs) void set_vcpu_regs(struct acrn_vcpu *vcpu, struct acrn_regs *vcpu_regs)
{ {
struct ext_context *ectx; struct ext_context *ectx;
struct run_context *ctx; struct run_context *ctx;
@ -406,7 +406,7 @@ void set_vcpu_regs(struct acrn_vcpu *vcpu, struct acrn_vcpu_regs *vcpu_regs)
vcpu_regs->cr0); vcpu_regs->cr0);
} }
static struct acrn_vcpu_regs realmode_init_vregs = { static struct acrn_regs realmode_init_vregs = {
.gdt = { .gdt = {
.limit = 0xFFFFU, .limit = 0xFFFFU,
.base = 0UL, .base = 0UL,
@ -432,7 +432,7 @@ static uint64_t init_vgdt[] = {
0x00CF93000000FFFFUL, /* Linear Data */ 0x00CF93000000FFFFUL, /* Linear Data */
}; };
static struct acrn_vcpu_regs protect_mode_init_vregs = { static struct acrn_regs protect_mode_init_vregs = {
.cs_ar = PROTECTED_MODE_CODE_SEG_AR, .cs_ar = PROTECTED_MODE_CODE_SEG_AR,
.cs_limit = PROTECTED_MODE_SEG_LIMIT, .cs_limit = PROTECTED_MODE_SEG_LIMIT,
.cs_sel = 0x10U, .cs_sel = 0x10U,
@ -463,10 +463,10 @@ void reset_vcpu_regs(struct acrn_vcpu *vcpu)
void init_vcpu_protect_mode_regs(struct acrn_vcpu *vcpu, uint64_t vgdt_base_gpa) void init_vcpu_protect_mode_regs(struct acrn_vcpu *vcpu, uint64_t vgdt_base_gpa)
{ {
struct acrn_vcpu_regs vcpu_regs; struct acrn_regs vcpu_regs;
(void)memcpy_s((void *)&vcpu_regs, sizeof(struct acrn_vcpu_regs), (void)memcpy_s((void *)&vcpu_regs, sizeof(struct acrn_regs),
(void *)&protect_mode_init_vregs, sizeof(struct acrn_vcpu_regs)); (void *)&protect_mode_init_vregs, sizeof(struct acrn_regs));
vcpu_regs.gdt.base = vgdt_base_gpa; vcpu_regs.gdt.base = vgdt_base_gpa;
vcpu_regs.gdt.limit = sizeof(init_vgdt) - 1U; vcpu_regs.gdt.limit = sizeof(init_vgdt) - 1U;

View File

@ -419,7 +419,7 @@ int32_t hcall_set_vcpu_regs(struct acrn_vcpu *vcpu, struct acrn_vm *target_vm,
__unused uint64_t param1, uint64_t param2) __unused uint64_t param1, uint64_t param2)
{ {
struct acrn_vm *vm = vcpu->vm; struct acrn_vm *vm = vcpu->vm;
struct acrn_set_vcpu_regs vcpu_regs; struct acrn_vcpu_regs vcpu_regs;
struct acrn_vcpu *target_vcpu; struct acrn_vcpu *target_vcpu;
int32_t ret = -1; int32_t ret = -1;

View File

@ -557,7 +557,7 @@ void vcpu_clear_eoi_exit_bitmap(struct acrn_vcpu *vcpu, uint32_t vector);
* *
* @return None * @return None
*/ */
void set_vcpu_regs(struct acrn_vcpu *vcpu, struct acrn_vcpu_regs *vcpu_regs); void set_vcpu_regs(struct acrn_vcpu *vcpu, struct acrn_regs *vcpu_regs);
/** /**
* @brief reset all the vcpu registers * @brief reset all the vcpu registers

View File

@ -418,7 +418,7 @@ struct acrn_descriptor_ptr {
/** /**
* @brief registers info for vcpu. * @brief registers info for vcpu.
*/ */
struct acrn_vcpu_regs { struct acrn_regs {
struct acrn_gp_regs gprs; struct acrn_gp_regs gprs;
struct acrn_descriptor_ptr gdt; struct acrn_descriptor_ptr gdt;
struct acrn_descriptor_ptr idt; struct acrn_descriptor_ptr idt;
@ -445,8 +445,6 @@ struct acrn_vcpu_regs {
uint16_t gs_sel; uint16_t gs_sel;
uint16_t ldt_sel; uint16_t ldt_sel;
uint16_t tr_sel; uint16_t tr_sel;
uint16_t reserved_16[4];
}; };
/** /**
@ -454,15 +452,15 @@ struct acrn_vcpu_regs {
* *
* the pamameter for HC_SET_VCPU_STATE * the pamameter for HC_SET_VCPU_STATE
*/ */
struct acrn_set_vcpu_regs { struct acrn_vcpu_regs {
/** the virtual CPU ID for the VCPU to set state */ /** the virtual CPU ID for the VCPU to set state */
uint16_t vcpu_id; uint16_t vcpu_id;
/** reserved space to make cpu_state aligned to 8 bytes */ /** reserved space to make cpu_state aligned to 8 bytes */
uint16_t reserved0[3]; uint16_t reserved[3];
/** the structure to hold vcpu state */ /** the structure to hold vcpu state */
struct acrn_vcpu_regs vcpu_regs; struct acrn_regs vcpu_regs;
} __aligned(8); } __aligned(8);
/** /**