DM: release mmio data structure for pci bar

We didn't release mmio/io data structure related with PCI bar
of pci dev. Which could trigger memory leak when reboot UOS.

With the new patch, we release the mmio/io data structure
when pci core tries to deinit pci device.

Signed-off-by: Yin Fengwei <fengwei.yin@intel.com>
Acked-by: Eddie Dong <Eddie.dong@intel.com>
This commit is contained in:
Yin Fengwei 2018-03-30 12:16:26 +08:00 committed by Jack Ren
parent 3726a0f7a5
commit f0b74016d1
2 changed files with 17 additions and 0 deletions

View File

@ -665,6 +665,20 @@ pci_emul_alloc_pbar(struct pci_vdev *pdi, int idx, uint64_t hostbase,
return 0;
}
void
pci_emul_free_bars(struct pci_vdev *pdi)
{
int i;
for (i = 0; i < PCI_BARMAX; i++) {
if ((pdi->bar[i].type != PCIBAR_NONE) &&
(pdi->bar[i].type != PCIBAR_MEMHI64)){
unregister_bar(pdi, i);
pdi->bar[i].type = PCIBAR_NONE;
}
}
}
#define CAP_START_OFFSET 0x40
int
pci_emul_add_capability(struct pci_vdev *dev, u_char *capdata, int caplen)
@ -772,6 +786,8 @@ pci_emul_deinit(struct vmctx *ctx, struct pci_vdev_ops *ops, int bus, int slot,
(*ops->vdev_deinit)(ctx, fi->fi_devi, fi->fi_param);
if (fi->fi_param)
free(fi->fi_param);
pci_emul_free_bars(fi->fi_devi);
if (fi->fi_devi)
free(fi->fi_devi);
}

View File

@ -230,6 +230,7 @@ int pci_emul_alloc_bar(struct pci_vdev *pdi, int idx,
int pci_emul_alloc_pbar(struct pci_vdev *pdi, int idx,
uint64_t hostbase, enum pcibar_type type,
uint64_t size);
void pci_emul_free_bars(struct pci_vdev *pdi);
int pci_emul_add_capability(struct pci_vdev *dev, u_char *capdata,
int caplen);
int pci_emul_add_msicap(struct pci_vdev *pi, int msgnum);