Re: [Spice-devel] [PATCH] how can i trace monitor change (etc) events
I opened. https://bugs.freedesktop.org/show_bug.cgi?id=78131 - Original Message - > From: "Greg Sheremeta" > To: "David Mansfield" > Cc: spice-devel@lists.freedesktop.org > Sent: Monday, April 28, 2014 9:53:15 AM > Subject: Re: [Spice-devel] [PATCH] how can i trace monitorchange (etc) > events > > Hi David, > > Did you open a BZ for this yet? It'll help the issue get more visibility. > > Thanks, > Greg > > - Original Message - > > From: "David Mansfield" > > To: spice-devel@lists.freedesktop.org > > Sent: Wednesday, April 23, 2014 9:45:46 AM > > Subject: Re: [Spice-devel] [PATCH] how can i trace monitor change (etc) > > events > > > > > > On 04/21/2014 01:23 PM, David Mansfield wrote: > > > > > > On 04/21/2014 12:02 PM, Greg Sheremeta wrote: > > In particular, with MATE we get a bunch of: > > > > (remote-viewer:12916): GSpice-WARNING **: FIXME: only support monitor > > config with primary surface 0, but given config surface 5 > > > > Which seems suspicious to me, given that these are followed > > immediately by incorrect behavior and don't happen in GNOME3. > > > > >>> Ok. This is worse than suspicious. It's the bug. In the source > > >>> gtk/spice-widget.c, right after this "FIXME" we goto "whole". Maybe a > > >>> guru can explain why we need to bail out here and display the whole > > >>> framebuffer on the second monitor *on purpose*. However, the following > > >>> patch works for me: > > >>> > > >>> diff -ur spice-gtk-0.23.orig/gtk/spice-widget.c > > >>> spice-gtk-0.23/gtk/spice-widget.c > > >>> --- spice-gtk-0.23.orig/gtk/spice-widget.c2014-02-06 > > >>> 06:07:13.0 -0500 > > >>> +++ spice-gtk-0.23/gtk/spice-widget.c2014-04-17 > > >>> 16:46:20.204422442 -0400 > > >>> @@ -325,7 +325,7 @@ > > >>>whole: > > >>>g_clear_pointer(&monitors, g_array_unref); > > >>>/* by display whole surface */ > > >>> -update_area(display, 0, 0, d->width, d->height); > > >>> +update_area(display, c->x, c->y, c->width, c->height); > > >>> set_monitor_ready(display, true); > > >>> } > > >>> > > >>> Can someone explain why this would not be better than the currently > > >>> broken behavior? > > >>> > > >>> Note that after this patch, the code above the 'goto' label and the > > >>> code > > >>> below are basically the same. > > >>> > > >>> It's very curious that running MATE in the VM triggers this but running > > >>> GNOME3 does not, but nevertheless the bug is clearly in spice-gtk. > > >>> > > >>> -- > > >>> Thanks, > > >>> David Mansfield > > >>> Cobite, INC. > > >> David, did you open a bug on this anywhere? I have the same problem > > >> going on with LXDE. Cinnamon works great. > > >> > > >> > > > I'm planning to open a fedora bug for it, but I'm doing a bit more > > > debugging first in the client... I'm not certain I understand how the > > > above change (which has serious problems) is working. I'll send email > > > to the list when I've got more figured out. > > > > [ resent with gzipped logs ] > > > > I have captured some logs, both from remote-viewer (--spice-debug) and > > from qxl.ko (with drm.debug=14). I have modified spice-gtk to log when > > non-primary "canvas" is created (see attached patch), and BOTH gnome3 > > and mate create a secondary "canvas" with surface_id #2, however in MATE > > case, this happens right before the monitor config events, and for > > GNOME3 it happens after. In both cases the secondary surface is exactly > > the dimensions of the primary surface and happens after the primary > > surface has changed size. > > > > I have attached the logs. The spice.log.* are the debug output from > > remote-viewer (which was modified with the attached patch). The dmesg.* > > logs are the dmesg output in guest with drm.debug=14 set on kernel > > command line. > > > > Each test was performed on a freshly "powered on" machine. Login through > > GDM into desktop of choice. Both are F20 host, F20 guest, F20 client > > (modified). > > > > If anyone else has any suggestions for progressing on this, I'd > > appreciate it. > > > > -- > > Thanks, > > David Mansfield > > Cobite, INC. > > > > > > > > > > ___ > > Spice-devel mailing list > > Spice-devel@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/spice-devel > > > ___ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel > ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH] migration: Don't assert() if MIGRATE_DATA comes before attaching the agent
Hi Christophe, I don't understand what exactly goes wrong and how this patch fixes the race. On 04/01/2014 04:58 PM, Christophe Fergeau wrote: During seamless migration, after switching host, if a client was connected during the migration, it will have data to send back to the new qemu/spice-server instance. This is handled through MIGRATE_DATA messages. SPICE char devices use such MIGRATE_DATA messages to restore their state. However, the MIGRATE_DATA message can arrive any time after the new qemu instance has started, this can happen before or after the SPICE char devices have been created. In order to handle this, if the migrate data arrives early, it's stored in reds->agent_state.mig_data, and attach_to_red_agent() will restore the agent state as appropriate. Adding more information -- I think the race here is between qemu-kvm migrating the virtio-device state (with main/migration thread) vs spice migrating "agent" channel state. The virtio-device state load function, calls (if agent service is running in the guest) virtio_serial_load -> qemu_char_fe_open -> spice_chr_guest_open -> vmc_register_interface -> qemu_spice_add_interface -> spice_server_add_interface -> spice_server_char_device_add_interface -> attach_to_red_agent Unfortunately this does not work as expected as expected. If attach_to_red_agent() is called before the MIGRATE_DATA message reaches the server, all goes well, but if MIGRATE_DATA reaches the server before attach_to_red_agent() gets called, then some assert() get triggered in spice_char_device_state_restore(): ((null):32507): Spice-ERROR **: char_device.c:937:spice_char_device_state_restore: assertion `dev->num_clients == 1 && dev->wait_for_migrate_data' failed Thread 3 (Thread 0x7f406b543700 (LWP 32543)): Thread 2 (Thread 0x7f40697ff700 (LWP 32586)): Thread 1 (Thread 0x7f4079b45a40 (LWP 32507)): If we split this into 2 asserts, one for num_clients and the other to wait_for_migrate_data, we'll know which one's at fault. What happens is that dev->wait_for_migrate_data is unconditionally cleared when completing handling of the MIGRATE_DATA message, so it's FALSE when spice_char_device_state_restore() is called. dev->wait_for_migrate_data is cleared upon client_remove/device_reset/state_restore and in state_restore it's only after it passed the assert mentioned above. Moreover, dev->num_clients is also 0 as this is only increased by spice_char_device_start() which spice_server_char_device_add_interface() calls after attach_to_red_agent()/spice_char_device_state_restore() have been called. dev->num_clients is set to 1 in spice_char_device_client_add() called from spicevmc_connect. So as long as the client did not disconnect it should be good. With seamless migration that happens even before (qemu-kvm) migration starts. This commit changes the logic in spice_server_char_device_add_interface(), and when there is migrate data pending in reds->agent_state.mig_data, we only attempt to restore it after successfully initializing/starting the needed char device (which will ensure that dev->num_clients is not 0). I think that if the client is connected we should have dev->num_clients set to 1. It also changes attach_to_red_agent() to handle the case when reds->agent_state.mig_data is non-NULL to be the same as the case when red_channel_waits_for_migrate_data() is TRUE. This ensures that spice_char_device_client_add() gets called and that 'wait_for_data' is set in the added device. I think each handles a different scenario in that race: reds->agent_state.mig_data -- migration data has already arrived. spice_char_waits_for_migarte_data -- we are waiting for migration data to arrive. This fixes https://bugzilla.redhat.com/show_bug.cgi?id=1035184 --- Changes since v1: - Move block calling reds_agent_state_restore() before calling spice_char_device_start() as this should be safer. This also groups all SUBTYPE_xxx special-casing together. I've tested that things are still working as expected after this move. server/reds.c | 25 ++--- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/server/reds.c b/server/reds.c index 0390602..bd4fea1 100644 --- a/server/reds.c +++ b/server/reds.c @@ -2863,16 +2863,7 @@ static SpiceCharDeviceState *attach_to_red_agent(SpiceCharDeviceInstance *sin) state->read_filter.discard_all = FALSE; reds->agent_state.plug_generation++; -if (reds->agent_state.mig_data) { -spice_assert(reds->agent_state.plug_generation == 1); -reds_agent_state_restore(reds->agent_state.mig_data); -free(reds->agent_state.mig_data); -reds->agent_state.mig_data = NULL; -} else if (!red_channel_waits_for_migrate_data(&reds->main_channel->base)) { -/* we will assoicate the client with the char device, upon reds_on_main_agent_start, - * in response to MSGC_AGENT_START */ -
Re: [Spice-devel] [PATCH 04/12] display\driver.c: remove unused FlotaToFixed
trivial, ack - Original Message - > --- > xddm/display/driver.c | 14 -- > 1 file changed, 14 deletions(-) > > diff --git a/xddm/display/driver.c b/xddm/display/driver.c > index aa4fe42..5a3dbfa 100644 > --- a/xddm/display/driver.c > +++ b/xddm/display/driver.c > @@ -1252,20 +1252,6 @@ char *BitmapTypeToStr(int type) > #include "utils.h" > #include "res.h" > > -FIX FlotaToFixed(FLOATL val, FLOATL scale) > -{ > -FLOATOBJ float_obj; > -FIX ret; > - > -FLOATOBJ_SetFloat(&float_obj, val); > -FLOATOBJ_MulFloat(&float_obj, scale); > - > -ret = FLOATOBJ_GetLong(&float_obj) << 4; > -FLOATOBJ_MulLong(&float_obj, 16); > -ret |= (0x0f & FLOATOBJ_GetLong(&float_obj)); > -return ret; > -} > - > static BOOL GetCosmeticAttr(PDev *pdev, QXLDrawable *drawable, QXLLineAttr > *q_line_attr, > LINEATTRS *line_attr) > { > -- > 1.9.0 > > ___ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel > ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH 05/12] build.bat: fix copy to install dir for amd64
- Original Message - > --- > xddm/build.bat | 14 ++ > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/xddm/build.bat b/xddm/build.bat > index 1d19875..7dfe51b 100755 > --- a/xddm/build.bat > +++ b/xddm/build.bat > @@ -16,6 +16,12 @@ if not DEFINED SPICE_COMMON_DIR ( > set SPICE_COMMON_DIR=%CD%\..\spice-protocol > ) > > +if defined AMD64 ( > + set BUILD_ALT_DIR_SUBDIR=amd64 > +) else ( > + set BUILD_ALT_DIR_SUBDIR=i386 > +) ARCH_DIR? that would make less confusion with the other variable BUILD_ALT_DIR > + > set TARGET=install_%BUILD_ALT_DIR% > echo TARGET=%TARGET% > if not exist %TARGET% mkdir %TARGET% > @@ -30,11 +36,11 @@ build -cZg > cd ../ > > :copy_local > -copy display\obj%BUILD_ALT_DIR%\i386\qxldd.dll %TARGET% > -copy miniport\obj%BUILD_ALT_DIR%\i386\qxl.sys %TARGET% > +copy display\obj%BUILD_ALT_DIR%\%BUILD_ALT_DIR_SUBDIR%\qxldd.dll %TARGET% > +copy miniport\obj%BUILD_ALT_DIR%\%BUILD_ALT_DIR_SUBDIR%\qxl.sys %TARGET% > copy miniport\qxl.inf %TARGET% > -copy display\obj%BUILD_ALT_DIR%\i386\qxldd.pdb %TARGET% > -copy miniport\obj%BUILD_ALT_DIR%\i386\qxl.pdb %TARGET% > +copy display\obj%BUILD_ALT_DIR%\%BUILD_ALT_DIR_SUBDIR%\qxldd.pdb %TARGET% > +copy miniport\obj%BUILD_ALT_DIR%\%BUILD_ALT_DIR_SUBDIR%\qxl.pdb %TARGET% > if not defined DEST goto exit > if exist %DEST% ( > echo copying to %DEST% > -- > 1.9.0 > > ___ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel > ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH 06/12] build.bat: more verbose build
ack - Original Message - > --- > xddm/build.bat | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/xddm/build.bat b/xddm/build.bat > index 7dfe51b..b2c5149 100755 > --- a/xddm/build.bat > +++ b/xddm/build.bat > @@ -30,9 +30,10 @@ if not x%1 == x set DEST=%1 > > :build > cd miniport > -build -cZg > +build -ceZg > cd ../display > -build -cZg > +build -ceZg > +type buildchk_win7_%_BUILDARCH%.log | find "warning" > cd ../ > > :copy_local > -- > 1.9.0 > > ___ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel > ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH 03/12] display/res.h: remove whitespace at EOF
trivial, ack - Original Message - > --- > xddm/display/res.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/xddm/display/res.h b/xddm/display/res.h > index 6ce9a68..4d179c5 100644 > --- a/xddm/display/res.h > +++ b/xddm/display/res.h > @@ -74,4 +74,4 @@ void EmptyReleaseRing(PDev *pdev); > void InitDeviceMemoryResources(PDev *pdev); > void ReleaseCacheDeviceMemoryResources(PDev *pdev); > > -#endif > +#endif > \ No newline at end of file > -- > 1.9.0 > > ___ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel > ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH 01/12] Revert "miniport: halve QXL_IO_UPDATE_IRQ calls"
ack, should the bug state be changed back to ASSIGNED? - Original Message - > From: Yonit Halperin > > This reverts commit 49feefa95d3595f04355c4aed53ec5bf26551046. > The patch causes the display to get stuck. Till we understand exactly > why, I'm reverting it. > --- > xddm/miniport/qxl.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/xddm/miniport/qxl.c b/xddm/miniport/qxl.c > index ce37f07..f5d6b48 100644 > --- a/xddm/miniport/qxl.c > +++ b/xddm/miniport/qxl.c > @@ -1321,6 +1321,7 @@ BOOLEAN Interrupt(PVOID dev_extension) > return FALSE; > } > dev_ext->ram_header->int_mask = 0; > +VideoPortWritePortUchar((PUCHAR)dev_ext->io_base + QXL_IO_UPDATE_IRQ, > 0); > > if (!VideoPortQueueDpc(dev_extension, InterruptCallback, NULL)) { > VideoPortLogError(dev_extension, NULL, E_UNEXPECTED, > QXLERR_INT_DELIVERY); > -- > 1.9.0 > > ___ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel > ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH 02/12] miniport/qxl.inf: simplify by having FeatureScore for everyone
I forgot to mention in the cover letter: I fixed the comment here per old review by Yonit. Review appreciated! On 04/30/2014 05:40 PM, Alon Levy wrote: > FeatureScore is the only difference between the _vista options and the > rest, so just setting it also for windows xp using drivers results in a > simplification of the inf file, and no downside. > > According to [1] we use a feature score of FC to indicate a windows 2000 > display driver > > [1] > http://msdn.microsoft.com/en-us/library/windows/hardware/ff569676%28v=vs.85%29.aspx > --- > xddm/miniport/qxl.inf | 19 +-- > 1 file changed, 5 insertions(+), 14 deletions(-) > > diff --git a/xddm/miniport/qxl.inf b/xddm/miniport/qxl.inf > index dbd11dd..7144b7d 100644 > --- a/xddm/miniport/qxl.inf > +++ b/xddm/miniport/qxl.inf > @@ -3,7 +3,7 @@ > > [Version] > Signature = "$CHICAGO$" > -DriverVer = 07/17/2013,1.4.2.4 > +DriverVer = 07/17/2013,1.4.2.4 > Provider = %RHAT% > CatalogFile = qxl.cat > Class = Display > @@ -17,30 +17,27 @@ qxl.Display = 11 ; system32 > [Manufacturer] > %RHAT% = q, NTx86, NTamd64, NTx86.6.0, NTamd64.6.0 > > -; WinXP x86 and up > +; x86 > [q.NTx86] > %RHAT% %QXL% = qxl, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 > > -; WinXP x64 and up > +; x64 > [q.NTamd64] > %RHAT% %QXL% = qxl, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 > > ; Vista x86 and up > [q.NTx86.6.0] > -%RHAT% %QXL% = qxl_vista, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 > +%RHAT% %QXL% = qxl, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 > > ; Vista x64 and up > [q.NTamd64.6.0] > -%RHAT% %QXL% = qxl_vista, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 > +%RHAT% %QXL% = qxl, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 > > > [ControlFlags] > ExcludeFromSelect = * > > [qxl] > -CopyFiles = qxl.Miniport, qxl.Display > - > -[qxl_vista] > FeatureScore = FC > CopyFiles = qxl.Miniport, qxl.Display > > @@ -60,9 +57,6 @@ qxldd.dll = 1 > [qxl.SoftwareSettings] > AddReg = qxl_SoftwareDeviceSettings > > -[qxl_vista.SoftwareSettings] > -AddReg = qxl_SoftwareDeviceSettings > - > [qxl_SoftwareDeviceSettings] > HKR,, InstalledDisplayDrivers,%REG_MULTI_SZ%, qxldd > HKR,, VgaCompatible, %REG_DWORD%,0 > @@ -74,9 +68,6 @@ HKR,, Acceleration.Level, %REG_DWORD%,0 > [qxl.Services] > AddService = qxl, 0x0002, qxl_Service_Inst ; Assign the named service as > the PnP function driver > > -[qxl_vista.Services] > -AddService = qxl, 0x0002, qxl_Service_Inst ; Assign the named service as > the PnP function driver > - > [qxl_Service_Inst] > ServiceType= 1 ; SERVICE_KERNEL_DRIVER > StartType = 3 ; SERVICE_DEMAND_START > ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 10/12] xddm/display/amd64: implement Save/RestoreFPU & fast_memcpy_*
Some notes: Follows AMD64 calling conventions. Uses masm 64 (ml64.exe). Dropped in the next patches because it is too slow. --- xddm/display/amd64/x64.asm | 236 + xddm/display/res.c | 13 +-- 2 files changed, 241 insertions(+), 8 deletions(-) diff --git a/xddm/display/amd64/x64.asm b/xddm/display/amd64/x64.asm index 36971d3..bb45d33 100644 --- a/xddm/display/amd64/x64.asm +++ b/xddm/display/amd64/x64.asm @@ -11,4 +11,240 @@ CheckAndSetSSE2 proc ret CheckAndSetSSE2 endp +RestoreFPU proc +; rcx PDev *pdev +; rdx size_t aligned_addr +movdqa xmm0, [rcx] +movdqa xmm1, [rcx + 16] +movdqa xmm2, [rcx + 32] +movdqa xmm3, [rcx + 48] +ret +RestoreFPU endp + +SaveFPU proc +; rcx PDev *pdev +; rdx size_t aligned_addr +movdqa [rcx], xmm0 +movdqa [rcx + 16], xmm1 +movdqa [rcx + 32], xmm2 +movdqa [rcx + 48], xmm3 +ret +SaveFPU endp + +fast_memcpy_aligned proc +; rcx void *dest +; rdx const void *src +; r8 size_t len +; Save rsi and rdi +mov r9, rsi +mov r10, rdi + +mov rsi, rdx +mov rdi, rcx +mov rcx, r8 + +cmp rcx, 128 +jb try_to_copy64 + +prefetchnta [rsi] +copy_128: +prefetchnta [rsi + 64] + +movdqa xmm0, [rsi] +movdqa xmm1, [rsi + 16] +movdqa xmm2, [rsi + 32] +movdqa xmm3, [rsi + 48] + +prefetchnta [rsi + 128] + +movntdq [rdi], xmm0 +movntdq [rdi + 16], xmm1 +movntdq [rdi + 32], xmm2 +movntdq [rdi + 48], xmm3 + +movdqa xmm0, [rsi + 64] +movdqa xmm1, [rsi + 80] +movdqa xmm2, [rsi + 96] +movdqa xmm3, [rsi + 112] + +movntdq [rdi + 64], xmm0 +movntdq [rdi + 80], xmm1 +movntdq [rdi + 96], xmm2 +movntdq [rdi + 112], xmm3 + +add rdi, 128 +add rsi, 128 +sub rcx, 128 +cmp rcx, 128 +jae copy_128 + + try_to_copy64: +cmp rcx, 64 +jb try_to_copy32 + + movdqa xmm0, [rsi] + movdqa xmm1, [rsi + 16] + movdqa xmm2, [rsi + 32] + movdqa xmm3, [rsi + 48] + + movntdq [rdi], xmm0 + movntdq [rdi + 16], xmm1 + movntdq [rdi + 32], xmm2 + movntdq [rdi + 48], xmm3 + + add rdi, 64 + add rsi, 64 + sub rcx, 64 + prefetchnta [rsi] + +try_to_copy32: + cmp rcx, 32 + jb try_to_copy16 + + movdqa xmm0, [rsi] + movdqa xmm1, [rsi + 16] + movntdq [rdi], xmm0 + movntdq [rdi + 16], xmm1 + + add rdi, 32 + add rsi, 32 + sub rcx, 32 + +try_to_copy16: + cmp rcx, 16 + jb try_to_copy4 + + movdqa xmm0, [rsi] + movntdq [rdi], xmm0 + + add rdi, 16 + add rsi, 16 + sub rcx, 16 + + +try_to_copy4: +cmp rcx, 4 +jb try_to_copy_1 +movsd +sub rcx, 4 +jmp try_to_copy4 + +try_to_copy_1: +rep movsb + +sfence +; Save rsi and rdi +mov rsi, r9 +mov rdi, r10 +ret +fast_memcpy_aligned endp + +fast_memcpy_unaligned proc +; rcx void *dest +; rdx const void *src +; r8 size_t len +; Save rsi and rdi +mov r9, rsi +mov r10, rdi + +mov rsi, rdx +mov rdi, rcx +mov rcx, r8 + +cmp rcx, 128 +jb try_to_copy64 + +prefetchnta [rsi] +copy_128: +prefetchnta [rsi + 64] + +movdqu xmm0, [rsi] +movdqu xmm1, [rsi + 16] +movdqu xmm2, [rsi + 32] +movdqu xmm3, [rsi + 48] + +prefetchnta [rsi + 128] + +movntdq [rdi], xmm0 +movntdq [rdi + 16], xmm1 +movntdq [rdi + 32], xmm2 +movntdq [rdi + 48], xmm3 + +movdqu xmm0, [rsi + 64] +movdqu xmm1, [rsi + 80] +movdqu xmm2, [rsi + 96] +movdqu xmm3, [rsi + 112] + +movntdq [rdi + 64], xmm0 +movntdq [rdi + 80], xmm1 +movntdq [rdi + 96], xmm2 +movntdq [rdi + 112], xmm3 + +add rdi, 128 +add rsi, 128 +sub rcx, 128 +cmp rcx, 128 +jae copy_128 + + try_to_copy64: +cmp rcx, 64 +jb try_to_copy32 + + movdqu xmm0, [rsi] + movdqu xmm1, [rsi + 16] + movdqu xmm2, [rsi + 32] + movdqu xmm3, [rsi + 48] + + movntdq [rdi], xmm0 + movntdq [rdi + 16], xmm1 + movntdq [rdi + 32], xmm2 + movntdq [rdi + 48], xmm3 + + add rdi, 64 + add rsi, 64 + sub rcx, 64 + prefetchnta [rsi] + +try_to_copy32: + cmp rcx, 32 + jb try_to_copy16 + + movdqu xmm0, [rsi] + movdqu xmm1, [rsi + 16] + movntdq [rdi], xmm0 + movntdq [rdi + 16], xmm1 + + add rdi, 32 + add rsi, 32 + sub rcx, 32 + +try_to_copy16: + cmp rcx, 16 + jb try_to_copy4 + + movdqu xmm0, [rsi] + movntdq [rdi], xmm0 + + add rdi, 16 + add rsi, 16 +
[Spice-devel] [PATCH 11/12] add benchmarks for memcpy (RtlCopyMemory) vs fast - fast is slower
Two benchmarks: 1. standalone, actually uses LIBCMT's memcpy to compare. 2. Part of qxldd.dll (in display/res.c called from display/driver.c) so using the same implementation. Note: next commit removes benchmark code as well as fast_memcpy_* code and related SSE check and FPU save/restore. Results for 32 bit windows 7 give ~2 times better performance for *system* memcpy. 64 bit windows 7 is ~2 times better for size < 128 KByte copies, and approximately the same for 128 KB <= size <= 1 MB More complete results: Note: for 64 bit with 262144 <= size <= 1048576 I got mixed results, depending on the order of performing the comparison - if memcpy was run first I got better results for fast_memcpy, by about 20%, for 64 bit only (for 32 bit memcpy/RtlCopyMemory was still faster). Windows 7 32 bit: size [bytes] our time/system time [percent] 1024232 2048352 4096681 8192303 16384455 32768403 65536352 131072232 262144232 524288152 1048576177 Windows 7 64 bit: size [bytes] our time/system time [percent] 1024140 2048204 4096200 8192198 16384232 32768173 65536272 131072177 262144134 524288115 1048576115 --- xddm/display/benchmark_memcpy.c| 152 + xddm/display/driver.c | 4 + xddm/display/res.c | 57 + xddm/tests/benchmark_format_results.py | 38 + xddm/tests/build_benchmark.bat | 7 ++ 5 files changed, 258 insertions(+) create mode 100644 xddm/display/benchmark_memcpy.c create mode 100644 xddm/tests/benchmark_format_results.py create mode 100644 xddm/tests/build_benchmark.bat diff --git a/xddm/display/benchmark_memcpy.c b/xddm/display/benchmark_memcpy.c new file mode 100644 index 000..fa44577 --- /dev/null +++ b/xddm/display/benchmark_memcpy.c @@ -0,0 +1,152 @@ +#include +#include + +#ifdef _WIN64 +int have_sse2 = 0; +void fast_memcpy_aligned(void *dest, const void *src, size_t len); +#else +static _inline void fast_memcpy_aligned(void *dest, const void *src, size_t len) +{ +_asm +{ +mov ecx, len +mov esi, src +mov edi, dest + +cmp ecx, 128 +jb try_to_copy64 + +prefetchnta [esi] +copy_128: +prefetchnta [esi + 64] + +movdqa xmm0, [esi] +movdqa xmm1, [esi + 16] +movdqa xmm2, [esi + 32] +movdqa xmm3, [esi + 48] + +prefetchnta [esi + 128] + +movntdq [edi], xmm0 +movntdq [edi + 16], xmm1 +movntdq [edi + 32], xmm2 +movntdq [edi + 48], xmm3 + +movdqa xmm0, [esi + 64] +movdqa xmm1, [esi + 80] +movdqa xmm2, [esi + 96] +movdqa xmm3, [esi + 112] + +movntdq [edi + 64], xmm0 +movntdq [edi + 80], xmm1 +movntdq [edi + 96], xmm2 +movntdq [edi + 112], xmm3 + +add edi, 128 +add esi, 128 +sub ecx, 128 +cmp ecx, 128 +jae copy_128 + + try_to_copy64: +cmp ecx, 64 +jb try_to_copy32 + + movdqa xmm0, [esi] + movdqa xmm1, [esi + 16] + movdqa xmm2, [esi + 32] + movdqa xmm3, [esi + 48] + + movntdq [edi], xmm0 + movntdq [edi + 16], xmm1 + movntdq [edi + 32], xmm2 + movntdq [edi + 48], xmm3 + + add edi, 64 + add esi, 64 + sub ecx, 64 + prefetchnta [esi] + +try_to_copy32: + cmp ecx, 32 + jb try_to_copy16 + + movdqa xmm0, [esi] + movdqa xmm1, [esi + 16] + movntdq [edi], xmm0 + movntdq [edi + 16], xmm1 + + add edi, 32 + add esi, 32 + sub ecx, 32 + +try_to_copy16: + cmp ecx, 16 + jb try_to_copy4 + + movdqa xmm0, [esi] + movntdq [edi], xmm0 + + add edi, 16 + add esi, 16 + sub ecx, 16 + + +try_to_copy4: +cmp ecx, 4 +jb try_to_copy_1 +movsd +sub ecx, 4 +jmp try_to_copy4 + +try_to_copy_1: +rep movsb + +sfence +} +} +#endif + +typedef unsigned long long uint64_t; + +uint64_t time_usecs(void) +{ + SYSTEMTIME systime; + GetSystemTime(&systime); + return systime.wMilliseconds * 1000 + systime.wSecond * 1e6 + systime.wMinute * 60e6 + systime.wHour * 3600e6; +} + +int main(void) +{ + int i; + unsigned char *src_unaligned; + unsigned char *dest_unaligned; + uint64_t start, total1, total2; + unsigned char *src = NULL; + unsigned char *
[Spice-devel] [PATCH 09/12] xddm/display/amd64: implement CheckAndSetSSE2
--- xddm/display/amd64/x64.asm | 13 + xddm/display/res.c | 4 2 files changed, 17 insertions(+) diff --git a/xddm/display/amd64/x64.asm b/xddm/display/amd64/x64.asm index e32b0df..36971d3 100644 --- a/xddm/display/amd64/x64.asm +++ b/xddm/display/amd64/x64.asm @@ -1 +1,14 @@ +Extern have_sse2:DWORD + +.code + +CheckAndSetSSE2 proc +mov eax, 001h +cpuid +and edx, 400h +shr edx, 26 +mov have_sse2, edx +ret +CheckAndSetSSE2 endp + end \ No newline at end of file diff --git a/xddm/display/res.c b/xddm/display/res.c index 289ece5..9320dd1 100644 --- a/xddm/display/res.c +++ b/xddm/display/res.c @@ -124,7 +124,11 @@ typedef struct QXLOutput { UINT8 data[0]; } QXLOutput; +#ifndef _WIN64 static int have_sse2 = FALSE; +#else +int have_sse2 = FALSE; +#endif #ifndef DBG static _inline void DebugShowOutput(PDev *pdev, QXLOutput* output) -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 12/12] display: use RtlCopyMemory instead of fast_memcpy_*
It is common practice to use RtlCopyMemory. Currently it is defined by the preprocessor to be memcpy, which outperforms our implementation, see previous benchmark commit. This commit removes the benchmarks and our internal implementation in favor of RtlCopyMemory. RHBZ: 705785 --- xddm/build.bat | 0 xddm/display/amd64/x64.asm | 250 - xddm/display/driver.c | 7 - xddm/display/res.c | 392 ++--- xddm/display/res.h | 3 - xddm/display/sources | 4 +- xddm/tests/benchmark_format_results.py | 38 xddm/tests/build_benchmark.bat | 7 - 8 files changed, 17 insertions(+), 684 deletions(-) mode change 100755 => 100644 xddm/build.bat delete mode 100644 xddm/display/amd64/x64.asm delete mode 100644 xddm/tests/benchmark_format_results.py delete mode 100644 xddm/tests/build_benchmark.bat diff --git a/xddm/build.bat b/xddm/build.bat old mode 100755 new mode 100644 diff --git a/xddm/display/amd64/x64.asm b/xddm/display/amd64/x64.asm deleted file mode 100644 index bb45d33..000 --- a/xddm/display/amd64/x64.asm +++ /dev/null @@ -1,250 +0,0 @@ -Extern have_sse2:DWORD - -.code - -CheckAndSetSSE2 proc -mov eax, 001h -cpuid -and edx, 400h -shr edx, 26 -mov have_sse2, edx -ret -CheckAndSetSSE2 endp - -RestoreFPU proc -; rcx PDev *pdev -; rdx size_t aligned_addr -movdqa xmm0, [rcx] -movdqa xmm1, [rcx + 16] -movdqa xmm2, [rcx + 32] -movdqa xmm3, [rcx + 48] -ret -RestoreFPU endp - -SaveFPU proc -; rcx PDev *pdev -; rdx size_t aligned_addr -movdqa [rcx], xmm0 -movdqa [rcx + 16], xmm1 -movdqa [rcx + 32], xmm2 -movdqa [rcx + 48], xmm3 -ret -SaveFPU endp - -fast_memcpy_aligned proc -; rcx void *dest -; rdx const void *src -; r8 size_t len -; Save rsi and rdi -mov r9, rsi -mov r10, rdi - -mov rsi, rdx -mov rdi, rcx -mov rcx, r8 - -cmp rcx, 128 -jb try_to_copy64 - -prefetchnta [rsi] -copy_128: -prefetchnta [rsi + 64] - -movdqa xmm0, [rsi] -movdqa xmm1, [rsi + 16] -movdqa xmm2, [rsi + 32] -movdqa xmm3, [rsi + 48] - -prefetchnta [rsi + 128] - -movntdq [rdi], xmm0 -movntdq [rdi + 16], xmm1 -movntdq [rdi + 32], xmm2 -movntdq [rdi + 48], xmm3 - -movdqa xmm0, [rsi + 64] -movdqa xmm1, [rsi + 80] -movdqa xmm2, [rsi + 96] -movdqa xmm3, [rsi + 112] - -movntdq [rdi + 64], xmm0 -movntdq [rdi + 80], xmm1 -movntdq [rdi + 96], xmm2 -movntdq [rdi + 112], xmm3 - -add rdi, 128 -add rsi, 128 -sub rcx, 128 -cmp rcx, 128 -jae copy_128 - - try_to_copy64: -cmp rcx, 64 -jb try_to_copy32 - - movdqa xmm0, [rsi] - movdqa xmm1, [rsi + 16] - movdqa xmm2, [rsi + 32] - movdqa xmm3, [rsi + 48] - - movntdq [rdi], xmm0 - movntdq [rdi + 16], xmm1 - movntdq [rdi + 32], xmm2 - movntdq [rdi + 48], xmm3 - - add rdi, 64 - add rsi, 64 - sub rcx, 64 - prefetchnta [rsi] - -try_to_copy32: - cmp rcx, 32 - jb try_to_copy16 - - movdqa xmm0, [rsi] - movdqa xmm1, [rsi + 16] - movntdq [rdi], xmm0 - movntdq [rdi + 16], xmm1 - - add rdi, 32 - add rsi, 32 - sub rcx, 32 - -try_to_copy16: - cmp rcx, 16 - jb try_to_copy4 - - movdqa xmm0, [rsi] - movntdq [rdi], xmm0 - - add rdi, 16 - add rsi, 16 - sub rcx, 16 - - -try_to_copy4: -cmp rcx, 4 -jb try_to_copy_1 -movsd -sub rcx, 4 -jmp try_to_copy4 - -try_to_copy_1: -rep movsb - -sfence -; Save rsi and rdi -mov rsi, r9 -mov rdi, r10 -ret -fast_memcpy_aligned endp - -fast_memcpy_unaligned proc -; rcx void *dest -; rdx const void *src -; r8 size_t len -; Save rsi and rdi -mov r9, rsi -mov r10, rdi - -mov rsi, rdx -mov rdi, rcx -mov rcx, r8 - -cmp rcx, 128 -jb try_to_copy64 - -prefetchnta [rsi] -copy_128: -prefetchnta [rsi + 64] - -movdqu xmm0, [rsi] -movdqu xmm1, [rsi + 16] -movdqu xmm2, [rsi + 32] -movdqu xmm3, [rsi + 48] - -prefetchnta [rsi + 128] - -movntdq [rdi], xmm0 -movntdq [rdi + 16], xmm1 -movntdq [rdi + 32], xmm2 -movntdq [rdi + 48], xmm3 - -movdqu xmm0, [rsi + 64] -movdqu xmm1, [rsi + 80] -movdqu xmm2, [rsi + 96] -movdqu xmm3, [rsi + 112] - -movntdq [rdi + 64], xmm0 -movntdq [rdi + 80], xmm1 -movntdq [rdi + 96], xmm2 -movntdq [rdi + 112], xmm3 - -add rdi, 128 -add rsi, 128 -sub rcx, 128 -cmp rcx, 128 -jae copy_128 - -
[Spice-devel] [PATCH 01/12] Revert "miniport: halve QXL_IO_UPDATE_IRQ calls"
From: Yonit Halperin This reverts commit 49feefa95d3595f04355c4aed53ec5bf26551046. The patch causes the display to get stuck. Till we understand exactly why, I'm reverting it. --- xddm/miniport/qxl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/xddm/miniport/qxl.c b/xddm/miniport/qxl.c index ce37f07..f5d6b48 100644 --- a/xddm/miniport/qxl.c +++ b/xddm/miniport/qxl.c @@ -1321,6 +1321,7 @@ BOOLEAN Interrupt(PVOID dev_extension) return FALSE; } dev_ext->ram_header->int_mask = 0; +VideoPortWritePortUchar((PUCHAR)dev_ext->io_base + QXL_IO_UPDATE_IRQ, 0); if (!VideoPortQueueDpc(dev_extension, InterruptCallback, NULL)) { VideoPortLogError(dev_extension, NULL, E_UNEXPECTED, QXLERR_INT_DELIVERY); -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 07/12] xddm/display/res.c: move ALIGN out of Save/RestoreFPU for easier amd64 implementation
--- xddm/display/res.c | 15 ++- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/xddm/display/res.c b/xddm/display/res.c index bfb3571..289ece5 100644 --- a/xddm/display/res.c +++ b/xddm/display/res.c @@ -1811,13 +1811,11 @@ static void FreeBitmapImage(PDev *pdev, Resource *res) // todo: defer #ifndef _WIN64 -static _inline void RestoreFPU(PDev *pdev, UINT8 FPUSave[]) +static _inline void RestoreFPU(PDev *pdev, size_t aligned_addr) { -void *align_addr = (void *)ALIGN((size_t)(FPUSave), SSE_ALIGN); - _asm { -mov esi, align_addr +mov esi, aligned_addr movdqa xmm0, [esi] movdqa xmm1, [esi + 16] @@ -1826,13 +1824,11 @@ static _inline void RestoreFPU(PDev *pdev, UINT8 FPUSave[]) } } -static _inline void SaveFPU(PDev *pdev, UINT8 FPUSave[]) +static _inline void SaveFPU(PDev *pdev, size_t aligned_addr) { -void *align_addr = (void *)ALIGN((size_t)(FPUSave), SSE_ALIGN); - _asm { -mov edi, align_addr +mov edi, aligned_addr movdqa [edi], xmm0 movdqa [edi + 16], xmm1 @@ -1865,7 +1861,8 @@ static _inline Resource *GetBitmapImage(PDev *pdev, SURFOBJ *surf, XLATEOBJ *col UINT8 *src_end; UINT8 *dest; UINT8 *dest_end; -UINT8 FPUSave[16 * 4 + 15]; +UINT8 FPUSaveUnaligned[16 * 4 + 15]; +size_t FPUSave = ALIGN((size_t)(FPUSaveUnaligned), SSE_ALIGN); BOOL use_sse = FALSE; DEBUG_PRINT((pdev, 12, "%s\n", __FUNCTION__)); -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 00/12] Fix 705785 (remove fast_memcpy_*)
This patchset ultimately does a little cleanup and mainly removes all inline assembly that was used to supposedly have a faster memcpy implementation. The patchset includes an amd64 implementation of the fast_memcpy_aligned and fast_memcpy_unaligned functions and benchmarks comparing them to RtlCopyMemory and memcpy (the later for easier testing in userspace, but the comparison was ultimately done in kernel since I couldn't find a simple way to link to the kernel memcpy implementation from userspace). Both benchmarks and amd64 (and original x86) implementations are removed in the final patch. Benchmarks show that on the tested systems (windows 7 32 & 64 bits with emulated host cpu i7) the native windows kernel implementation was faster. For more information see commit message of benchmark adding commit (one before last). In addition the patch to revert an earlier mistake "miniport: halve QXL_IO_UPDATE_IRQ calls" is included. Alon Levy (11): miniport/qxl.inf: simplify by having FeatureScore for everyone display/res.h: remove whitespace at EOF display\driver.c: remove unused FlotaToFixed build.bat: fix copy to install dir for amd64 build.bat: more verbose build xddm/display/res.c: move ALIGN out of Save/RestoreFPU for easier amd64 implementation adding initial empty AMD64 only external asm file xddm/display/amd64: implement CheckAndSetSSE2 xddm/display/amd64: implement Save/RestoreFPU & fast_memcpy_* add benchmarks for memcpy (RtlCopyMemory) vs fast - fast is slower display: use RtlCopyMemory instead of fast_memcpy_* Yonit Halperin (1): Revert "miniport: halve QXL_IO_UPDATE_IRQ calls" xddm/build.bat | 19 ++- xddm/display/benchmark_memcpy.c | 152 ++ xddm/display/driver.c | 17 -- xddm/display/res.c | 335 ++-- xddm/display/res.h | 5 +- xddm/display/sources| 3 +- xddm/miniport/qxl.c | 1 + xddm/miniport/qxl.inf | 19 +-- 8 files changed, 188 insertions(+), 363 deletions(-) mode change 100755 => 100644 xddm/build.bat create mode 100644 xddm/display/benchmark_memcpy.c -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 04/12] display\driver.c: remove unused FlotaToFixed
--- xddm/display/driver.c | 14 -- 1 file changed, 14 deletions(-) diff --git a/xddm/display/driver.c b/xddm/display/driver.c index aa4fe42..5a3dbfa 100644 --- a/xddm/display/driver.c +++ b/xddm/display/driver.c @@ -1252,20 +1252,6 @@ char *BitmapTypeToStr(int type) #include "utils.h" #include "res.h" -FIX FlotaToFixed(FLOATL val, FLOATL scale) -{ -FLOATOBJ float_obj; -FIX ret; - -FLOATOBJ_SetFloat(&float_obj, val); -FLOATOBJ_MulFloat(&float_obj, scale); - -ret = FLOATOBJ_GetLong(&float_obj) << 4; -FLOATOBJ_MulLong(&float_obj, 16); -ret |= (0x0f & FLOATOBJ_GetLong(&float_obj)); -return ret; -} - static BOOL GetCosmeticAttr(PDev *pdev, QXLDrawable *drawable, QXLLineAttr *q_line_attr, LINEATTRS *line_attr) { -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 03/12] display/res.h: remove whitespace at EOF
--- xddm/display/res.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xddm/display/res.h b/xddm/display/res.h index 6ce9a68..4d179c5 100644 --- a/xddm/display/res.h +++ b/xddm/display/res.h @@ -74,4 +74,4 @@ void EmptyReleaseRing(PDev *pdev); void InitDeviceMemoryResources(PDev *pdev); void ReleaseCacheDeviceMemoryResources(PDev *pdev); -#endif +#endif \ No newline at end of file -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 06/12] build.bat: more verbose build
--- xddm/build.bat | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xddm/build.bat b/xddm/build.bat index 7dfe51b..b2c5149 100755 --- a/xddm/build.bat +++ b/xddm/build.bat @@ -30,9 +30,10 @@ if not x%1 == x set DEST=%1 :build cd miniport -build -cZg +build -ceZg cd ../display -build -cZg +build -ceZg +type buildchk_win7_%_BUILDARCH%.log | find "warning" cd ../ :copy_local -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 08/12] adding initial empty AMD64 only external asm file
--- xddm/display/amd64/x64.asm | 1 + xddm/display/sources | 1 + 2 files changed, 2 insertions(+) create mode 100644 xddm/display/amd64/x64.asm diff --git a/xddm/display/amd64/x64.asm b/xddm/display/amd64/x64.asm new file mode 100644 index 000..e32b0df --- /dev/null +++ b/xddm/display/amd64/x64.asm @@ -0,0 +1 @@ +end \ No newline at end of file diff --git a/xddm/display/sources b/xddm/display/sources index 6c1d5c7..8a4f664 100644 --- a/xddm/display/sources +++ b/xddm/display/sources @@ -32,3 +32,4 @@ SOURCES=driver.c\ surface.c \ driver.rc +AMD64_SOURCES=amd64\x64.asm -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 02/12] miniport/qxl.inf: simplify by having FeatureScore for everyone
FeatureScore is the only difference between the _vista options and the rest, so just setting it also for windows xp using drivers results in a simplification of the inf file, and no downside. According to [1] we use a feature score of FC to indicate a windows 2000 display driver [1] http://msdn.microsoft.com/en-us/library/windows/hardware/ff569676%28v=vs.85%29.aspx --- xddm/miniport/qxl.inf | 19 +-- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/xddm/miniport/qxl.inf b/xddm/miniport/qxl.inf index dbd11dd..7144b7d 100644 --- a/xddm/miniport/qxl.inf +++ b/xddm/miniport/qxl.inf @@ -3,7 +3,7 @@ [Version] Signature = "$CHICAGO$" -DriverVer = 07/17/2013,1.4.2.4 +DriverVer = 07/17/2013,1.4.2.4 Provider = %RHAT% CatalogFile = qxl.cat Class = Display @@ -17,30 +17,27 @@ qxl.Display = 11; system32 [Manufacturer] %RHAT% = q, NTx86, NTamd64, NTx86.6.0, NTamd64.6.0 -; WinXP x86 and up +; x86 [q.NTx86] %RHAT% %QXL% = qxl, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 -; WinXP x64 and up +; x64 [q.NTamd64] %RHAT% %QXL% = qxl, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 ; Vista x86 and up [q.NTx86.6.0] -%RHAT% %QXL% = qxl_vista, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 +%RHAT% %QXL% = qxl, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 ; Vista x64 and up [q.NTamd64.6.0] -%RHAT% %QXL% = qxl_vista, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 +%RHAT% %QXL% = qxl, PCI\VEN_1b36&DEV_0100&SUBSYS_11001af4 [ControlFlags] ExcludeFromSelect = * [qxl] -CopyFiles = qxl.Miniport, qxl.Display - -[qxl_vista] FeatureScore = FC CopyFiles = qxl.Miniport, qxl.Display @@ -60,9 +57,6 @@ qxldd.dll = 1 [qxl.SoftwareSettings] AddReg = qxl_SoftwareDeviceSettings -[qxl_vista.SoftwareSettings] -AddReg = qxl_SoftwareDeviceSettings - [qxl_SoftwareDeviceSettings] HKR,, InstalledDisplayDrivers,%REG_MULTI_SZ%, qxldd HKR,, VgaCompatible, %REG_DWORD%,0 @@ -74,9 +68,6 @@ HKR,, Acceleration.Level, %REG_DWORD%,0 [qxl.Services] AddService = qxl, 0x0002, qxl_Service_Inst ; Assign the named service as the PnP function driver -[qxl_vista.Services] -AddService = qxl, 0x0002, qxl_Service_Inst ; Assign the named service as the PnP function driver - [qxl_Service_Inst] ServiceType= 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [PATCH 05/12] build.bat: fix copy to install dir for amd64
--- xddm/build.bat | 14 ++ 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/xddm/build.bat b/xddm/build.bat index 1d19875..7dfe51b 100755 --- a/xddm/build.bat +++ b/xddm/build.bat @@ -16,6 +16,12 @@ if not DEFINED SPICE_COMMON_DIR ( set SPICE_COMMON_DIR=%CD%\..\spice-protocol ) +if defined AMD64 ( + set BUILD_ALT_DIR_SUBDIR=amd64 +) else ( + set BUILD_ALT_DIR_SUBDIR=i386 +) + set TARGET=install_%BUILD_ALT_DIR% echo TARGET=%TARGET% if not exist %TARGET% mkdir %TARGET% @@ -30,11 +36,11 @@ build -cZg cd ../ :copy_local -copy display\obj%BUILD_ALT_DIR%\i386\qxldd.dll %TARGET% -copy miniport\obj%BUILD_ALT_DIR%\i386\qxl.sys %TARGET% +copy display\obj%BUILD_ALT_DIR%\%BUILD_ALT_DIR_SUBDIR%\qxldd.dll %TARGET% +copy miniport\obj%BUILD_ALT_DIR%\%BUILD_ALT_DIR_SUBDIR%\qxl.sys %TARGET% copy miniport\qxl.inf %TARGET% -copy display\obj%BUILD_ALT_DIR%\i386\qxldd.pdb %TARGET% -copy miniport\obj%BUILD_ALT_DIR%\i386\qxl.pdb %TARGET% +copy display\obj%BUILD_ALT_DIR%\%BUILD_ALT_DIR_SUBDIR%\qxldd.pdb %TARGET% +copy miniport\obj%BUILD_ALT_DIR%\%BUILD_ALT_DIR_SUBDIR%\qxl.pdb %TARGET% if not defined DEST goto exit if exist %DEST% ( echo copying to %DEST% -- 1.9.0 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] spice 0.12.4 / qemu 2.0.0 / redhat spice agent / html5
Hello, for your attention, one more test : spice 0.12.4 + qemu 2.0.0 + redhat spice agent windows seven guest connection with html5 client : when windows guest reboot, qemu ? receive a shutdown , and vm poweroff connection with spice-gtk client : no shutdown receive, vm reboot same test with qemu 1.7.1 connection with html5 client : no shutdown receive, vm reboot connection with spice-gtk client : no shutdown receive, vm reboot Regards, Nicolas Prochazka. ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel