On Thu, Jun 26, 2014 at 07:44:24AM +0000, Damjan Marion (damarion) wrote: > > On 26 Jun 2014, at 09:13, Michael S. Tsirkin <m...@redhat.com> wrote: > > > On Wed, Jun 25, 2014 at 09:52:09PM +0000, Damjan Marion (damarion) wrote: > >> > >> On 25 Jun 2014, at 18:44, Paolo Bonzini <pbonz...@redhat.com> wrote: > >> > >>>> nregions: 4 > >>>> region: > >>>> gpa = 0x100000000 > >>>> size = 3221225472 > >>>> ua = 0x2aab6ac00000 > >>> > >>> High memory, above 3 gigabytes. > >>> > >>>> region: > >>>> gpa = 0xFFFC0000 > >>>> size = 262144 > >>>> ua = 0x7fc13d200000 > >>> > >>> This is the BIOS. There shouldn't be any FD for this one, it > >>> is not allocated in hugetlbfs. > >>> > >>>> region: > >>>> gpa = 0x0 > >>>> size = 655360 > >>>> ua = 0x2aaaaac00000 > >>>> region: > >>>> gpa = 0xC0000 > >>>> size = 3220439040 > >>>> ua = 0x2aaaaacc0000 > >>> > >>> Together, it's the first 3 GB of memory. > >>> > >>> I understand now what you mean. Yeah, the format should be changed > >>> to include the offset (why does vhost-user need the ua at all? > >>> perhaps the offset can replace the ua). > >>> > >>>> BTW Any idea what to do with region 2, it doesn’t look like the one > >>>> belonging > >>>> to the same place, but qemu_get_ram_fd() returns same FD for it. > >>> > >>> This must be a bug. I would have expected qemu_get_ram_fd to return -1 > >>> here, so no descriptor should be passed to vhost-user. > >> > >> Problem is inside qemu_get_ram_block(): > >> > >> > >> if (block && addr - block->offset < block->length) { > >> goto found; > >> } > >> > >> this is true if we have > 4G of RAM allocated. > > > > Hmm I don't get it. Why is it always true for >4G RAM? > > This check assumes that guest memory is mapped to RAM block > without gaps. as BIOS is mapped to guest address space > near 4G this check will return true if block size is bigger than > BIOS address.
But then offset is > addr so addr - offset is a huge value no? > > > >> > >> Any advice how to fix this? > >> > >>