On Mon, 08 Jun 2015 17:32:27 +0200
Paolo Bonzini <pbonz...@redhat.com> wrote:

> 
> 
> On 08/06/2015 17:19, Igor Mammedov wrote:
> > +void qemu_ram_unmap_hva(ram_addr_t addr)
> > +{
> > +    RAMBlock *block = find_ram_block(addr);
> > +
> > +    assert(block);
> > +    mmap(block->host, block->used_length, PROT_NONE,
> > +         MAP_FIXED | MAP_NORESERVE | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
> > +}
> > +
> 
> Hmm, this is not good. :(  The area at block->host can be in use, for
> example via memory_region_ref/memory_region_unref.  This can happen a
> bit after the memory_region_del_subregion.  So you can SEGV if you
> simply make a synchronous update.  I'm not sure if there is a solution
Yep, that's the problem I haven't found solution to so far,
any ideas hoe to approach this are appreciated.

issue is that we have to re-reserve HVA region first so no other allocation
would claim gap and the only way I found was just to call mmap() on it
which as side effect invalidates MemoryRegion's backing RAM.

> (but thanks for splitting the patches in a way that made the problem
> clear!).
> 
> Paolo


Reply via email to