... +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" ); extern unsigned char hypercall_addr[6]; And use it this way: (I used vmalloc_to_page since its compiles as a module) hypercall_addr_page = vmalloc_to_page(hypercall_addr); para_state->hypercall_gpa = page_to_pfn(hypercall_addr_page) << PAGE_SHIFT | offset_in_page(hypercall_addr); Regards, Dor. _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization