xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* How to switch VGA passthrough live
@ 2010-06-04  9:29 于佳耕
  2010-06-04 14:57 ` Roger Cruz
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: 于佳耕 @ 2010-06-04  9:29 UTC (permalink / raw)
  To: yuri.schaeffer, allen.m.kay; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 2610 bytes --]

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

[-- Attachment #1.2: Type: text/html, Size: 18224 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2010-06-08  3:18 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-04  9:29 How to switch VGA passthrough live 于佳耕
2010-06-04 14:57 ` Roger Cruz
2010-06-05  4:44   ` 于佳耕
2010-06-04 15:32 ` Stefano Stabellini
2010-06-04 16:19   ` 于佳耕
2010-06-05  8:44     ` Jean Guyader
2010-06-05  8:43 ` Jean Guyader
     [not found]   ` <AANLkTikw8sf6h3P21xD7Lj2Fc6AdzcOiPFZVm9gXdfhT@mail.gmail.com>
2010-06-07  9:13     ` Jean Guyader
2010-06-08  3:18       ` 于佳耕

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).