Skip to content

Commit 1a1ee93

Browse files
junjiemao1lijinxia
authored andcommitted
HV: hypercall: make hypercall functions return int32_t
The error code in the hypervisor is 32-bit signed integers. To reduce implicit conversions, this patch make hcall_xxx returns int32_t, and finally converts it to uint64_t when assigned to rax whose semantics is properly defined in C99. Signed-off-by: Junjie Mao <junjie.mao@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
1 parent ad73bb5 commit 1a1ee93

File tree

4 files changed

+69
-66
lines changed

4 files changed

+69
-66
lines changed

hypervisor/arch/x86/guest/vmcall.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*/
1515
int vmcall_vmexit_handler(struct vcpu *vcpu)
1616
{
17-
int64_t ret = -EACCES;
17+
int32_t ret = -EACCES;
1818
struct vm *vm = vcpu->vm;
1919
struct run_context *cur_context =
2020
&vcpu->arch_vcpu.contexts[vcpu->arch_vcpu.cur_context];

hypervisor/common/hypercall.c

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ bool is_hypercall_from_ring0(void)
2525
return false;
2626
}
2727

28-
int64_t hcall_get_api_version(struct vm *vm, uint64_t param)
28+
int32_t hcall_get_api_version(struct vm *vm, uint64_t param)
2929
{
3030
struct hc_api_version version;
3131

@@ -44,7 +44,8 @@ int64_t hcall_get_api_version(struct vm *vm, uint64_t param)
4444
return 0;
4545
}
4646

47-
static int handle_vpic_irqline(struct vm *vm, uint32_t irq, enum irq_mode mode)
47+
static int32_t
48+
handle_vpic_irqline(struct vm *vm, uint32_t irq, enum irq_mode mode)
4849
{
4950
int32_t ret = -1;
5051

@@ -68,7 +69,7 @@ static int handle_vpic_irqline(struct vm *vm, uint32_t irq, enum irq_mode mode)
6869
return ret;
6970
}
7071

71-
static int
72+
static int32_t
7273
handle_vioapic_irqline(struct vm *vm, uint32_t irq, enum irq_mode mode)
7374
{
7475
int32_t ret = -1;
@@ -93,7 +94,8 @@ handle_vioapic_irqline(struct vm *vm, uint32_t irq, enum irq_mode mode)
9394
return ret;
9495
}
9596

96-
static int handle_virt_irqline(struct vm *vm, uint16_t target_vmid,
97+
static int32_t
98+
handle_virt_irqline(struct vm *vm, uint16_t target_vmid,
9799
struct acrn_irqline *param, enum irq_mode mode)
98100
{
99101
int32_t ret = 0;
@@ -131,9 +133,9 @@ static int handle_virt_irqline(struct vm *vm, uint16_t target_vmid,
131133
return ret;
132134
}
133135

134-
int64_t hcall_create_vm(struct vm *vm, uint64_t param)
136+
int32_t hcall_create_vm(struct vm *vm, uint64_t param)
135137
{
136-
int64_t ret = 0;
138+
int32_t ret = 0;
137139
struct vm *target_vm = NULL;
138140
/* VM are created from hv_main() directly
139141
* Here we just return the vmid for DM
@@ -170,9 +172,9 @@ int64_t hcall_create_vm(struct vm *vm, uint64_t param)
170172
return ret;
171173
}
172174

173-
int64_t hcall_destroy_vm(uint64_t vmid)
175+
int32_t hcall_destroy_vm(uint64_t vmid)
174176
{
175-
int64_t ret = 0;
177+
int32_t ret = 0;
176178
struct vm *target_vm = get_vm_from_vmid(vmid);
177179

178180
if (target_vm == NULL) {
@@ -183,9 +185,9 @@ int64_t hcall_destroy_vm(uint64_t vmid)
183185
return ret;
184186
}
185187

186-
int64_t hcall_resume_vm(uint64_t vmid)
188+
int32_t hcall_resume_vm(uint64_t vmid)
187189
{
188-
int64_t ret = 0;
190+
int32_t ret = 0;
189191
struct vm *target_vm = get_vm_from_vmid(vmid);
190192

191193
if (target_vm == NULL) {
@@ -200,7 +202,7 @@ int64_t hcall_resume_vm(uint64_t vmid)
200202
return ret;
201203
}
202204

203-
int64_t hcall_pause_vm(uint64_t vmid)
205+
int32_t hcall_pause_vm(uint64_t vmid)
204206
{
205207
struct vm *target_vm = get_vm_from_vmid(vmid);
206208

@@ -213,7 +215,7 @@ int64_t hcall_pause_vm(uint64_t vmid)
213215
return 0;
214216
}
215217

216-
int64_t hcall_create_vcpu(struct vm *vm, uint64_t vmid, uint64_t param)
218+
int32_t hcall_create_vcpu(struct vm *vm, uint64_t vmid, uint64_t param)
217219
{
218220
int32_t ret;
219221
uint16_t pcpu_id;
@@ -240,9 +242,9 @@ int64_t hcall_create_vcpu(struct vm *vm, uint64_t vmid, uint64_t param)
240242
return ret;
241243
}
242244

243-
int64_t hcall_assert_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
245+
int32_t hcall_assert_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
244246
{
245-
int64_t ret = 0;
247+
int32_t ret = 0;
246248
struct acrn_irqline irqline;
247249

248250
if (copy_from_gpa(vm, &irqline, param, sizeof(irqline)) != 0) {
@@ -254,9 +256,9 @@ int64_t hcall_assert_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
254256
return ret;
255257
}
256258

257-
int64_t hcall_deassert_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
259+
int32_t hcall_deassert_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
258260
{
259-
int64_t ret = 0;
261+
int32_t ret = 0;
260262
struct acrn_irqline irqline;
261263

262264
if (copy_from_gpa(vm, &irqline, param, sizeof(irqline)) != 0) {
@@ -268,9 +270,9 @@ int64_t hcall_deassert_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
268270
return ret;
269271
}
270272

271-
int64_t hcall_pulse_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
273+
int32_t hcall_pulse_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
272274
{
273-
int64_t ret = 0;
275+
int32_t ret = 0;
274276
struct acrn_irqline irqline;
275277

276278
if (copy_from_gpa(vm, &irqline, param, sizeof(irqline)) != 0) {
@@ -282,7 +284,7 @@ int64_t hcall_pulse_irqline(struct vm *vm, uint64_t vmid, uint64_t param)
282284
return ret;
283285
}
284286

285-
int64_t hcall_inject_msi(struct vm *vm, uint64_t vmid, uint64_t param)
287+
int32_t hcall_inject_msi(struct vm *vm, uint64_t vmid, uint64_t param)
286288
{
287289
int32_t ret = 0;
288290
struct acrn_msi_entry msi;
@@ -302,9 +304,9 @@ int64_t hcall_inject_msi(struct vm *vm, uint64_t vmid, uint64_t param)
302304
return ret;
303305
}
304306

305-
int64_t hcall_set_ioreq_buffer(struct vm *vm, uint64_t vmid, uint64_t param)
307+
int32_t hcall_set_ioreq_buffer(struct vm *vm, uint64_t vmid, uint64_t param)
306308
{
307-
int64_t ret = 0;
309+
int32_t ret = 0;
308310
uint64_t hpa = 0UL;
309311
struct acrn_set_ioreq_buffer iobuf;
310312
struct vm *target_vm = get_vm_from_vmid(vmid);
@@ -368,7 +370,7 @@ static void complete_request(struct vcpu *vcpu)
368370
resume_vcpu(vcpu);
369371
}
370372

371-
int64_t hcall_notify_req_finish(uint64_t vmid, uint64_t vcpu_id)
373+
int32_t hcall_notify_req_finish(uint64_t vmid, uint64_t vcpu_id)
372374
{
373375
union vhm_request_buffer *req_buf;
374376
struct vhm_request *req;
@@ -403,7 +405,8 @@ int64_t hcall_notify_req_finish(uint64_t vmid, uint64_t vcpu_id)
403405
return 0;
404406
}
405407

406-
static int64_t _set_vm_memmap(struct vm *vm, struct vm *target_vm,
408+
static int32_t
409+
_set_vm_memmap(struct vm *vm, struct vm *target_vm,
407410
struct vm_set_memmap *memmap)
408411
{
409412
uint64_t hpa, base_paddr;
@@ -459,7 +462,7 @@ static int64_t _set_vm_memmap(struct vm *vm, struct vm *target_vm,
459462
memmap->remote_gpa, memmap->length, memmap->type, attr);
460463
}
461464

462-
int64_t hcall_set_vm_memmap(struct vm *vm, uint64_t vmid, uint64_t param)
465+
int32_t hcall_set_vm_memmap(struct vm *vm, uint64_t vmid, uint64_t param)
463466
{
464467
struct vm_set_memmap memmap;
465468
struct vm *target_vm = get_vm_from_vmid(vmid);
@@ -488,7 +491,7 @@ int64_t hcall_set_vm_memmap(struct vm *vm, uint64_t vmid, uint64_t param)
488491
return _set_vm_memmap(vm, target_vm, &memmap);
489492
}
490493

491-
int64_t hcall_set_vm_memmaps(struct vm *vm, uint64_t param)
494+
int32_t hcall_set_vm_memmaps(struct vm *vm, uint64_t param)
492495
{
493496
struct set_memmaps set_memmaps;
494497
struct memory_map *regions;
@@ -531,9 +534,9 @@ int64_t hcall_set_vm_memmaps(struct vm *vm, uint64_t param)
531534
return 0;
532535
}
533536

534-
int64_t hcall_remap_pci_msix(struct vm *vm, uint64_t vmid, uint64_t param)
537+
int32_t hcall_remap_pci_msix(struct vm *vm, uint64_t vmid, uint64_t param)
535538
{
536-
int64_t ret = 0;
539+
int32_t ret = 0;
537540
struct acrn_vm_pci_msix_remap remap;
538541
struct ptdev_msi_info info;
539542
struct vm *target_vm = get_vm_from_vmid(vmid);
@@ -572,9 +575,9 @@ int64_t hcall_remap_pci_msix(struct vm *vm, uint64_t vmid, uint64_t param)
572575
return ret;
573576
}
574577

575-
int64_t hcall_gpa_to_hpa(struct vm *vm, uint64_t vmid, uint64_t param)
578+
int32_t hcall_gpa_to_hpa(struct vm *vm, uint64_t vmid, uint64_t param)
576579
{
577-
int64_t ret = 0;
580+
int32_t ret = 0;
578581
struct vm_gpa2hpa v_gpa2hpa;
579582
struct vm *target_vm = get_vm_from_vmid(vmid);
580583

@@ -597,9 +600,9 @@ int64_t hcall_gpa_to_hpa(struct vm *vm, uint64_t vmid, uint64_t param)
597600
return ret;
598601
}
599602

600-
int64_t hcall_assign_ptdev(struct vm *vm, uint64_t vmid, uint64_t param)
603+
int32_t hcall_assign_ptdev(struct vm *vm, uint64_t vmid, uint64_t param)
601604
{
602-
int64_t ret;
605+
int32_t ret;
603606
uint16_t bdf;
604607
struct vm *target_vm = get_vm_from_vmid(vmid);
605608

@@ -635,9 +638,9 @@ int64_t hcall_assign_ptdev(struct vm *vm, uint64_t vmid, uint64_t param)
635638
return ret;
636639
}
637640

638-
int64_t hcall_deassign_ptdev(struct vm *vm, uint64_t vmid, uint64_t param)
641+
int32_t hcall_deassign_ptdev(struct vm *vm, uint64_t vmid, uint64_t param)
639642
{
640-
int64_t ret = 0;
643+
int32_t ret = 0;
641644
uint16_t bdf;
642645
struct vm *target_vm = get_vm_from_vmid(vmid);
643646

@@ -655,9 +658,9 @@ int64_t hcall_deassign_ptdev(struct vm *vm, uint64_t vmid, uint64_t param)
655658
return ret;
656659
}
657660

658-
int64_t hcall_set_ptdev_intr_info(struct vm *vm, uint64_t vmid, uint64_t param)
661+
int32_t hcall_set_ptdev_intr_info(struct vm *vm, uint64_t vmid, uint64_t param)
659662
{
660-
int64_t ret = 0;
663+
int32_t ret = 0;
661664
struct hc_ptdev_irq irq;
662665
struct vm *target_vm = get_vm_from_vmid(vmid);
663666

@@ -689,10 +692,10 @@ int64_t hcall_set_ptdev_intr_info(struct vm *vm, uint64_t vmid, uint64_t param)
689692
return ret;
690693
}
691694

692-
int64_t
695+
int32_t
693696
hcall_reset_ptdev_intr_info(struct vm *vm, uint64_t vmid, uint64_t param)
694697
{
695-
int64_t ret = 0;
698+
int32_t ret = 0;
696699
struct hc_ptdev_irq irq;
697700
struct vm *target_vm = get_vm_from_vmid(vmid);
698701

@@ -723,7 +726,7 @@ hcall_reset_ptdev_intr_info(struct vm *vm, uint64_t vmid, uint64_t param)
723726
return ret;
724727
}
725728

726-
int64_t hcall_setup_sbuf(struct vm *vm, uint64_t param)
729+
int32_t hcall_setup_sbuf(struct vm *vm, uint64_t param)
727730
{
728731
struct sbuf_setup_param ssp;
729732
uint64_t *hva;
@@ -744,7 +747,7 @@ int64_t hcall_setup_sbuf(struct vm *vm, uint64_t param)
744747
return sbuf_share_setup(ssp.pcpu_id, ssp.sbuf_id, hva);
745748
}
746749

747-
int64_t hcall_get_cpu_pm_state(struct vm *vm, uint64_t cmd, uint64_t param)
750+
int32_t hcall_get_cpu_pm_state(struct vm *vm, uint64_t cmd, uint64_t param)
748751
{
749752
uint16_t target_vm_id;
750753
struct vm *target_vm;

hypervisor/common/trusty_hypercall.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/* this hcall is only come from trusty enabled vcpu itself, and cannot be
1111
* called from other vcpus
1212
*/
13-
int64_t hcall_world_switch(struct vcpu *vcpu)
13+
int32_t hcall_world_switch(struct vcpu *vcpu)
1414
{
1515
int32_t next_world_id = !(vcpu->arch_vcpu.cur_context);
1616

@@ -37,7 +37,7 @@ int64_t hcall_world_switch(struct vcpu *vcpu)
3737
/* this hcall is only come from trusty enabled vcpu itself, and cannot be
3838
* called from other vcpus
3939
*/
40-
int64_t hcall_initialize_trusty(struct vcpu *vcpu, uint64_t param)
40+
int32_t hcall_initialize_trusty(struct vcpu *vcpu, uint64_t param)
4141
{
4242
if (!vcpu->vm->sworld_control.sworld_enabled) {
4343
pr_err("%s, Secure World is not enabled!\n", __func__);

0 commit comments

Comments
 (0)