Skip to content

Commit 19af3bc

Browse files
donshengacrnsi
authored andcommitted
HV: unify the sharing_mode_vpci_deinit and partition_mode_vpci_deinit code
Put the deinit code in deinit_prelaunched_vm_vpci() for both sos and pre-launched VMs, and remove sharing_mode_vpci_deinit() and partition_mode_vpci_deinit(). Rename functions used by deinit(): vhostbridge_deinit --> deinit_vhostbridge vmsi_deinit --> deinit_vmsi vmsix_deinit --> deinit_vmsix post_launched_vm_vpci_deinit --> deinit_post_launched_vm Tracked-On: #3056 Signed-off-by: dongshen <dongsheng.x.zhang@intel.com> Reviewed-by: Eddie Dong <eddie.dong@intel.com>
1 parent 3a6c63f commit 19af3bc

File tree

5 files changed

+24
-48
lines changed

5 files changed

+24
-48
lines changed

hypervisor/dm/vpci/vhostbridge.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ void init_vhostbridge(struct pci_vdev *vdev)
9292
}
9393
}
9494

95-
void vhostbridge_deinit(__unused const struct pci_vdev *vdev)
95+
void deinit_vhostbridge(__unused const struct pci_vdev *vdev)
9696
{
9797
}
9898

hypervisor/dm/vpci/vmsi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ int32_t vmsi_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, ui
166166
return ret;
167167
}
168168

169-
void vmsi_deinit(const struct pci_vdev *vdev)
169+
void deinit_vmsi(const struct pci_vdev *vdev)
170170
{
171171
if (has_msi_cap(vdev)) {
172172
ptirq_remove_msix_remapping(vdev->vpci->vm, vdev->vbdf.value, 1U);

hypervisor/dm/vpci/vmsix.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ void init_vmsix(struct pci_vdev *vdev)
351351
* @pre vdev->vpci != NULL
352352
* @pre vdev->vpci->vm != NULL
353353
*/
354-
void vmsix_deinit(const struct pci_vdev *vdev)
354+
void deinit_vmsix(const struct pci_vdev *vdev)
355355
{
356356
if (has_msix_cap(vdev)) {
357357
if (vdev->msix.table_count != 0U) {

hypervisor/dm/vpci/vpci.c

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
#include "vpci_priv.h"
3636

3737
static void init_vdev_for_pdev(struct pci_pdev *pdev, const void *vm);
38+
static void deinit_prelaunched_vm_vpci(const struct acrn_vm *vm);
39+
static void deinit_postlaunched_vm_vpci(const struct acrn_vm *vm);
3840

3941

4042
/**
@@ -245,15 +247,13 @@ void vpci_cleanup(const struct acrn_vm *vm)
245247
vm_config = get_vm_config(vm->vm_id);
246248
switch (vm_config->load_order) {
247249
case PRE_LAUNCHED_VM:
248-
partition_mode_vpci_deinit(vm);
249-
break;
250-
251250
case SOS_VM:
252-
sharing_mode_vpci_deinit(vm);
251+
/* deinit function for both SOS and pre-launched VMs (consider sos also as pre-launched) */
252+
deinit_prelaunched_vm_vpci(vm);
253253
break;
254254

255255
case POST_LAUNCHED_VM:
256-
post_launched_vm_vpci_deinit(vm);
256+
deinit_postlaunched_vm_vpci(vm);
257257
break;
258258

259259
default:
@@ -305,30 +305,6 @@ static void remove_vdev_pt_iommu_domain(const struct pci_vdev *vdev)
305305
}
306306
}
307307

308-
/**
309-
* @pre vm != NULL
310-
* @pre vm->vpci.pci_vdev_cnt <= CONFIG_MAX_PCI_DEV_NUM
311-
*/
312-
void partition_mode_vpci_deinit(const struct acrn_vm *vm)
313-
{
314-
struct pci_vdev *vdev;
315-
uint32_t i;
316-
317-
for (i = 0U; i < vm->vpci.pci_vdev_cnt; i++) {
318-
vdev = (struct pci_vdev *) &(vm->vpci.pci_vdevs[i]);
319-
320-
if (is_hostbridge(vdev)) {
321-
vhostbridge_deinit(vdev);
322-
} else {
323-
remove_vdev_pt_iommu_domain(vdev);
324-
325-
vmsi_deinit(vdev);
326-
327-
vmsix_deinit(vdev);
328-
}
329-
}
330-
}
331-
332308
/**
333309
* @pre vpci != NULL
334310
*/
@@ -499,21 +475,23 @@ static void init_vdev_for_pdev(struct pci_pdev *pdev, const void *vm)
499475
/**
500476
* @pre vm != NULL
501477
* @pre vm->vpci.pci_vdev_cnt <= CONFIG_MAX_PCI_DEV_NUM
502-
* @pre is_sos_vm(vm) == true
478+
* @pre is_sos_vm(vm) || is_prelaunched_vm(vm)
503479
*/
504-
void sharing_mode_vpci_deinit(const struct acrn_vm *vm)
480+
static void deinit_prelaunched_vm_vpci(const struct acrn_vm *vm)
505481
{
506482
struct pci_vdev *vdev;
507483
uint32_t i;
508484

509485
for (i = 0U; i < vm->vpci.pci_vdev_cnt; i++) {
510-
vdev = (struct pci_vdev *)&(vm->vpci.pci_vdevs[i]);
511-
512-
remove_vdev_pt_iommu_domain(vdev);
486+
vdev = (struct pci_vdev *) &(vm->vpci.pci_vdevs[i]);
513487

514-
vmsi_deinit(vdev);
488+
deinit_vhostbridge(vdev);
489+
deinit_vmsi(vdev);
490+
deinit_vmsix(vdev);
515491

516-
vmsix_deinit(vdev);
492+
if ((is_prelaunched_vm(vm) && !is_hostbridge(vdev)) || is_sos_vm(vm)) {
493+
remove_vdev_pt_iommu_domain(vdev);
494+
}
517495
}
518496
}
519497

@@ -522,7 +500,7 @@ void sharing_mode_vpci_deinit(const struct acrn_vm *vm)
522500
* @pre vm->vpci.pci_vdev_cnt <= CONFIG_MAX_PCI_DEV_NUM
523501
* @pre is_postlaunched_vm(vm) == true
524502
*/
525-
void post_launched_vm_vpci_deinit(const struct acrn_vm *vm)
503+
static void deinit_postlaunched_vm_vpci(const struct acrn_vm *vm)
526504
{
527505
struct acrn_vm *sos_vm;
528506
uint32_t i;
@@ -551,12 +529,13 @@ void post_launched_vm_vpci_deinit(const struct acrn_vm *vm)
551529
panic("failed to assign iommu device!");
552530
}
553531

554-
vmsi_deinit(vdev);
532+
deinit_vmsi(vdev);
555533

556-
vmsix_deinit(vdev);
534+
deinit_vmsix(vdev);
557535

558536
/* Move vdev pointers back to SOS*/
559537
vdev->vpci = (struct acrn_vpci *) &sos_vm->vpci;
538+
560539
/* vbdf equals to pbdf in sos */
561540
vdev->vbdf.value = vdev->pdev->bdf.value;
562541
}

hypervisor/dm/vpci/vpci_priv.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ static inline bool is_hostbridge(const struct pci_vdev *vdev)
8686
void init_vhostbridge(struct pci_vdev *vdev);
8787
int32_t vhostbridge_cfgread(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t *val);
8888
int32_t vhostbridge_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t val);
89-
void vhostbridge_deinit(__unused const struct pci_vdev *vdev);
89+
void deinit_vhostbridge(__unused const struct pci_vdev *vdev);
9090

9191
void init_vdev_pt(struct pci_vdev *vdev);
9292
int32_t vdev_pt_cfgread(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t *val);
@@ -95,14 +95,14 @@ int32_t vdev_pt_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes,
9595
void init_vmsi(struct pci_vdev *vdev);
9696
int32_t vmsi_cfgread(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t *val);
9797
int32_t vmsi_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t val);
98-
void vmsi_deinit(const struct pci_vdev *vdev);
98+
void deinit_vmsi(const struct pci_vdev *vdev);
9999

100100
void init_vmsix(struct pci_vdev *vdev);
101101
void vdev_pt_remap_msix_table_bar(struct pci_vdev *vdev);
102102
int32_t vmsix_table_mmio_access_handler(struct io_request *io_req, void *handler_private_data);
103103
int32_t vmsix_cfgread(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t *val);
104104
int32_t vmsix_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t val);
105-
void vmsix_deinit(const struct pci_vdev *vdev);
105+
void deinit_vmsix(const struct pci_vdev *vdev);
106106

107107
uint32_t pci_vdev_read_cfg(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes);
108108
void pci_vdev_write_cfg(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t val);
@@ -115,13 +115,10 @@ void partition_mode_cfgread(const struct acrn_vpci *vpci, union pci_bdf vbdf,
115115
uint32_t offset, uint32_t bytes, uint32_t *val);
116116
void partition_mode_cfgwrite(const struct acrn_vpci *vpci, union pci_bdf vbdf,
117117
uint32_t offset, uint32_t bytes, uint32_t val);
118-
void partition_mode_vpci_deinit(const struct acrn_vm *vm);
119118

120119
void sharing_mode_cfgread(struct acrn_vpci *vpci, union pci_bdf bdf,
121120
uint32_t offset, uint32_t bytes, uint32_t *val);
122121
void sharing_mode_cfgwrite(__unused struct acrn_vpci *vpci, union pci_bdf bdf,
123122
uint32_t offset, uint32_t bytes, uint32_t val);
124-
void sharing_mode_vpci_deinit(const struct acrn_vm *vm);
125-
void post_launched_vm_vpci_deinit(const struct acrn_vm *vm);
126123

127124
#endif /* VPCI_PRIV_H_ */

0 commit comments

Comments
 (0)