nvk/nvkmd: Plumb map pointers through to back-end unmap funcs
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31004>
This commit is contained in:

committed by
Marge Bot

parent
b130c6dae4
commit
6c782b8a12
@@ -208,29 +208,28 @@ nvkmd_nouveau_mem_map(struct nvkmd_mem *_mem,
|
||||
}
|
||||
|
||||
static void
|
||||
nvkmd_nouveau_mem_unmap(struct nvkmd_mem *_mem)
|
||||
nvkmd_nouveau_mem_unmap(struct nvkmd_mem *_mem, void *map)
|
||||
{
|
||||
struct nvkmd_nouveau_mem *mem = nvkmd_nouveau_mem(_mem);
|
||||
|
||||
munmap(mem->base.map, mem->base.size_B);
|
||||
mem->base.map = NULL;
|
||||
munmap(map, mem->base.size_B);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
nvkmd_nouveau_mem_overmap(struct nvkmd_mem *_mem,
|
||||
struct vk_object_base *log_obj)
|
||||
struct vk_object_base *log_obj,
|
||||
void *map)
|
||||
{
|
||||
struct nvkmd_nouveau_mem *mem = nvkmd_nouveau_mem(_mem);
|
||||
|
||||
void *map = mmap(mem->base.map, mem->base.size_B, PROT_NONE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
|
||||
if (map == MAP_FAILED) {
|
||||
void *new_map = mmap(map, mem->base.size_B, PROT_NONE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
|
||||
if (new_map == MAP_FAILED) {
|
||||
return vk_errorf(log_obj, VK_ERROR_MEMORY_MAP_FAILED,
|
||||
"Failed to map over original mapping");
|
||||
}
|
||||
|
||||
assert(map == mem->base.map);
|
||||
mem->base.map = NULL;
|
||||
assert(new_map == map);
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
@@ -208,7 +208,7 @@ nvkmd_mem_unref(struct nvkmd_mem *mem)
|
||||
return;
|
||||
|
||||
if (mem->map != NULL)
|
||||
mem->ops->unmap(mem);
|
||||
mem->ops->unmap(mem, mem->map);
|
||||
|
||||
mem->ops->free(mem);
|
||||
}
|
||||
|
@@ -193,10 +193,11 @@ struct nvkmd_mem_ops {
|
||||
void *fixed_addr,
|
||||
void **map_out);
|
||||
|
||||
void (*unmap)(struct nvkmd_mem *mem);
|
||||
void (*unmap)(struct nvkmd_mem *mem, void *map);
|
||||
|
||||
VkResult (*overmap)(struct nvkmd_mem *mem,
|
||||
struct vk_object_base *log_obj);
|
||||
struct vk_object_base *log_obj,
|
||||
void *map);
|
||||
|
||||
VkResult (*export_dma_buf)(struct nvkmd_mem *mem,
|
||||
struct vk_object_base *log_obj,
|
||||
@@ -475,16 +476,17 @@ static inline void
|
||||
nvkmd_mem_unmap(struct nvkmd_mem *mem)
|
||||
{
|
||||
assert(mem->map != NULL);
|
||||
mem->ops->unmap(mem);
|
||||
assert(mem->map == NULL);
|
||||
mem->ops->unmap(mem, mem->map);
|
||||
mem->map = NULL;
|
||||
}
|
||||
|
||||
static inline VkResult MUST_CHECK
|
||||
nvkmd_mem_overmap(struct nvkmd_mem *mem, struct vk_object_base *log_obj)
|
||||
{
|
||||
assert(mem->map != NULL);
|
||||
VkResult result = mem->ops->overmap(mem, log_obj);
|
||||
assert(mem->map == NULL);
|
||||
VkResult result = mem->ops->overmap(mem, log_obj, mem->map);
|
||||
if (result == VK_SUCCESS)
|
||||
mem->map = NULL;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user