> +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;
> +}

Reply via email to