On Mon, Jan 14, 2019 at 08:02:23AM +0100, Markus Armbruster wrote: > Peter Xu <pet...@redhat.com> writes: > > > On Sun, Jan 13, 2019 at 10:36:41PM +0800, Fei Li wrote: > >> From: Fei Li <shirley17...@gmail.com> > >> > >> Let's supplement the msi_uninit() when failing to realize > >> the pci edu device. > >> > >> Cc: Markus Armbruster <arm...@redhat.com> > >> Cc: Peter Xu <pet...@redhat.com> > >> Cc: Michael S. Tsirkin <m...@redhat.com> > >> Cc: Marcel Apfelbaum <marcel.apfelb...@gmail.com> > >> Signed-off-by: Fei Li <shirley17...@gmail.com> > >> --- > >> hw/misc/edu.c | 1 + > >> 1 file changed, 1 insertion(+) > >> > >> diff --git a/hw/misc/edu.c b/hw/misc/edu.c > >> index cdcf550dd7..4feb7503de 100644 > >> --- a/hw/misc/edu.c > >> +++ b/hw/misc/edu.c > >> @@ -367,6 +367,7 @@ static void pci_edu_uninit(PCIDevice *pdev) > >> { > >> EduState *edu = EDU(pdev); > >> > >> + msi_uninit(pdev); > > > > It would be cleaner to me to call this after the join() since > > edu_fact_thread() could potentially use msi_*() helpers then the > > destructions follow the reverse order of init. > > Destruction in reverse creation order is good practice. > > This being the "QEMU educational PCI device", good practice is even more > desirable.
Very persuasive. With that, I'd like to withdraw my excuse of "msi_uninit() is optional" too. :) Fei, please feel free to pick my r-b if you want to repost, and IMHO you can also add: Reported-by: Markus Armbruster <arm...@redhat.com> Thanks, -- Peter Xu