On Tue, 13 May 2025 15:12:11 +0200
David Hildenbrand <da...@redhat.com> wrote:

> On 13.05.25 14:13, Igor Mammedov wrote:
> > On Mon,  3 Mar 2025 13:02:17 -0500
> > yuanminghao <yuanm...@chinatelecom.cn> wrote:
> >   
> >>>> Global used_memslots or used_shared_memslots is updated to 0 unexpectly  
> >>>
> >>> it shouldn't be 0 in practice, as it comes from number of RAM regions VM 
> >>> has.
> >>> It's likely a bug somewhere else.  
> > 
> > I haven't touched this code for a long time, but I'd say if we consider 
> > multiple
> > devices, we shouldn't do following:
> > 
> > static void vhost_commit(MemoryListener *listener)
> >      ...
> >      if (dev->vhost_ops->vhost_backend_no_private_memslots &&
> >          dev->vhost_ops->vhost_backend_no_private_memslots(dev)) {
> >          used_shared_memslots = dev->mem->nregions;
> >      } else {
> >          used_memslots = dev->mem->nregions;
> >      }
> > 
> > where value dev->mem->nregions gets is well hidden/obscured
> > and hard to trace where tail ends => fragile.
> > 
> > CCing David (accidental victim) who rewrote this part the last time,
> > perhaps he can suggest a better way to fix the issue.  
> 
> I think the original idea is that all devices (of on type: private vs. 
> non-private memslots) have the same number of memslots.
> 
> This avoids having to loop over all devices to figure out the number of 
> memslots.
> 
> ... but in vhost_get_free_memslots() we already loop over all devices.
> 
> The check in vhost_dev_init() needs to be taken care of.
> 
> So maybe we can get rid of both variables completely?

looks reasonable to me,  (instead of current state which is
juggling with  dev->mem->nregions that can become 0 on unplug
as it was reported).

David,
do you have time to fix it?


Reply via email to