ping > > On LLP64 platforms (like Windows) a virtual address cannot > be represented by a "unsigned long" type, so use uintptr_t > which is defined as a integral type large like a pointer. > "address_delta" is a difference of pointers so use same > type size. > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > server/memslot.c | 22 ++++++++++++---------- > server/memslot.h | 20 ++++++++++---------- > server/red-parse-qxl.c | 2 +- > server/spice-qxl.h | 4 ++-- > 4 files changed, 25 insertions(+), 23 deletions(-) > > diff --git a/server/memslot.c b/server/memslot.c > index 2a1771b02..182d2b7e9 100644 > --- a/server/memslot.c > +++ b/server/memslot.c > @@ -21,7 +21,7 @@ > > #include "memslot.h" > > -static unsigned long __get_clean_virt(RedMemSlotInfo *info, QXLPHYSICAL > addr) > +static uintptr_t __get_clean_virt(RedMemSlotInfo *info, QXLPHYSICAL addr) > { > return addr & info->memslot_clean_virt_mask; > } > @@ -37,7 +37,8 @@ static void print_memslots(RedMemSlotInfo *info) > !info->mem_slots[i][x].virt_end_addr) { > continue; > } > - printf("id %d, group %d, virt start %lx, virt end %lx, > generation %u, delta %lx\n", > + printf("id %d, group %d, virt start %" PRIxPTR ", virt end %" > PRIxPTR ", generation %u," > + " delta %" PRIxPTR "\n", > x, i, info->mem_slots[i][x].virt_start_addr, > info->mem_slots[i][x].virt_end_addr, > info->mem_slots[i][x].generation, > info->mem_slots[i][x].address_delta); > @@ -46,7 +47,7 @@ static void print_memslots(RedMemSlotInfo *info) > } > > /* return 1 if validation successfull, 0 otherwise */ > -int memslot_validate_virt(RedMemSlotInfo *info, unsigned long virt, int > slot_id, > +int memslot_validate_virt(RedMemSlotInfo *info, uintptr_t virt, int slot_id, > uint32_t add_size, uint32_t group_id) > { > MemSlot *slot; > @@ -60,8 +61,9 @@ int memslot_validate_virt(RedMemSlotInfo *info, unsigned > long virt, int slot_id, > if (virt < slot->virt_start_addr || (virt + add_size) > > slot->virt_end_addr) { > print_memslots(info); > spice_warning("virtual address out of range" > - " virt=0x%lx+0x%x slot_id=%d group_id=%d\n" > - " slot=0x%lx-0x%lx delta=0x%lx", > + " virt=0x%" G_GINTPTR_MODIFIER "x+0x%x slot_id=%d > group_id=%d\n" > + " slot=0x%" G_GINTPTR_MODIFIER "x-0x%" G_GINTPTR_MODIFIER > "x" > + " delta=0x%" G_GINTPTR_MODIFIER "x", > virt, add_size, slot_id, group_id, > slot->virt_start_addr, slot->virt_end_addr, > slot->address_delta); > return 0; > @@ -69,9 +71,9 @@ int memslot_validate_virt(RedMemSlotInfo *info, unsigned > long virt, int slot_id, > return 1; > } > > -unsigned long memslot_max_size_virt(RedMemSlotInfo *info, > - unsigned long virt, int slot_id, > - uint32_t group_id) > +uintptr_t memslot_max_size_virt(RedMemSlotInfo *info, > + uintptr_t virt, int slot_id, > + uint32_t group_id) > { > MemSlot *slot; > > @@ -91,7 +93,7 @@ void *memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL > addr, uint32_t add_size > { > int slot_id; > int generation; > - unsigned long h_virt; > + uintptr_t h_virt; > > MemSlot *slot; > > @@ -171,7 +173,7 @@ void memslot_info_destroy(RedMemSlotInfo *info) > } > > void memslot_info_add_slot(RedMemSlotInfo *info, uint32_t slot_group_id, > uint32_t slot_id, > - uint64_t addr_delta, unsigned long virt_start, > unsigned long virt_end, > + uint64_t addr_delta, uintptr_t virt_start, > uintptr_t virt_end, > uint32_t generation) > { > spice_assert(info->num_memslots_groups > slot_group_id); > diff --git a/server/memslot.h b/server/memslot.h > index 00728c4b6..45381feb9 100644 > --- a/server/memslot.h > +++ b/server/memslot.h > @@ -25,9 +25,9 @@ > > typedef struct MemSlot { > int generation; > - unsigned long virt_start_addr; > - unsigned long virt_end_addr; > - long address_delta; > + uintptr_t virt_start_addr; > + uintptr_t virt_end_addr; > + intptr_t address_delta; > } MemSlot; > > typedef struct RedMemSlotInfo { > @@ -39,8 +39,8 @@ typedef struct RedMemSlotInfo { > uint8_t memslot_id_shift; > uint8_t memslot_gen_shift; > uint8_t internal_groupslot_id; > - unsigned long memslot_gen_mask; > - unsigned long memslot_clean_virt_mask; > + uintptr_t memslot_gen_mask; > + uintptr_t memslot_clean_virt_mask; > } RedMemSlotInfo; > > static inline int memslot_get_id(RedMemSlotInfo *info, uint64_t addr) > @@ -53,11 +53,11 @@ static inline int memslot_get_generation(RedMemSlotInfo > *info, uint64_t addr) > return (addr >> info->memslot_gen_shift) & info->memslot_gen_mask; > } > > -int memslot_validate_virt(RedMemSlotInfo *info, unsigned long virt, int > slot_id, > +int memslot_validate_virt(RedMemSlotInfo *info, uintptr_t virt, int slot_id, > uint32_t add_size, uint32_t group_id); > -unsigned long memslot_max_size_virt(RedMemSlotInfo *info, > - unsigned long virt, int slot_id, > - uint32_t group_id); > +uintptr_t memslot_max_size_virt(RedMemSlotInfo *info, > + uintptr_t virt, int slot_id, > + uint32_t group_id); > void *memslot_get_virt(RedMemSlotInfo *info, QXLPHYSICAL addr, uint32_t > add_size, > int group_id); > > @@ -68,7 +68,7 @@ void memslot_info_init(RedMemSlotInfo *info, > uint8_t internal_groupslot_id); > void memslot_info_destroy(RedMemSlotInfo *info); > void memslot_info_add_slot(RedMemSlotInfo *info, uint32_t slot_group_id, > uint32_t slot_id, > - uint64_t addr_delta, unsigned long virt_start, > unsigned long virt_end, > + uint64_t addr_delta, uintptr_t virt_start, > uintptr_t virt_end, > uint32_t generation); > void memslot_info_del_slot(RedMemSlotInfo *info, uint32_t slot_group_id, > uint32_t slot_id); > void memslot_info_reset(RedMemSlotInfo *info); > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c > index eb2c0b538..01fd60580 100644 > --- a/server/red-parse-qxl.c > +++ b/server/red-parse-qxl.c > @@ -1335,7 +1335,7 @@ static bool red_get_message(QXLInstance *qxl_instance, > RedMemSlotInfo *slots, in > { > QXLMessage *qxl; > int memslot_id; > - unsigned long len; > + uintptr_t len; > uint8_t *end; > > /* > diff --git a/server/spice-qxl.h b/server/spice-qxl.h > index 2f47910b9..5349d9275 100644 > --- a/server/spice-qxl.h > +++ b/server/spice-qxl.h > @@ -187,8 +187,8 @@ struct QXLDevMemSlot { > uint32_t slot_group_id; > uint32_t slot_id; > uint32_t generation; > - unsigned long virt_start; > - unsigned long virt_end; > + uintptr_t virt_start; > + uintptr_t virt_end; > uint64_t addr_delta; > uint32_t qxl_ram_size; > }; _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel