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

RE: [Xen-devel] Communication between HVM and dom0 through the Hypervisor



 

> -----Original Message-----
> From: M.A. Williamson [mailto:maw48@xxxxxxxxxxxxxxxx] On 
> Behalf Of Mark Williamson
> Sent: 19 April 2007 03:22
> To: xen-devel@xxxxxxxxxxxxxxxxxxx
> Cc: Petersson, Mats; Daniele Sgandurra
> Subject: Re: [Xen-devel] Communication between HVM and dom0 
> through the Hypervisor
> 
> > > Is there currently a method for passing information
> > > between a HVM domain and domain 0 directly through the
> > > hypervisor?
> > > I understand there could be at least three ways to do
> > > so:
> > >
> > > -VMCALL from HVM + params in registers.
> > > -using "PV-on-HVM", but I think the frontend drivers
> > > need to be ported in the mainline Linux kernel and
> > > this is currently being done, right?
> >
> > What do you mean. There is the "unmodified_drivers" 
> directory in Xen,
> > which contains, as far as I know, complete drivers for 
> block and network
> > on HVM Linux. Of course, you'd need a differnet source-code 
> if you want
> > Linux 2.4 drivers or Windows drivers, neither of which is 
> supplied with
> > Xen's sources.
> 
> I think Daniele has read confusing accounts of the PV-on-HVM 
> drivers vs the 
> mainline kernel merge.  These are (semi) independent issues: 
> for Linux 2.6 
> PV-on-HVM drivers can simply be built by the administrator 
> and installed into 
> their VM if they want them.
> 
> The code that's being proposed for the Linux merge is to 
> support full PV, not 
> PV-on-HVM (as far as I know).
> 
> > > -using XenStore/XenBus (is that possible?)
> >
> > I believe so, but I'm not entirely sure about how that 
> works in a HVM
> > guest.
> 
> Yes, but it requires the PV-on-HVM driver infrastructure.  
> I'm not clear on 
> the exact implementation details, but it involves the guest 
> talking to a 
> fake "Xen platform" PCI device, which enables it to then set 
> up a Xenstore 
> connection and share configuration data on it.

Thanks for filling that in. 
> 
> > > As an example, suppose I have a HVM running Linux (on
> > > Intel IVT-x), and I want to call a callback function
> > > in dom0 each time the HVM contacts the hypervisor,
> > > what would you suggest me to do? Imagine I want to
> > > notify dom0 each time a process issues a system call,
> > > by adding some code in the prologue of the syscall
> > > handler to notify the hypervisor.
> >
> > You can use VM[M]CALL, although this is ALREADY being used 
> for PV-on-HVM
> > drivers, so you'd have to filter your calls from the ones used by
> > PV-on-HVM drivers (using a high bit to indicate that those are your
> > functions rather than PV-calls would be the easiest method).
> >
> > Another possibility is to find a unused IO-port or memory 
> address and
> > cause a IOIO-exit or Page-fault on a MMIO address that 
> isn't otherwise
> > used. IO-ports such as 0xBCDE, 0xAAA0 are most likely not 
> used, so you
> > could to a 8, 16 or 32-bit IO to one of those pretty easily.

One thing I forgot to add: At the point of the intercept, you will have
access to all CPU registers, so it's not really important which method
you use for the intercept from that perspective.
> >
> > The NEXT problem is of course getting this information out of the
> > hypervisor into Dom0.
> 
> It it possible to arrange for a VMEXIT to occur on int 0x80 
> (which IIRC is the 
> Linux system call...  I guess VT-x would also be able to 
> intercept sysenter)?  
> That way the guest wouldn't have to be modified to notify 
> Xen.  Xen would 
> then have to e.g. share a ring buffer with dom0 regarding 
> events of this 
> nature for each domain.  You could hack something up so that 
> the guest 
> blocked on each syscall until dom0 acknowledged it...

Now,that's a brilliant idea. Why didn't I think of that. 

Only one minor problem: It will only work for INT n instructions (but
since it's possible to hide SYSENTER/SYSCALL instrutions from the guest
via CPUID intercept, it can at least for 32-bit be forced to only do INT
80h calls), and only on AMD processors (this is more of a problem, as
the original post talks about Intel processors). Intel processors don't
allow intercepts of INT n instructions. Neither processor allow
intercepts of SYSENTER/SYSCALL instructions. [It's still a very good
idea, and I wish I had at least THOUGHT of it!]

--
Mats

> 
> There's also the Xen gdb server - maybe (if it supports HVM 
> guests?) you could 
> use this to watch the syscall paths.
> 
> HTH,
> cheers,
> Mark
> 
> -- 
> Dave: Just a question. What use is a unicyle with no seat?  
> And no pedals!
> Mark: To answer a question with a question: What use is a skateboard?
> Dave: Skateboards have wheels.
> Mark: My wheel has a wheel!
> 
> 
> 



_______________________________________________
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®.