On 1/14/19 8:18 AM, Peter Xu wrote: > 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, >
Moving msi_uninit() after timer_del(): Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com>