On Wed, Apr 13, 2011 at 3:50 PM, Pekka Enberg <[email protected]> wrote:
> On Wed, Apr 13, 2011 at 12:09 AM, Jan Kiszka <[email protected]> wrote:
>> On 2011-04-12 21:41, Sasha Levin wrote:
>>> Hello,
>>>
>>> I've tried using mmap to map the RAM of a guest instead of
>>> posix_memalign which is used both in the kvm tool and qemu.
>>>
>>> Doing so caused a kernel Oops, which happens every time I run the code
>>> and was confirmed both on 2.6.38 and the latest git build of 2.6.39.
>>>
>>
>> Can you share the test case that triggers it? That's easier than
>> guessing what you did precisely.
>
> It's the native Linux kvm tool patched to use mmap() instead of
> posix_memalign(). Sasha, maybe you should post your patch so other
> people can try to reproduce the problem?
>
I provided Jan with a patch to the kvm tool yesterday, Jan has
reproduced the oops and sent a patch to kernel-side KVM to fix it.
Here's the patch for the Linux kvm tool which triggered the oops.
diff --git a/tools/kvm/kvm.c b/tools/kvm/kvm.c
index 08ff63c..bac2a5e 100644
--- a/tools/kvm/kvm.c
+++ b/tools/kvm/kvm.c
@@ -158,7 +158,6 @@ struct kvm *kvm__init(const char *kvm_dev,
unsigned long ram_size)
struct kvm_userspace_memory_region mem;
struct kvm_pit_config pit_config = { .flags = 0, };
struct kvm *self;
- long page_size;
int ret;
if (!kvm__cpu_supports_vm())
@@ -199,8 +198,8 @@ struct kvm *kvm__init(const char *kvm_dev,
unsigned long ram_size)
self->ram_size = ram_size;
- page_size = sysconf(_SC_PAGESIZE);
- if (posix_memalign(&self->ram_start, page_size, self->ram_size) != 0)
+ self->ram_start = mmap(NULL, self->ram_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_NORESERVE | MAP_ANONYMOUS, -1, 0);
+ if (self == MAP_FAILED)
die("out of memory");
mem = (struct kvm_userspace_memory_region) {
--
Sasha.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html