> +static int iavf_emu_update_status(int vfio_dev_id) { > + struct iavf_emudev *dev; > + int ret; > + > + dev = find_iavf_with_dev_id(vfio_dev_id); > + if (!dev) > + return -1; > + > + ret = iavf_emu_setup_mem_table(dev); > + if (ret) { > + EMU_IAVF_LOG(ERR, "Failed to set up memtable for " > + "device %d", dev->vfio->dev_id); > + return ret; > + } > + > + ret = iavf_emu_setup_irq(dev); In update callback, irq fds will be reinitialized here. Think about if the update happening during mailbox communication, the eventfd of mailbox will be cleared without notify.
> + if (ret) { > + EMU_IAVF_LOG(ERR, "Failed to set up irq for " > + "device %d", dev->vfio->dev_id); > + return ret; > + } > + > + dev->ops->update_status(dev->edev); > + > + return 0; > +}