[PATCH v3 07/14] drm/panthor: Add the MMU/VM logical block
Boris Brezillon
boris.brezillon at collabora.com
Mon Jan 15 18:09:22 UTC 2024
On Mon, 4 Dec 2023 18:33:00 +0100
Boris Brezillon <boris.brezillon at collabora.com> wrote:
> +static int panthor_gpuva_sm_step_remap(struct drm_gpuva_op *op,
> + void *priv)
> +{
> + struct panthor_vma *unmap_vma = container_of(op->remap.unmap->va, struct panthor_vma, base);
> + struct panthor_vm *vm = priv;
> + struct panthor_vm_op_ctx *op_ctx = vm->op_ctx;
> + struct drm_gpuva *prev_va = NULL, *next_va = NULL;
> + u64 unmap_start, unmap_range;
> + int ret;
> +
> + drm_gpuva_op_remap_to_unmap_range(&op->remap, &unmap_start, &unmap_range);
> + ret = panthor_vm_unmap_pages(vm, unmap_start, unmap_range);
> + if (ret)
> + return ret;
> +
> + if (op->remap.prev) {
> + panthor_vma_init(op_ctx->map.prev_vma, unmap_vma->flags);
> + prev_va = &op_ctx->map.prev_vma->base;
> + }
> +
> + if (op->remap.next) {
> + panthor_vma_init(op_ctx->map.next_vma, unmap_vma->flags);
> + next_va = &op_ctx->map.next_vma->base;
> + }
> +
> + drm_gpuva_remap(prev_va, next_va, &op->remap);
> +
> + if (prev_va) {
> + panthor_vma_link(vm, op_ctx->map.prev_vma, op->remap.unmap->va->vm_bo);
panthor_vma_link() transfers the vm_bo ownership to the vma object, we
need to take a reference if we want to keep vm_bo's refcount balanced.
> + op_ctx->map.prev_vma = NULL;
> + }
> +
> + if (next_va) {
> + panthor_vma_link(vm, op_ctx->map.next_vma, op->remap.unmap->va->vm_bo);
> + op_ctx->map.next_vma = NULL;
> + }
> +
> + panthor_vma_unlink(vm, unmap_vma);
> + return 0;
> +}
More information about the dri-devel
mailing list