[spice/f17] 0.10.1-3 32 bit fixes RHBZ 815717

Alon Levy alon at fedoraproject.org
Tue Apr 24 14:22:55 UTC 2012


commit aee05991007ffacfa543dfa874632a6e264dda5b
Author: Alon Levy <alevy at redhat.com>
Date:   Tue Apr 24 17:22:10 2012 +0300

    0.10.1-3 32 bit fixes RHBZ 815717

 ...er-red_memslots-drop-two-unused-functions.patch |   65 +++++++++++++++
 ...ed_memslots-use-QXLPHYSICAL-for-addresses.patch |   47 +++++++++++
 ...worker-fix-for-case-where-ASSERT-is-compi.patch |   28 +++++++
 ..._memslots-don-t-assume-64-bit-environment.patch |   83 ++++++++++++++++++++
 spice.spec                                         |   13 +++-
 5 files changed, 235 insertions(+), 1 deletions(-)
---
diff --git a/0001-server-red_memslots-drop-two-unused-functions.patch b/0001-server-red_memslots-drop-two-unused-functions.patch
new file mode 100644
index 0000000..baa0195
--- /dev/null
+++ b/0001-server-red_memslots-drop-two-unused-functions.patch
@@ -0,0 +1,65 @@
+From c90d42e2acb6655508e37d42925dc6062d75f479 Mon Sep 17 00:00:00 2001
+From: Alon Levy <alevy at redhat.com>
+Date: Wed, 21 Mar 2012 17:55:23 +0200
+Subject: [PATCH 1/4] server/red_memslots: drop two unused functions
+
+cb_get_virt and cb_validate_virt have disappeared a long time ago,
+not needed since:
+
+commit 5ac88aa79fa6445f96e5419d8bf4fce81da63b90
+Author: Gerd Hoffmann <kraxel at redhat.com>
+Date:   Thu Jul 1 17:55:33 2010 +0200
+
+    Properly parse QXLImage to the new-world SpiceImage
+
+    SpiceImage now replaces RedImage and has all image types in it.
+    All image data are now chunked (and as such not copied when demarshalling).
+---
+ server/red_memslots.c |   14 --------------
+ server/red_memslots.h |    5 -----
+ 2 files changed, 19 deletions(-)
+
+diff --git a/server/red_memslots.c b/server/red_memslots.c
+index d98f38c..5057218 100644
+--- a/server/red_memslots.c
++++ b/server/red_memslots.c
+@@ -127,20 +127,6 @@ unsigned long get_virt(RedMemSlotInfo *info, unsigned long addr, uint32_t add_si
+     return h_virt;
+ }
+ 
+-void *cb_get_virt(void *opaque, unsigned long addr,
+-                  uint32_t add_size, uint32_t group_id)
+-{
+-    return (void *)get_virt((RedMemSlotInfo *)opaque, addr, add_size, group_id);
+-}
+-
+-void cb_validate_virt(void *opaque,
+-                      unsigned long virt, unsigned long from_addr,
+-                      uint32_t add_size, uint32_t group_id)
+-{
+-    int slot_id = get_memslot_id((RedMemSlotInfo *)opaque, from_addr);
+-    validate_virt((RedMemSlotInfo *)opaque, virt, slot_id, add_size, group_id);
+-}
+-
+ void *validate_chunk (RedMemSlotInfo *info, QXLPHYSICAL data, uint32_t group_id, uint32_t *data_size_out, QXLPHYSICAL *next_out)
+ {
+     QXLDataChunk *chunk;
+diff --git a/server/red_memslots.h b/server/red_memslots.h
+index 18d5208..7aea0a3 100644
+--- a/server/red_memslots.h
++++ b/server/red_memslots.h
+@@ -60,11 +60,6 @@ unsigned long get_virt(RedMemSlotInfo *info, unsigned long addr, uint32_t add_si
+                        int group_id);
+ 
+ void *validate_chunk (RedMemSlotInfo *info, QXLPHYSICAL data, uint32_t group_id, uint32_t *data_size_out, QXLPHYSICAL *next_out);
+-void *cb_get_virt(void *opaque, unsigned long addr,
+-                  uint32_t add_size, uint32_t group_id);
+-void cb_validate_virt(void *opaque,
+-                      unsigned long virt, unsigned long from_addr,
+-                      uint32_t add_size, uint32_t group_id);
+ void red_memslot_info_init(RedMemSlotInfo *info,
+                            uint32_t num_groups, uint32_t num_slots,
+                            uint8_t generation_bits,
+-- 
+1.7.10
+
diff --git a/0002-server-red_memslots-use-QXLPHYSICAL-for-addresses.patch b/0002-server-red_memslots-use-QXLPHYSICAL-for-addresses.patch
new file mode 100644
index 0000000..5012815
--- /dev/null
+++ b/0002-server-red_memslots-use-QXLPHYSICAL-for-addresses.patch
@@ -0,0 +1,47 @@
+From 9ee43c37ce8dc028695d81728ac6da88bb79b653 Mon Sep 17 00:00:00 2001
+From: Alon Levy <alevy at redhat.com>
+Date: Wed, 21 Mar 2012 17:57:32 +0200
+Subject: [PATCH 2/4] server/red_memslots: use QXLPHYSICAL for addresses
+
+Cannot assume unsigned long == QXLPHYSICAL, not true for 32 bit
+architectures.
+---
+ server/red_memslots.c |    2 +-
+ server/red_memslots.h |    4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/server/red_memslots.c b/server/red_memslots.c
+index 5057218..8c8f3cc 100644
+--- a/server/red_memslots.c
++++ b/server/red_memslots.c
+@@ -91,7 +91,7 @@ void validate_virt(RedMemSlotInfo *info, unsigned long virt, int slot_id,
+     }
+ }
+ 
+-unsigned long get_virt(RedMemSlotInfo *info, unsigned long addr, uint32_t add_size,
++unsigned long get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size,
+                        int group_id)
+ {
+     int slot_id;
+diff --git a/server/red_memslots.h b/server/red_memslots.h
+index 7aea0a3..75754d0 100644
+--- a/server/red_memslots.h
++++ b/server/red_memslots.h
+@@ -43,12 +43,12 @@ typedef struct RedMemSlotInfo {
+     unsigned long memslot_clean_virt_mask;
+ } RedMemSlotInfo;
+ 
+-static inline int get_memslot_id(RedMemSlotInfo *info, unsigned long addr)
++static inline int get_memslot_id(RedMemSlotInfo *info, uint64_t addr)
+ {
+     return addr >> info->memslot_id_shift;
+ }
+ 
+-static inline int get_generation(RedMemSlotInfo *info, unsigned long addr)
++static inline int get_generation(RedMemSlotInfo *info, uint64_t addr)
+ {
+     return (addr >> info->memslot_gen_shift) & info->memslot_gen_mask;
+ }
+-- 
+1.7.10
+
diff --git a/0003-server-red_worker-fix-for-case-where-ASSERT-is-compi.patch b/0003-server-red_worker-fix-for-case-where-ASSERT-is-compi.patch
new file mode 100644
index 0000000..bed5c6e
--- /dev/null
+++ b/0003-server-red_worker-fix-for-case-where-ASSERT-is-compi.patch
@@ -0,0 +1,28 @@
+From f13ca1277418ed91d009a8db0faf36fbd1c0a7e0 Mon Sep 17 00:00:00 2001
+From: Alon Levy <alevy at redhat.com>
+Date: Tue, 20 Mar 2012 18:59:21 +0200
+Subject: [PATCH 3/4] server/red_worker: fix for case where ASSERT is compiled
+ out
+
+---
+ server/red_worker.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/server/red_worker.c b/server/red_worker.c
+index 80fa825..8a4315d 100644
+--- a/server/red_worker.c
++++ b/server/red_worker.c
+@@ -8379,9 +8379,8 @@ static void red_display_marshall_stream_clip(RedChannelClient *rcc,
+ {
+     DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
+     StreamAgent *agent = item->stream_agent;
+-    Stream *stream = agent->stream;
+ 
+-    ASSERT(stream);
++    ASSERT(agent->stream);
+ 
+     red_channel_client_init_send_data(rcc, SPICE_MSG_DISPLAY_STREAM_CLIP, &item->base);
+     SpiceMsgDisplayStreamClip stream_clip;
+-- 
+1.7.10
+
diff --git a/0004-server-red_memslots-don-t-assume-64-bit-environment.patch b/0004-server-red_memslots-don-t-assume-64-bit-environment.patch
new file mode 100644
index 0000000..7d222aa
--- /dev/null
+++ b/0004-server-red_memslots-don-t-assume-64-bit-environment.patch
@@ -0,0 +1,83 @@
+From 3d0448314812457e027e513c2d0dc163c421914a Mon Sep 17 00:00:00 2001
+From: Alon Levy <alevy at redhat.com>
+Date: Tue, 20 Mar 2012 19:00:49 +0200
+Subject: [PATCH 4/4] server/red_memslots: don't assume 64 bit environment
+
+assumption that unsigned long == QXLPHYSICAL causes get_virt to compute
+the wrong slot. Fix by replacing addr variables to be of type
+QXLPHYSICAL.
+---
+ server/red_memslots.c |   13 ++++++++-----
+ server/red_memslots.h |    4 ++--
+ 2 files changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/server/red_memslots.c b/server/red_memslots.c
+index 8c8f3cc..249b241 100644
+--- a/server/red_memslots.c
++++ b/server/red_memslots.c
+@@ -19,10 +19,12 @@
+ #include <config.h>
+ #endif
+ 
++#include <inttypes.h>
++
+ #include "red_common.h"
+ #include "red_memslots.h"
+ 
+-static unsigned long __get_clean_virt(RedMemSlotInfo *info, unsigned long addr)
++static unsigned long __get_clean_virt(RedMemSlotInfo *info, QXLPHYSICAL addr)
+ {
+     return addr & info->memslot_clean_virt_mask;
+ }
+@@ -46,7 +48,7 @@ static void print_memslots(RedMemSlotInfo *info)
+     }
+ }
+ 
+-unsigned long get_virt_delta(RedMemSlotInfo *info, unsigned long addr, int group_id)
++unsigned long get_virt_delta(RedMemSlotInfo *info, QXLPHYSICAL addr, int group_id)
+ {
+     MemSlot *slot;
+     int slot_id;
+@@ -107,7 +109,7 @@ unsigned long get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size
+     slot_id = get_memslot_id(info, addr);
+     if (slot_id > info->num_memslots) {
+         print_memslots(info);
+-        PANIC("slot_id too big, addr=%lx", addr);
++        PANIC("slot_id too big, addr=%" PRIx64, addr);
+     }
+ 
+     slot = &info->mem_slots[group_id][slot_id];
+@@ -165,10 +167,11 @@ void red_memslot_info_init(RedMemSlotInfo *info,
+         info->mem_slots[i] = spice_new0(MemSlot, num_slots);
+     }
+ 
++    /* TODO: use QXLPHYSICAL_BITS */
+     info->memslot_id_shift = 64 - info->mem_slot_bits;
+     info->memslot_gen_shift = 64 - (info->mem_slot_bits + info->generation_bits);
+-    info->memslot_gen_mask = ~((unsigned long)-1 << info->generation_bits);
+-    info->memslot_clean_virt_mask = (((unsigned long)(-1)) >>
++    info->memslot_gen_mask = ~((QXLPHYSICAL)-1 << info->generation_bits);
++    info->memslot_clean_virt_mask = (((QXLPHYSICAL)(-1)) >>
+                                        (info->mem_slot_bits + info->generation_bits));
+ }
+ 
+diff --git a/server/red_memslots.h b/server/red_memslots.h
+index 75754d0..d50587f 100644
+--- a/server/red_memslots.h
++++ b/server/red_memslots.h
+@@ -53,10 +53,10 @@ static inline int get_generation(RedMemSlotInfo *info, uint64_t addr)
+     return (addr >> info->memslot_gen_shift) & info->memslot_gen_mask;
+ }
+ 
+-unsigned long get_virt_delta(RedMemSlotInfo *info, unsigned long addr, int group_id);
++unsigned long get_virt_delta(RedMemSlotInfo *info, QXLPHYSICAL addr, int group_id);
+ void validate_virt(RedMemSlotInfo *info, unsigned long virt, int slot_id,
+                    uint32_t add_size, uint32_t group_id);
+-unsigned long get_virt(RedMemSlotInfo *info, unsigned long addr, uint32_t add_size,
++unsigned long get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t add_size,
+                        int group_id);
+ 
+ void *validate_chunk (RedMemSlotInfo *info, QXLPHYSICAL data, uint32_t group_id, uint32_t *data_size_out, QXLPHYSICAL *next_out);
+-- 
+1.7.10
+
diff --git a/spice.spec b/spice.spec
index 406c87c..7bf466e 100644
--- a/spice.spec
+++ b/spice.spec
@@ -1,12 +1,16 @@
 Name:           spice
 Version:        0.10.1
-Release:        2%{?dist}
+Release:        3%{?dist}
 Summary:        Implements the SPICE protocol
 Group:          User Interface/Desktops
 License:        LGPLv2+
 URL:            http://www.spice-space.org/
 Source0:        http://www.spice-space.org/download/releases/%{name}-%{version}.tar.bz2
 Source1:        spice-xpi-client-spicec
+Patch0:         0001-server-red_memslots-drop-two-unused-functions.patch
+Patch1:         0002-server-red_memslots-use-QXLPHYSICAL-for-addresses.patch
+Patch2:         0003-server-red_worker-fix-for-case-where-ASSERT-is-compi.patch
+Patch3:         0004-server-red_memslots-don-t-assume-64-bit-environment.patch
 
 # https://bugzilla.redhat.com/show_bug.cgi?id=613529
 ExclusiveArch:  i686 x86_64
@@ -67,6 +71,10 @@ using spice-server, you will need to install spice-server-devel.
 
 %prep
 %setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
 
 %build
 %configure --enable-gui --enable-smartcard
@@ -110,6 +118,9 @@ fi
 %{_libdir}/pkgconfig/spice-server.pc
 
 %changelog
+* Tue Apr 24 2012 Alon Levy <alevy at redhat.com>
+- Add 32 bit fixes from git master. (#815717)
+
 * Tue Feb 28 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.10.1-2
 - Rebuilt for c++ ABI breakage
 


More information about the scm-commits mailing list