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

[Fwd: Re: [Xen-devel] Hypercall from HVM guest]



Forgot to cc the list ...

-------- Original Message --------
Subject: Re: [Xen-devel] Hypercall from HVM guest
Date: Thu, 25 Sep 2008 17:37:22 -0400
From: Steve Ofsthun <sofsthun@xxxxxxxxxxxxxxx>
To: Emre Can Sezer <ecsezer@xxxxxxxx>
References: <2895.152.14.92.134.1222354516.squirrel@xxxxxxxxxxxxxxxx>    
<48DBDB0C.1050001@xxxxxxxxxxxxxxx> 
<3243.152.14.92.134.1222372947.squirrel@xxxxxxxxxxxxxxxx>

Emre Can Sezer wrote:
>> Emre Can Sezer wrote:
>>> Hi,
>>>
>>> I'm trying to communicate some information from an HVM guest to Xen.
>>> Passing a pointer to a buffer would suffice and the communication will
>>> be
>>> single sided.  What is the best way to do this?
>>>
>>> I've looked into making a hypercall from an HVM guest and came across
>>> this
>>> post on this mailing list by Steve Ofsthun:
>>>
>>> http://lists.xensource.com/archives/html/xen-devel/2006-04/msg00526.html
>> This code is quite old and much has changed since then.  You should
>> probably use the pv on hvm driver code as an example these days
>> (xen/unmodified_drivers/linux-2.6/platform-pci).
>>
>> What hypercalls are you trying to use?  Note that HVM guests are
>> restricted to a subset of the normal PV guest hypercalls.
>>
>> Steve
>>
> 
> I'm trying to pass some information about the guest kernel to the VMM and
> thought that passing a single pointer to a buffer would suffice.  I plan
> on introducing a new hypercall for my purposes and update vmx.c in Xen. If
> there is a better way of doing it please let me know.

You could probably just add an HVM_PARAM_ for use by get/set_hvm_param 
interfaces (see for example, set_callback_via() in platform-pci.c).  You could 
avoid adding a brand new hypercall and making it available to HVM guests.  This 
would be handled in the generic HVM code do_hvm_op() in 
xen/xen/arch/x86/hvm/hvm.c (not the intel specific vmx.c).

> I put together some code, mainly from platform-pci.c and your previous
> posts and I was able to capture the hypercall from Xen.  I've attached the
> code below.  My problem was the xen related header files in the new linux
> distributions from kernel.org.  So instead of including them, I copied the
> relevant information to the source.  I've attached the code below.
> 
> I wonder if this is a bug or if 64-bit systems aren't supported or if they
> don't support xen anymore.  The __HYPERCALL_ definitions for example are
> lacking what you have in xen.h in linux-2.6.18-xen.  Although they've come
> up with 2.6.26-5, the changelogs don't mention anything about xen header
> files.

The initial Xen support pushed upstream did only support 32-bit.  I'm not sure, 
off the top of my head, what version incorporates the 64-bit stuff.  You might 
want to check the last Xen summit presentations.

> It would be great if there was a skeleton code that people could use. 
> Perhaps someone would like to take this code and pretty it up? :)

Perhaps ...

Steve

> Cheers,
> 
> John
> 
> 
>>> However, I'm unable to get this code to work.  I'm running a 64-bit
>>> system
>>> with the linux-2.6.26 kernel downloaded from kernel.org on top of
>>> xen-3.2.2.  When I compile, I get compilation errors resulting from
>>> hypercall.h.  I believe this code is intended for 32 bit guests only as
>>> the structure definitions are different fot the pte_t type.
>>>
>>> The error was:
>>> In file included from include/asm/xen/hypervisor.h:53,
>>>                  from /home/ecsezer/kernels/vmcall/./features.c:11:
>>> include/asm/xen/hypercall.h: In function 'HYPERVISOR_update_va_mapping':
>>> include/asm/xen/hypercall.h:230: error: 'pte_t' has no member named
>>> 'pte_low'
>>>
>>> I tried to modify this code to get rid of compilation errors but a final
>>> warning still persists and loading the module causes a seg fault.  The
>>> warning I get is:
>>>   CC [M]  /home/ecsezer/kernels/hyper/./hypercall.o
>>> {standard input}: Assembler messages:
>>> {standard input}:149: Warning: indirect call without `*'
>>>
>>> So I tried to compile with mercurial repository version linux-2.6.18-xen
>>> and that compiles fine.  However, due to being a different version, I
>>> can't use the resulting module.
>>>
>>> I would appreciate any insight as to how to proceed.  What could be the
>>> problem?  Perhaps there is an easier way of passing the information I
>>> want
>>> without a full blown hypercall interface?
>>>
>>> Thanks,
>>>
>>> John
>>>
>>> _______________________________________________
>>> Xen-devel mailing list
>>> Xen-devel@xxxxxxxxxxxxxxxxxxx
>>> http://lists.xensource.com/xen-devel
>>


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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