Re: Using VMChannel to communicate with the host.

Cameron Macdonell
2007-09-17T16:00:40Z

On 15-Sep-07, at 4:47 PM, Dor Laor wrote:

> Cam Macdonell wrote:
>> It didn't work. I used the following option: -vmchannel
>> di:2258,tcp:0:4444,server (the // confused kvm) and when the VM
>> booted,
>> I connected with "telnet localhost 4444" which allowed the boot to
>> proceed. But, I didn't get the hello host message when I loaded the
>> hypercall module. dmesg did show that the module loaded
>> successfully.
>> I'll dig around with it and see what else I can figure ou
>>
> I just tried it and it worked. I used fc7 2.6.21 kernel, 64 bits
> for the guest.
> Can you send the relevant dmesg?

Here is the dmesg output within the guest. I am running KVM-39 on
Ubuntu 2.6.20 kernel, 32 bit for both
host and guest.

[ 540.144000] Qumranet_hypercall_driver
[ 540.148000] pci dev 0000:00:04.0 (id 5002:2258 rev 00) is a guest
hypercall device
[ 540.148000] PCI: Found IRQ 9 for device 0000:00:04.0
[ 540.148000] hypercall_init_board: PIO region size == 0x100
[ 540.148000] hypercall_init_board: MMIO region size == 0x00
[ 540.148000] name=: base_addr=0xc200, io_addr=0x1c200, IRQ=9

For what it's worth, I can compile the driver/hypercall.c file that
comes with kvm-39. However, I can't compile your hypercall.c
implementation, I get the following error:

make -C /lib/modules/2.6.20-16-generic/build M=`pwd` "$@"
make[1]: Entering directory `/usr/src/linux-headers-2.6.20-16-generic'
CC [M] /home/kvm/kvm-userspace/drivers/hypercall.o
/home/kvm/kvm-userspace/drivers/hypercall.c: In function
‘hypercall_do_tasklet’:
/home/kvm/kvm-userspace/drivers/hypercall.c:226: error: invalid
lvalue in unary ‘&’
/home/kvm/kvm-userspace/drivers/hypercall.c:226: error: invalid
lvalue in unary ‘&’
/home/kvm/kvm-userspace/drivers/hypercall.c:231: warning: implicit
declaration of function ‘hypercall_tx’
/home/kvm/kvm-userspace/drivers/hypercall.c: At top level:
/home/kvm/kvm-userspace/drivers/hypercall.c:236: error: static
declaration of ‘hypercall_tx’ follows non-static declaration
/home/kvm/kvm-userspace/drivers/hypercall.c:231: error: previous
implicit declaration of ‘hypercall_tx’ was here
/home/kvm/kvm-userspace/drivers/hypercall.c: In function
‘hypercall_interrupt’:
/home/kvm/kvm-userspace/drivers/hypercall.c:302: warning: passing
argument 1 of ‘__constant_memcpy’ makes pointer from integer without
a cast
/home/kvm/kvm-userspace/drivers/hypercall.c:302: warning: passing
argument 1 of ‘__memcpy’ makes pointer from integer without a cast
/home/kvm/kvm-userspace/drivers/hypercall.c: In function
‘hypercall_open’:
/home/kvm/kvm-userspace/drivers/hypercall.c:320: warning: passing
argument 2 of ‘request_irq’ from incompatible pointer type
/home/kvm/kvm-userspace/drivers/hypercall.c:326: warning: assignment
makes integer from pointer without a cast
/home/kvm/kvm-userspace/drivers/hypercall.c:328: error:
‘hypercall_task’ undeclared (first use in this function)
/home/kvm/kvm-userspace/drivers/hypercall.c:328: error: (Each
undeclared identifier is reported only once
/home/kvm/kvm-userspace/drivers/hypercall.c:328: error: for each
function it appears in.)
make[2]: *** [/home/kvm/kvm-userspace/drivers/hypercall.o] Error 1
make[1]: *** [_module_/home/kvm/kvm-userspace/drivers] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.20-16-generic'
make: *** [all] Error 2

Thanks,
Cam

-----------------------------------------------
A. Cameron Macdonell
Ph.D. Student
Department of Computing Science
University of Alberta
cam-edFDblaTWIyXbbII50Afww@public.gmane.org