Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 561464ea authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/bo: add helper functions for handling pinned+mapped buffers



This is a common, awkward sequence.  Let's wrap it up!

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 27cda223
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -105,4 +105,32 @@ nvbo_kmap_obj_iovirtual(struct nouveau_bo *nvbo)
	return ioptr;
}

static inline void
nouveau_bo_unmap_unpin_unref(struct nouveau_bo **pnvbo)
{
	if (*pnvbo) {
		nouveau_bo_unmap(*pnvbo);
		nouveau_bo_unpin(*pnvbo);
		nouveau_bo_ref(NULL, pnvbo);
	}
}

static inline int
nouveau_bo_new_pin_map(struct nouveau_cli *cli, u64 size, int align, u32 flags,
		       struct nouveau_bo **pnvbo)
{
	int ret = nouveau_bo_new(cli, size, align, flags,
				 0, 0, NULL, NULL, pnvbo);
	if (ret == 0) {
		ret = nouveau_bo_pin(*pnvbo, flags, true);
		if (ret == 0) {
			ret = nouveau_bo_map(*pnvbo);
			if (ret == 0)
				return ret;
			nouveau_bo_unpin(*pnvbo);
		}
		nouveau_bo_ref(NULL, pnvbo);
	}
	return ret;
}
#endif