mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-26 14:41:25 +00:00
Use (u)intptr_t for virtual addresses
On LLP64 platforms (like Windows) a virtual address cannot be represented by a "unsigned long" type, so use uintptr_t which is defined as an integral type large like a pointer. "address_delta" and "addr_delta" are a difference of pointers so use same type size. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Snir Sheriber <ssheribe@redhat.com>
This commit is contained in:
parent
c289a6eee3
commit
2f6e2a8ef9
@ -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,
|
||||
uintptr_t addr_delta, uintptr_t virt_start, uintptr_t virt_end,
|
||||
uint32_t generation)
|
||||
{
|
||||
spice_assert(info->num_memslots_groups > slot_group_id);
|
||||
|
||||
@ -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;
|
||||
uintptr_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,
|
||||
uintptr_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);
|
||||
|
||||
@ -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;
|
||||
|
||||
/*
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user