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

Re: [Xen-devel] How to switch VGA passthrough live



Hi,

I tried that in the past and is was working fine but you have to put the
guest into S3 (acpi suspend to RAM) first, then we don't have to wait for
any ACPI hotplug ack (you could remove some code in qemu for that).

Jean

On Fri, Jun 04, 2010 at 10:29:43AM +0100, ääè wrote:
> Hi,
> 
> I want to switch video card live between two HVMs. My simplest idea is that 
> when the HVM has the permission to access passthrough video card, and another 
> HVM will be paused. If switch from A to B, execute commands :
> 
> xm pause A ;
> xm pci-detach A  00:00:02.0 ;
> xm pci-attach B 00:00:02.0 ;
> xm unpause B.
> 
> I have a try, but failed. The pseudo-code is as below. Can you give me some 
> ideas? Any suggestions will be thankful.
> 
> Execute âxm pci-detach Domain 00:00:02.0â:
> 
> 1.       Raise sci interrupt to unplug the device. If OSPM doesnât handle the 
> unplug process, and then invoke acpi_php_writeb to power off the device.
> 
> 2.       Modify power_off_php_devfn function:
> int power_off_php_devfn(int php_devfn)
> {
>                     If(php_devfn == 0x10)  // Intel integrated graphics
>                     {
>                              p = & dpci_infos.php_devs[php_devfn];
> 
>        // save the two-tuples : (php_dev, domid)
>        save_php_device_by_domid(p,domid);
> 
>        // hide the device from bus and dpci_infos
>                              pci_hide_device(& p->pt_dev->dev);
>                              memset(p,0x00,sizeof(struct php_dev));
> 
>                              return 0;
>                     }
> 
>     return unregister_real_device(php_devfn);
> 
> }
> 
> Execute âxm pci-attach Domain 00:00:02.0â:
> 
> 1.       Modify power_on_php_devfn function:
> 
> int power_off_php_devfn(int devfn)
> 
> {
> 
>            â.
> 
>            while(devfn == 0x10) // Intel integrated graphics
> 
>            {
> 
>                     if( ! get_php_device_by_domid(p,domid) ) // get saved 
> php_dev struct
> 
>                              break;                                     // 
> cannot get , create new one
> 
> 
> 
>                     //restore the php device to bus and dpci_infos
> 
>                     restore_php_device(p,devfn);         // restore 
> dpci_infos.php_devs[devfn]
> 
>                     dpci_infos->e_bus->devices[devfn] = p-> pt_dev->dev;
> 
> 
> 
>                     return 0;
> 
>            }
> 
> 
> 
>            if (!dpci_infos.pci_access)
> 
>            {â}
> 
>            pt_dev = register_real_device(..);
> 
>   return 0;
> 
> }
> 
> This plan hides the VGA device from HVM and never destroys it. Both mmio and 
> pio maps are reserved. When finishing âxm unpause Bâ, it seems working well 
> observed by Dom0 serial port login. But the screen is black and cannot 
> receive any signal. I am confusing. Video BIOS should be reloaded? Or need 
> raise some interrupt to flush screen?
> 
> 
> Thanks & Regards,
> Yujiageng

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