mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 03:48:06 +02:00
nvk/nvmkd: Plumb parent pointers through everywhere
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30033>
This commit is contained in:
parent
d3264fdfb9
commit
0abd7fa58a
6 changed files with 19 additions and 9 deletions
|
|
@ -86,8 +86,6 @@ VkResult nvkmd_nouveau_import_dma_buf(struct nvkmd_dev *dev,
|
|||
|
||||
struct nvkmd_nouveau_va {
|
||||
struct nvkmd_va base;
|
||||
|
||||
struct nvkmd_nouveau_dev *dev;
|
||||
};
|
||||
|
||||
NVKMD_DECL_SUBCLASS(va, nouveau);
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ nvkmd_nouveau_create_exec_ctx(struct nvkmd_dev *_dev,
|
|||
return vk_error(log_obj, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
ctx->base.ops = &nvkmd_nouveau_exec_ctx_ops;
|
||||
ctx->base.dev = &dev->base;
|
||||
ctx->ws_dev = dev->ws_dev;
|
||||
|
||||
STATIC_ASSERT(NVKMD_ENGINE_COPY == (int)NOUVEAU_WS_ENGINE_COPY);
|
||||
|
|
@ -275,6 +276,7 @@ nvkmd_nouveau_create_bind_ctx(struct nvkmd_dev *_dev,
|
|||
return vk_error(log_obj, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
ctx->base.ops = &nvkmd_nouveau_bind_ctx_ops;
|
||||
ctx->base.dev = &dev->base;
|
||||
ctx->ws_dev = dev->ws_dev;
|
||||
|
||||
ctx->req = (struct drm_nouveau_vm_bind) {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ nvkmd_nouveau_create_dev(struct nvkmd_pdev *_pdev,
|
|||
return vk_error(log_obj, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
dev->base.ops = &nvkmd_nouveau_dev_ops;
|
||||
dev->base.pdev = &pdev->base;
|
||||
|
||||
drmDevicePtr drm_device = NULL;
|
||||
int ret = drmGetDeviceFromDevId(pdev->base.drm.render_dev, 0, &drm_device);
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ create_mem_or_close_bo(struct nvkmd_nouveau_dev *dev,
|
|||
}
|
||||
|
||||
mem->base.ops = &nvkmd_nouveau_mem_ops;
|
||||
mem->base.dev = &dev->base;
|
||||
mem->base.refcnt = 1;
|
||||
mem->base.flags = flags;
|
||||
mem->base.size_B = size_B;
|
||||
|
|
|
|||
|
|
@ -149,10 +149,10 @@ nvkmd_nouveau_alloc_va(struct nvkmd_dev *_dev,
|
|||
}
|
||||
|
||||
va->base.ops = &nvkmd_nouveau_va_ops;
|
||||
va->base.dev = &dev->base;
|
||||
va->base.flags = flags;
|
||||
va->base.pte_kind = pte_kind;
|
||||
va->base.size_B = size_B;
|
||||
va->dev = dev;
|
||||
|
||||
*va_out = &va->base;
|
||||
|
||||
|
|
@ -169,6 +169,7 @@ fail_alloc:
|
|||
static void
|
||||
nvkmd_nouveau_va_free(struct nvkmd_va *_va)
|
||||
{
|
||||
struct nvkmd_nouveau_dev *dev = nvkmd_nouveau_dev(_va->dev);
|
||||
struct nvkmd_nouveau_va *va = nvkmd_nouveau_va(_va);
|
||||
VkResult result = VK_SUCCESS;
|
||||
|
||||
|
|
@ -180,7 +181,7 @@ nvkmd_nouveau_va_free(struct nvkmd_va *_va)
|
|||
.addr = va->base.addr,
|
||||
.range = va->base.size_B,
|
||||
};
|
||||
result |= vm_bind(va->dev, NULL, &bind);
|
||||
result |= vm_bind(dev, NULL, &bind);
|
||||
}
|
||||
|
||||
if (va->base.flags & NVKMD_VA_SPARSE) {
|
||||
|
|
@ -190,12 +191,12 @@ nvkmd_nouveau_va_free(struct nvkmd_va *_va)
|
|||
.range = va->base.size_B,
|
||||
.flags = DRM_NOUVEAU_VM_BIND_SPARSE,
|
||||
};
|
||||
result |= vm_bind(va->dev, NULL, &bind);
|
||||
result |= vm_bind(dev, NULL, &bind);
|
||||
}
|
||||
|
||||
/* If unbinding fails, we leak the VA range */
|
||||
if (result == VK_SUCCESS)
|
||||
free_heap_addr(va->dev, va->base.flags, va->base.addr, va->base.size_B);
|
||||
free_heap_addr(dev, va->base.flags, va->base.addr, va->base.size_B);
|
||||
|
||||
FREE(va);
|
||||
}
|
||||
|
|
@ -208,10 +209,11 @@ nvkmd_nouveau_va_bind_mem(struct nvkmd_va *_va,
|
|||
uint64_t mem_offset_B,
|
||||
uint64_t range_B)
|
||||
{
|
||||
struct nvkmd_nouveau_dev *dev = nvkmd_nouveau_dev(_va->dev);
|
||||
struct nvkmd_nouveau_va *va = nvkmd_nouveau_va(_va);
|
||||
struct nvkmd_nouveau_mem *mem = nvkmd_nouveau_mem(_mem);
|
||||
|
||||
assert(mem->bo->dev == va->dev->ws_dev);
|
||||
assert(_mem->dev == _va->dev);
|
||||
|
||||
struct drm_nouveau_vm_bind_op bind = {
|
||||
.op = DRM_NOUVEAU_VM_BIND_OP_MAP,
|
||||
|
|
@ -221,7 +223,7 @@ nvkmd_nouveau_va_bind_mem(struct nvkmd_va *_va,
|
|||
.bo_offset = mem_offset_B,
|
||||
.flags = va->base.pte_kind,
|
||||
};
|
||||
return vm_bind(va->dev, log_obj, &bind);
|
||||
return vm_bind(dev, log_obj, &bind);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
|
|
@ -230,6 +232,7 @@ nvkmd_nouveau_va_unbind(struct nvkmd_va *_va,
|
|||
uint64_t va_offset_B,
|
||||
uint64_t range_B)
|
||||
{
|
||||
struct nvkmd_nouveau_dev *dev = nvkmd_nouveau_dev(_va->dev);
|
||||
struct nvkmd_nouveau_va *va = nvkmd_nouveau_va(_va);
|
||||
|
||||
struct drm_nouveau_vm_bind_op bind = {
|
||||
|
|
@ -237,7 +240,7 @@ nvkmd_nouveau_va_unbind(struct nvkmd_va *_va,
|
|||
.addr = va->base.addr + va_offset_B,
|
||||
.range = range_B,
|
||||
};
|
||||
return vm_bind(va->dev, log_obj, &bind);
|
||||
return vm_bind(dev, log_obj, &bind);
|
||||
}
|
||||
|
||||
const struct nvkmd_va_ops nvkmd_nouveau_va_ops = {
|
||||
|
|
|
|||
|
|
@ -147,6 +147,7 @@ struct nvkmd_dev_ops {
|
|||
|
||||
struct nvkmd_dev {
|
||||
const struct nvkmd_dev_ops *ops;
|
||||
struct nvkmd_pdev *pdev;
|
||||
};
|
||||
|
||||
struct nvkmd_mem_ops {
|
||||
|
|
@ -169,6 +170,7 @@ struct nvkmd_mem_ops {
|
|||
|
||||
struct nvkmd_mem {
|
||||
const struct nvkmd_mem_ops *ops;
|
||||
struct nvkmd_dev *dev;
|
||||
|
||||
uint32_t refcnt;
|
||||
|
||||
|
|
@ -197,6 +199,8 @@ struct nvkmd_va_ops {
|
|||
|
||||
struct nvkmd_va {
|
||||
const struct nvkmd_va_ops *ops;
|
||||
struct nvkmd_dev *dev;
|
||||
|
||||
enum nvkmd_va_flags flags;
|
||||
uint8_t pte_kind;
|
||||
uint64_t addr;
|
||||
|
|
@ -256,6 +260,7 @@ struct nvkmd_ctx_ops {
|
|||
|
||||
struct nvkmd_ctx {
|
||||
const struct nvkmd_ctx_ops *ops;
|
||||
struct nvkmd_dev *dev;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue