[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] How to switch VGA passthrough live
Here is a patch for xen-4 (ioemu). Jean P.S.: Please don't forget to CC the mailing list when you reply. Your messages could be useful for other people. Thanks. --- diff --git a/xen-vl-extra.c b/xen-vl-extra.c index 206ac65..bafc5a4 100644 --- a/xen-vl-extra.c +++ b/xen-vl-extra.c @@ -111,13 +111,18 @@ void do_pci_del(char *devname) devfn = bdf_to_devfn(devname); - if (devfn < 0) + if (devfn < 0 && devfn == 0x10) fprintf(logfile, "Device \"%s\" is not used by a hotplug device.\n", devname_cpy); else acpi_php_del(devfn); free(devname_cpy); + if (devfn == 0x10) + { + power_off_php_devfn(devfn); + xenstore_record_dm_state("pci-removed"); + } } void do_pci_add(char *devname) On Mon, Jun 07, 2010 at 02:54:00AM +0100, ääè wrote: > > It seems a complex work. Could you give the old patch, and I try to port it > on Xen4.0. > > 2010/6/5 Jean Guyader > <jean.guyader@xxxxxxxxxxxxx<mailto:jean.guyader@xxxxxxxxxxxxx>> > > 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<mailto:Xen-devel@xxxxxxxxxxxxxxxxxxx> > > http://lists.xensource.com/xen-devel > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |