mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 12:05:17 +00:00
qemu_hotplug: Don't free the PCI device structure after hot-unplug
The pciDevice structure corresponding to the device being hot-unplugged was freed after it was "stolen" from activeList. The pointer was still used for eg-inactive list. This patch removes the free of the structure and frees it only if reset fails on the device. (cherry picked from commit db19417fc012416639c2230e5f19717b84245ce5)
This commit is contained in:
parent
67f5578681
commit
3600eec4d1
@ -2004,13 +2004,16 @@ qemuDomainDetachHostPciDevice(struct qemud_driver *driver,
|
|||||||
subsys->u.pci.slot, subsys->u.pci.function);
|
subsys->u.pci.slot, subsys->u.pci.function);
|
||||||
if (pci) {
|
if (pci) {
|
||||||
activePci = pciDeviceListSteal(driver->activePciHostdevs, pci);
|
activePci = pciDeviceListSteal(driver->activePciHostdevs, pci);
|
||||||
if (pciResetDevice(activePci, driver->activePciHostdevs,
|
if (activePci &&
|
||||||
driver->inactivePciHostdevs) == 0)
|
pciResetDevice(activePci, driver->activePciHostdevs,
|
||||||
|
driver->inactivePciHostdevs) == 0) {
|
||||||
qemuReattachPciDevice(activePci, driver);
|
qemuReattachPciDevice(activePci, driver);
|
||||||
else
|
} else {
|
||||||
|
/* reset of the device failed, treat it as if it was returned */
|
||||||
|
pciFreeDevice(activePci);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
}
|
||||||
pciFreeDevice(pci);
|
pciFreeDevice(pci);
|
||||||
pciFreeDevice(activePci);
|
|
||||||
} else {
|
} else {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user