Re: [Spice-devel] [PATCH] how can i trace monitor change (etc) events

2014-04-30 Thread Greg Sheremeta
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

2014-04-30 Thread Uri Lublin

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

2014-04-30 Thread Marc-André Lureau
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

2014-04-30 Thread Marc-André Lureau


- 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

2014-04-30 Thread Marc-André Lureau
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

2014-04-30 Thread Marc-André Lureau
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"

2014-04-30 Thread Marc-André Lureau
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

2014-04-30 Thread Alon Levy
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_*

2014-04-30 Thread Alon Levy
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

2014-04-30 Thread Alon Levy
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

2014-04-30 Thread Alon Levy
---
 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_*

2014-04-30 Thread Alon Levy
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"

2014-04-30 Thread Alon Levy
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

2014-04-30 Thread Alon Levy
---
 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_*)

2014-04-30 Thread Alon Levy
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

2014-04-30 Thread Alon Levy
---
 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

2014-04-30 Thread Alon Levy
---
 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

2014-04-30 Thread Alon Levy
---
 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

2014-04-30 Thread Alon Levy
---
 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

2014-04-30 Thread Alon Levy
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

2014-04-30 Thread Alon Levy
---
 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

2014-04-30 Thread nicolas prochazka
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