On Tue, Aug 19, 2014 at 05:41:45PM +0800, arei.gong...@huawei.com wrote: > From: Gonglei <arei.gong...@huawei.com> > > It's enough of reporting an error. Assert() is not acceptable > because the error is not a fatal error. > > Signed-off-by: Gonglei <arei.gong...@huawei.com> > --- > hw/pci/pcie.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c > index a123c01..7b46140 100644 > --- a/hw/pci/pcie.c > +++ b/hw/pci/pcie.c > @@ -254,7 +254,11 @@ void pcie_cap_slot_hotplug_cb(HotplugHandler > *hotplug_dev, DeviceState *dev, > * Right now, only a device of function = 0 is allowed to be > * hot plugged/unplugged. > */ > - assert(PCI_FUNC(pci_dev->devfn) == 0); > + if (PCI_FUNC(pci_dev->devfn) != 0) { > + error_setg(errp, "Unsupported device function %d for PCIe > hotplugging, " > + "only supported function 0", PCI_FUNC(pci_dev->devfn)); > + return; > + }
Unplug of multifunction devices really should work. Drop this assert and see what happens. For hot-plug we don't have good APIs yet but we really should define them rather than add more code that we have to later remove. > pci_word_test_and_set_mask(exp_cap + PCI_EXP_SLTSTA, > PCI_EXP_SLTSTA_PDS); > -- > 1.7.12.4 >