summaryrefslogtreecommitdiffstats
path: root/server/red_memslots.c
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2012-03-20 19:00:49 +0200
committerAlon Levy <alevy@redhat.com>2012-03-21 17:58:25 +0200
commitaef7eaf9bbe9018d56a34760b74a9cfa365d893b (patch)
tree030b3382ab53bd5f9ae71e5c097fdb73baf37a34 /server/red_memslots.c
parent07f55e49f509d1664620c266dd7a9517846d3409 (diff)
downloadspice-aef7eaf9bbe9018d56a34760b74a9cfa365d893b.tar.gz
spice-aef7eaf9bbe9018d56a34760b74a9cfa365d893b.tar.xz
spice-aef7eaf9bbe9018d56a34760b74a9cfa365d893b.zip
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.
Diffstat (limited to 'server/red_memslots.c')
-rw-r--r--server/red_memslots.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/server/red_memslots.c b/server/red_memslots.c
index 8c8f3cc6..249b241f 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));
}