I encountered an event loss problem during unplugging vfio devices: https://bugzilla.redhat.com/show_bug.cgi?id=1531393
I thought it should be a simple VT-d issue but I was wrong. The whole debugging leads me to these patches. Basically I think what we missed is that when unregistering memory listeners, we don't really call region_del() at all. Instead we just remove ourselves from the listener list. IMHO that's not enough. A clean unregister should undo all possible changes that have done during region_add(). That's patch 1. Patch 2 fixes a vfio issue when patch 1 is applied. I'm marking this change as RFC since it touches the core of memory somehow, on which I am not 100% sure about. E.g., I haven't tested all the listener users, so I'm not sure whether it may broke any use case. But what I'm sure is that it passes the docker tests on compiling/qtests, and it fixes the event loss that reported. Let's see whether I can get some feedback first. Please review. Thanks. Peter Xu (2): memory: do explicit cleanup when remove listeners vfio: listener unregister before unset container hw/vfio/common.c | 16 ++++++++++++---- memory.c | 24 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) -- 2.14.3