Re: [kvm-devel] [PATCH 1/5] KVM paravirt_ops core infrastructure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jun Koi wrote:
On 6/26/07, Dor Laor <dor.laor@xxxxxxxxxxxx> wrote:
...
+static __init struct kvm_paravirt_state *paravirt_alloc_state(void)
+{
+       struct kvm_paravirt_state *state;
+
+       state = (void *)get_zeroed_page(GFP_KERNEL);
+       if (!state)
+               goto err;
+
+       state->vmca = (void *)get_zeroed_page(GFP_KERNEL);
+       if (!state->vmca)
+               goto err;
+
+       /* FIXME: what do I need for this to be executable on 64 bit? */
+       state->hypercall = (void *)get_zeroed_page(GFP_KERNEL);

Why do you alloc a page for the hypercall instead of using Ingo's code
below? This way it can work for 64 bit too.

Ingo's code:
/*
 * This is the vm-syscall address - to be patched by the host to
 * VMCALL (Intel) or VMMCALL (AMD), depending on the CPU model:
 */
asm (
        "       .globl hypercall_addr                   \n"
        "       .align 4                                \n"
        "       hypercall_addr:                         \n"
        "               movl $-38, %eax                 \n"
        "               ret                             \n"
);

The assembly code "movl $-38, %eax; \nret" is only a "reserved place",
which is later overwritten by hypercall address from the host, isnt
it?

If so, why dont we simply put 4 NOPs there?

So if the hypervisor fails to patch it, we get a proper errno instead of running off into random code.

Regards,

Anthony Liguori

Thanks,
Jun


_______________________________________________
Virtualization mailing list
Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/virtualization

[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux