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>
This commit is contained in:
dongshen 2019-05-14 14:51:11 -07:00 committed by ACRN System Integration
parent 3a6c63f2d8
commit 19af3bc8aa
5 changed files with 24 additions and 48 deletions

View File

@ -92,7 +92,7 @@ void init_vhostbridge(struct pci_vdev *vdev)
}
}
void vhostbridge_deinit(__unused const struct pci_vdev *vdev)
void deinit_vhostbridge(__unused const struct pci_vdev *vdev)
{
}

View File

@ -166,7 +166,7 @@ int32_t vmsi_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, ui
return ret;
}
void vmsi_deinit(const struct pci_vdev *vdev)
void deinit_vmsi(const struct pci_vdev *vdev)
{
if (has_msi_cap(vdev)) {
ptirq_remove_msix_remapping(vdev->vpci->vm, vdev->vbdf.value, 1U);

View File

@ -351,7 +351,7 @@ void init_vmsix(struct pci_vdev *vdev)
* @pre vdev->vpci != NULL
* @pre vdev->vpci->vm != NULL
*/
void vmsix_deinit(const struct pci_vdev *vdev)
void deinit_vmsix(const struct pci_vdev *vdev)
{
if (has_msix_cap(vdev)) {
if (vdev->msix.table_count != 0U) {

View File

@ -35,6 +35,8 @@
#include "vpci_priv.h"
static void init_vdev_for_pdev(struct pci_pdev *pdev, const void *vm);
static void deinit_prelaunched_vm_vpci(const struct acrn_vm *vm);
static void deinit_postlaunched_vm_vpci(const struct acrn_vm *vm);
/**
@ -245,15 +247,13 @@ void vpci_cleanup(const struct acrn_vm *vm)
vm_config = get_vm_config(vm->vm_id);
switch (vm_config->load_order) {
case PRE_LAUNCHED_VM:
partition_mode_vpci_deinit(vm);
break;
case SOS_VM:
sharing_mode_vpci_deinit(vm);
/* deinit function for both SOS and pre-launched VMs (consider sos also as pre-launched) */
deinit_prelaunched_vm_vpci(vm);
break;
case POST_LAUNCHED_VM:
post_launched_vm_vpci_deinit(vm);
deinit_postlaunched_vm_vpci(vm);
break;
default:
@ -305,30 +305,6 @@ static void remove_vdev_pt_iommu_domain(const struct pci_vdev *vdev)
}
}
/**
* @pre vm != NULL
* @pre vm->vpci.pci_vdev_cnt <= CONFIG_MAX_PCI_DEV_NUM
*/
void partition_mode_vpci_deinit(const struct acrn_vm *vm)
{
struct pci_vdev *vdev;
uint32_t i;
for (i = 0U; i < vm->vpci.pci_vdev_cnt; i++) {
vdev = (struct pci_vdev *) &(vm->vpci.pci_vdevs[i]);
if (is_hostbridge(vdev)) {
vhostbridge_deinit(vdev);
} else {
remove_vdev_pt_iommu_domain(vdev);
vmsi_deinit(vdev);
vmsix_deinit(vdev);
}
}
}
/**
* @pre vpci != NULL
*/
@ -499,9 +475,9 @@ static void init_vdev_for_pdev(struct pci_pdev *pdev, const void *vm)
/**
* @pre vm != NULL
* @pre vm->vpci.pci_vdev_cnt <= CONFIG_MAX_PCI_DEV_NUM
* @pre is_sos_vm(vm) == true
* @pre is_sos_vm(vm) || is_prelaunched_vm(vm)
*/
void sharing_mode_vpci_deinit(const struct acrn_vm *vm)
static void deinit_prelaunched_vm_vpci(const struct acrn_vm *vm)
{
struct pci_vdev *vdev;
uint32_t i;
@ -509,11 +485,13 @@ void sharing_mode_vpci_deinit(const struct acrn_vm *vm)
for (i = 0U; i < vm->vpci.pci_vdev_cnt; i++) {
vdev = (struct pci_vdev *) &(vm->vpci.pci_vdevs[i]);
deinit_vhostbridge(vdev);
deinit_vmsi(vdev);
deinit_vmsix(vdev);
if ((is_prelaunched_vm(vm) && !is_hostbridge(vdev)) || is_sos_vm(vm)) {
remove_vdev_pt_iommu_domain(vdev);
vmsi_deinit(vdev);
vmsix_deinit(vdev);
}
}
}
@ -522,7 +500,7 @@ void sharing_mode_vpci_deinit(const struct acrn_vm *vm)
* @pre vm->vpci.pci_vdev_cnt <= CONFIG_MAX_PCI_DEV_NUM
* @pre is_postlaunched_vm(vm) == true
*/
void post_launched_vm_vpci_deinit(const struct acrn_vm *vm)
static void deinit_postlaunched_vm_vpci(const struct acrn_vm *vm)
{
struct acrn_vm *sos_vm;
uint32_t i;
@ -551,12 +529,13 @@ void post_launched_vm_vpci_deinit(const struct acrn_vm *vm)
panic("failed to assign iommu device!");
}
vmsi_deinit(vdev);
deinit_vmsi(vdev);
vmsix_deinit(vdev);
deinit_vmsix(vdev);
/* Move vdev pointers back to SOS*/
vdev->vpci = (struct acrn_vpci *) &sos_vm->vpci;
/* vbdf equals to pbdf in sos */
vdev->vbdf.value = vdev->pdev->bdf.value;
}

View File

@ -86,7 +86,7 @@ static inline bool is_hostbridge(const struct pci_vdev *vdev)
void init_vhostbridge(struct pci_vdev *vdev);
int32_t vhostbridge_cfgread(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t *val);
int32_t vhostbridge_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t val);
void vhostbridge_deinit(__unused const struct pci_vdev *vdev);
void deinit_vhostbridge(__unused const struct pci_vdev *vdev);
void init_vdev_pt(struct pci_vdev *vdev);
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,
void init_vmsi(struct pci_vdev *vdev);
int32_t vmsi_cfgread(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t *val);
int32_t vmsi_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t val);
void vmsi_deinit(const struct pci_vdev *vdev);
void deinit_vmsi(const struct pci_vdev *vdev);
void init_vmsix(struct pci_vdev *vdev);
void vdev_pt_remap_msix_table_bar(struct pci_vdev *vdev);
int32_t vmsix_table_mmio_access_handler(struct io_request *io_req, void *handler_private_data);
int32_t vmsix_cfgread(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t *val);
int32_t vmsix_cfgwrite(struct pci_vdev *vdev, uint32_t offset, uint32_t bytes, uint32_t val);
void vmsix_deinit(const struct pci_vdev *vdev);
void deinit_vmsix(const struct pci_vdev *vdev);
uint32_t pci_vdev_read_cfg(const struct pci_vdev *vdev, uint32_t offset, uint32_t bytes);
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,
uint32_t offset, uint32_t bytes, uint32_t *val);
void partition_mode_cfgwrite(const struct acrn_vpci *vpci, union pci_bdf vbdf,
uint32_t offset, uint32_t bytes, uint32_t val);
void partition_mode_vpci_deinit(const struct acrn_vm *vm);
void sharing_mode_cfgread(struct acrn_vpci *vpci, union pci_bdf bdf,
uint32_t offset, uint32_t bytes, uint32_t *val);
void sharing_mode_cfgwrite(__unused struct acrn_vpci *vpci, union pci_bdf bdf,
uint32_t offset, uint32_t bytes, uint32_t val);
void sharing_mode_vpci_deinit(const struct acrn_vm *vm);
void post_launched_vm_vpci_deinit(const struct acrn_vm *vm);
#endif /* VPCI_PRIV_H_ */