Alon, Thank you for information.
In order isolate the issue, I simply just ran the following script to create the printing channel. Initially, I disable the Virio serial adapter. When I enable the Virtio serial adapter, the Windows is totally locked up. I am going to debug the Windows virtio serial driver to see if I can find something there or not. To my understanding, the creation of vdagent and vdprint should be similar inside the Qemu. I do not know why the system is locked after I enable the vireo serial PCI adapter. ==================== ARGS="-localtime -spice port=5900,disable-ticketing \ -drive file=/opt/virt/user/Win7_64.cow \ -vga qxl \ -device virtio-serial-pci \ -usbdevice tablet -smp 1,cores=2 -m 2048 -enable-kvm \ -net nic -net user \ -chardev spicevmc,id=vdprint,name=vdprint \ -device virtserialport,chardev=vdprint,name=com.redhat.print.0" -----Original Message----- From: Alon Levy [mailto:al...@redhat.com] Sent: Friday, March 23, 2012 5:03 PM To: Charles.Tsai-蔡清海-研究發展部 Cc: spice-devel@lists.freedesktop.org Subject: Re: Fail to create a printing channel On Fri, Mar 23, 2012 at 05:08:34AM +0000, Charles.Tsai-蔡清海-研究發展部 wrote: > Alon, > > In Windows, driver name is provided by the device driver. In this case , > "com.redhat.print.0" is the device visible to application. > Because device "com.redhat.print.0" is created by the Qemu which is in > Linux, how the Linux passes the driver information to Windows So that Windows > application can open it. > > When I observed the trace of the spice server, I found vdagent seems to be > created after Windows viritio driver is loaded. > In other words, the creation of vdagent device seems to be triggered by the > Windows OS other than from the qemu command line. > By the same token, "vdprint" should be created after "com.redhat.print.0" is > loaded by Windows OS. > > So far, I am still looking at the link between "vdprint" and > "com.redhat.print.0". It looks like the virioserial driver must be modified. > Otherwise, how the Windows application can see such a device? For vdagent, what you have is: qemu virtio serial bus pci device qemu virtio serial port named "com.redhat.spice.0" guest virtio serial pci driver guest vdservice.exe guest vdagent.exe Guest startup: loads virtio serial pci driver. -> creates a device file for named "com.redhat.spice.0" starts vdservice.exe -> opens the file "com.redhat.spice.0" starts vdagent.exe So for the printer driver I imagined you would have a printer driver, vdprint.sys, that would do the same as vdservice.exe, i.e. Setup: virtio serial bus virtio serial port "com.redhat.print.0" guest virtio serial pci driver guest vdprinter driver (needs to make sure this loads after virtio) Startup: load virtio serial pci driver load vdprinter driver Alon > > > -----Original Message----- > From: Alon Levy [mailto:al...@redhat.com] > Sent: Thursday, March 22, 2012 10:22 PM > To: Charles.Tsai-蔡清海-研究發展部 > Cc: spice-devel@lists.freedesktop.org > Subject: Re: Fail to create a printing channel > > On Thu, Mar 22, 2012 at 09:55:45PM +0800, Charles.Tsai-蔡清海-研究發展部 wrote: > > Alon, > > > > I did all of what you mentioned before. Nothing is missed in my checklist. > > Function "spice_server_char_device_add_interface" in fact is not called at > > all. > > Qemu somehow is blocked somewhere. For now, I still do not know the root > > cause. > > > > OK. So nothing comes to mind. Where is it stuck? > > > > > -----Original Message----- > > From: Alon Levy [mailto:al...@redhat.com] > > Sent: Thursday, March 22, 2012 9:47 PM > > To: Charles.Tsai-蔡清海-研究發展部 > > Cc: spice-devel@lists.freedesktop.org > > Subject: Re: Fail to create a printing channel > > > > On Thu, Mar 22, 2012 at 07:34:38PM +0800, Charles.Tsai-蔡清海-研究發展部 wrote: > > > Alon, > > > > Or anyone else on the list.. > > > > > > > > I am running the following script to create the printing channel based > > > on the virtio device framework. > > > When the VM is launched, it seems to block somewhere in Qemu. > > > > > > If I remove the following two lines, the VM can be launched without any > > > problem. > > > The following two lines basically are used to create the printing > > > channel between the host and guest. > > > > > > -chardev spicevmc,id=vdprint,name=vdprint \ > > > -device virtserialport,chardev=vdprint,name=com.redhat.print.0" > > > > > > Can you give me some hits why Qemu does not call spice server to create > > > the printing channel? Is there any function in Qemu I need to change > > > so as to create additional channel within the Virtio device? > > > > > > Let me know if I made anything wrong with my Qemu's command options. > > > Thanks. > > > > How it works right now, and it's probably not how we want it to be, is that > > there is a function qemu calls to get the allowed list of names by > > spice-server. That function is implemented by spice-server, so you would > > need to add the "vdprint" string to it. > > > > diff --git a/server/reds.c b/server/reds.c index c54d30c..bb75624 > > 100644 > > --- a/server/reds.c > > +++ b/server/reds.c > > @@ -3364,6 +3364,7 @@ SPICE_GNUC_VISIBLE void > > spice_server_char_device_wakeup(SpiceCharDeviceInstance* > > #define SUBTYPE_VDAGENT "vdagent" > > #define SUBTYPE_SMARTCARD "smartcard" > > #define SUBTYPE_USBREDIR "usbredir" > > +#define SUBTYPE_PRINTER "printer" > > > > const char *spice_server_char_device_recognized_subtypes_list[] = { > > SUBTYPE_VDAGENT, > > @@ -3371,6 +3372,7 @@ const char > > *spice_server_char_device_recognized_subtypes_list[] = { > > SUBTYPE_SMARTCARD, > > #endif > > SUBTYPE_USBREDIR, > > + SUBTYPE_PRINTER, > > NULL, > > }; > > > > Then you need to tell spice what to do when > > spice_server_char_device_add_interface is called with this subtype (subtype > > == 'name' parameter to the chardev. Another thing that should be changed). > > > > You could basically just use another spicevmc_device_connect call. > > You will need to add the channel to the spice.proto (again, this > > should be changed so adding generic channels doesn't require this - > > something like having a generic channel subtype, and having a > > message that tells the client which channel this is - will be a > > little ugly since getting a channel list won't be enough for the > > client to know what channels are available, but it's not too bad - > > anyway off topic) > > > > For now you can just change the spice-protocol/spice/enums.h file directly > > instead of recreating it: > > > > U x86_64 garlic:spice-protocol alon ((1a3b563...))$ git diff diff > > --git a/spice/enums.h b/spice/enums.h index d2dbfd0..9f54ac0 100644 > > --- a/spice/enums.h > > +++ b/spice/enums.h > > @@ -330,6 +330,7 @@ enum { > > SPICE_CHANNEL_TUNNEL, > > SPICE_CHANNEL_SMARTCARD, > > SPICE_CHANNEL_USBREDIR, > > + SPICE_CHANNEL_PRINTER, > > > > SPICE_END_CHANNEL > > }; > > > > @@ -3401,9 +3403,13 @@ static int > > spice_server_char_device_add_interface(SpiceServer *s, > > } > > } > > #endif > > + /* all other channels use the generic spicevmc channel */ > > else if (strcmp(char_device->subtype, SUBTYPE_USBREDIR) == 0) { > > spicevmc_device_connect(char_device, SPICE_CHANNEL_USBREDIR); > > } > > + else if (strcmp(char_device->subtype, SUBTYPE_PRINTER) == 0) { > > + spicevmc_device_connect(char_device, SPICE_CHANNEL_PRINTER); > > + } > > return 0; > > } > > > > Hope you can understand my not very collected response. > > > > Bonus points for sending patches to fix the raised issues, or starting a > > discussion on how to exactly. > > > > Alon > > > > > ================================== > > > > > > #!/bin/sh > > > > > > ARGS="-localtime -spice port=5900,disable-ticketing \ -drive > > > file=/opt/virt/user/Win7_64.cow \ -vga qxl \ -device > > > virtio-serial-pci,multifunction=on \ -chardev > > > spicevmc,id=vdagent,id=vdagent,name=vdagent \ -device > > > virtserialport,chardev=vdagent,name=com.redhat.spice.0 \ > > > -usbdevice tablet -smp 1,cores=2 -m 2048 -enable-kvm -net nic -net > > > user \ -chardev spicevmc,id=vdprint,name=vdprint \ -device > > > virtserialport,chardev=vdprint,name=com.redhat.print.0" _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel