Re: [kvm-ppc-devel] RFC/patch portability: split kvm_vm_ioctl v2

Avi Kivity
2007-10-26T12:31:38Z

Carsten Otte wrote:
> Avi Kivity wrote:
>
>> Carsten Otte wrote:
>>
>>> Avi Kivity wrote:
>>>
>>>> Why aren't memory slots common too? Only their number is different,
>>>> while the implementation is the same.
>>>>
>>> Your approach makes the meaning of memory slot somewhat useless on
>>> s390, if that one may be sparse and may be result of different
>>> allocations: On x86, there has to be one memory slot per allocation,
>>> versus on s390 there has to be exactly one memory slot with multiple
>>> allocations behind.
>>>
>> No, a memory slot can span multiple backing stores. But it must be
>> contiguous in both the host userspace and guest physical address spaces.
>>
> I was not preceise enough: I meant to state that x86 demands one
> memory slot per contiguous allocation. But with your "s390 has only
> one memory slot" idea, this introduces a severe restriction for us:
> our "single memory slot" does not need to be contiguous, neither in
> guest physical nor in host userspace. All we need, is a certain
> 1:1+offset relationship between guest physical and host user. Page
> size, backing, sparse are all variable.
>

Well, a slot may be sparse (though I don't think that's supported now).

To me, a slot is exactly a guest offset, size, and host offset. How the
memory is populated (or not) is up to the user.

> Izik's idea, at least how I understood him, makes the best of both
> worlds: we keep above addressing relationship intact, and have
> multiple memory slots for all architectures.
>

Can you explain the idea again. Izik's not here so I can't ask him.

>
>>> For userspace that means, with your approach it has to do total
>>> different memory setup for different archs _if_ it wants to use
>>> multiple allocations and/or sparse:
>>> - on x86 it does allocations to random userspace address, and
>>> registers each of them as memory slot
>>> - on s390 it does allocations to a specific address layout similar to
>>> the guest, and registers only one memory slot for the whole thing
>>>
>>> With Izik's approach however, this is transparent to userspace: it has
>>> multiple memory slots, one per allocation. Regardless of the CPU
>>> architecture.
>>>
>> You can do this with the current memory slots as well. Although I'm
>> feeling that I misunderstood Izik's idea. I'll go talk to him.
>>
> No we can't: because current memory slots don't have a permanent
> relationship between user and guest physical addresses that we do need
> on s390. We cannot guarantee that over multiple slots, and we cannot
> keep the guest from addressing memory around the memory slots unless
> we refuse to use more than only one slot which has to start at guest
> physical zero.
>

Well, you could allow multiple slots and return -EINVAL if they don't
fit the "host = guest + offset formula". I'm not sure how that's
different from one big, possibly sparse, slot.

But again, I don't think I understood Izik's idea, so I'm not sure
what's the alternative.

--
error compiling committee.c: too many arguments to function