Re: [PATCH RFC 5/5] KVM: This is the main part of the "moving dirty bitmaps to user space"

Avi Kivity
2010-04-12T21:00:29Z

On 04/12/2010 11:55 PM, Fernando Luis Vazquez Cao wrote:
>>> Sadly we don't have that for 32bit. We have to implement by ourselves.
>>>
>>> I tested two temporary implementations for 32bit:
>>> 1. This version using copy_from_user() and copy_to_user() with
>>> not nice vmalloc().
>>> 2. Loop with __get_user() and __put_user().
>>>
>>> The result was 1 is much faster than 2.
>>
>> What about copy_from_user()/copy_to_user() through a 512 byte buffer
>> on the kernel stack?
>
>
> Reserving 512 bytes on the stack looks like too much, I'd rather
> kmalloc a 512 byte buffer at VM
> creation time and pass it down to the dirty page tracking code. Would
> you be OK with such an
> approach?

But a generic copy_in_user() can't access that (I guess I wasn't clear -
just like I want a generic set_bit_user(), I want a generic
copy_in_user() instead of ifdefs in my code). But I guess we can make
it as simple as possible using get_user()/put_user(), and someone will
optimize it.

Alternatively use a 256 byte buffer, should be fine for the stack and
for performance.

--
Do not meddle in the internals of kernels, for they are subtle and quick to panic.