0.10.1-3 32 bit fixes RHBZ 815717

This commit is contained in:
Alon Levy 2012-04-24 17:22:10 +03:00
parent 430561cc74
commit e037a25b8f
5 changed files with 235 additions and 1 deletions

View File

@ -0,0 +1,65 @@
From c90d42e2acb6655508e37d42925dc6062d75f479 Mon Sep 17 00:00:00 2001
From: Alon Levy <alevy@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@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

View File

@ -0,0 +1,47 @@
From 9ee43c37ce8dc028695d81728ac6da88bb79b653 Mon Sep 17 00:00:00 2001
From: Alon Levy <alevy@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

View File

@ -0,0 +1,28 @@
From f13ca1277418ed91d009a8db0faf36fbd1c0a7e0 Mon Sep 17 00:00:00 2001
From: Alon Levy <alevy@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

View File

@ -0,0 +1,83 @@
From 3d0448314812457e027e513c2d0dc163c421914a Mon Sep 17 00:00:00 2001
From: Alon Levy <alevy@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

View File

@ -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@redhat.com>
- Add 32 bit fixes from git master. (#815717)
* Tue Feb 28 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.10.1-2
- Rebuilt for c++ ABI breakage