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

[Xen-devel] RE: [Xen-users] Adding interface for communication between HVM guest and xen VMM

> -----Original Message-----
> From: xen-users-bounces@xxxxxxxxxxxxxxxxxxx 
> [mailto:xen-users-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Praveen Kushwaha
> Sent: 21 March 2007 09:48
> To: xen-users@xxxxxxxxxxxxxxxxxxx; xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: [Xen-users] Adding interface for communication 
> between HVM guest and xen VMM
> Hi,
>          I have a question regarding communication between 
> HVM guest and xen VMM. As per my knowledge the communication 
> between HVM Guest OS (windows) and VMM is done through 
> 'VMExit' and 'VMEntry' operations and context is stored in 
> VMCS. Since there are no interfaces for communication in full 
> virtualization as there are interfaces (i.e.hypercalls) in 
> case of para virtualization. So my question is that, In case 
> of full virtualization, is it possible to add interfaces that 
> will be serving as a communication medium between HVM guest and VMM?
> Also is there any other mechanism through which HVM guest and 
> VMM can communicate?

Yes, there are several ways to do this. The following are to some extent
used in Xen:
1. Both Intel and AMD support a VM[M]CALL instruction, which allows the
Guest to call into the hypervisor. Arguemnts to this instruction can be
placed on the stack or in register(s) or a combination of those two.
This is implemented in Xen for the purpose of supporting Para-virtual
drivers in Xen. 

2. Page-fault on a given "special" address (range). I.e. if the guest
writes (or reads) some special address, it causes a fault into the
hypervisor which is then checking for the special address. This is used
for hardware emulation of memory mapped IO devices for example. 

3. CPUID instruction using a "index" that isn't implemented for
hardware. I believe Xen uses CPUID 0x40000000 + x, where x is a small
integer. This can be used to transfer information from the hypervisor,
whereas on real hardware it's a "no-op" (it doesn't trap or fault if you
give it an unused index, it just sets the output registers to zeros
(although this particular behavious isn't strictly documented, it's
empirically found to be the case for both AMD and Intel CPU's for all
models that support CPUID instruction). 

[And a note on your terminology: VMCS is the Intel form - AMD uses
something called VMCB. Both serve the same purpose, and they are pretty
similar in structure. There is a slight difference in that VMCS can only
be accessed [legally] through a special set of VMWRITE/VMREAD
instructions, whilst the VMCB can be accesses through any regular memory

> If anyone have knowledge regarding it please reply.
> Thanks,
> Praveen Kushwaha

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.