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

Commit e6661a96 authored by Christian König's avatar Christian König Committed by Dave Airlie
Browse files

drm/radeon: keep start and end offset in the SA



Instead of offset + size keep start and end offset directly.

Signed-off-by: default avatarChristian König <deathsimple@vodafone.de>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 711a9729
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -396,8 +396,8 @@ struct radeon_sa_bo;
struct radeon_sa_bo {
struct radeon_sa_bo {
	struct list_head		list;
	struct list_head		list;
	struct radeon_sa_manager	*manager;
	struct radeon_sa_manager	*manager;
	unsigned			offset;
	unsigned			soffset;
	unsigned			size;
	unsigned			eoffset;
};
};


/*
/*
+2 −2
Original line number Original line Diff line number Diff line
@@ -477,7 +477,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev,
		/* ib pool is bind at 0 in virtual address space to gpu_addr is the
		/* ib pool is bind at 0 in virtual address space to gpu_addr is the
		 * offset inside the pool bo
		 * offset inside the pool bo
		 */
		 */
		parser->const_ib->gpu_addr = parser->const_ib->sa_bo.offset;
		parser->const_ib->gpu_addr = parser->const_ib->sa_bo.soffset;
		r = radeon_ib_schedule(rdev, parser->const_ib);
		r = radeon_ib_schedule(rdev, parser->const_ib);
		if (r)
		if (r)
			goto out;
			goto out;
@@ -487,7 +487,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev,
	/* ib pool is bind at 0 in virtual address space to gpu_addr is the
	/* ib pool is bind at 0 in virtual address space to gpu_addr is the
	 * offset inside the pool bo
	 * offset inside the pool bo
	 */
	 */
	parser->ib->gpu_addr = parser->ib->sa_bo.offset;
	parser->ib->gpu_addr = parser->ib->sa_bo.soffset;
	parser->ib->is_const_ib = false;
	parser->ib->is_const_ib = false;
	r = radeon_ib_schedule(rdev, parser->ib);
	r = radeon_ib_schedule(rdev, parser->ib);
out:
out:
+2 −2
Original line number Original line Diff line number Diff line
@@ -149,12 +149,12 @@ extern struct radeon_bo_va *radeon_bo_va(struct radeon_bo *rbo,


static inline uint64_t radeon_sa_bo_gpu_addr(struct radeon_sa_bo *sa_bo)
static inline uint64_t radeon_sa_bo_gpu_addr(struct radeon_sa_bo *sa_bo)
{
{
	return sa_bo->manager->gpu_addr + sa_bo->offset;
	return sa_bo->manager->gpu_addr + sa_bo->soffset;
}
}


static inline void * radeon_sa_bo_cpu_addr(struct radeon_sa_bo *sa_bo)
static inline void * radeon_sa_bo_cpu_addr(struct radeon_sa_bo *sa_bo)
{
{
	return sa_bo->manager->cpu_ptr + sa_bo->offset;
	return sa_bo->manager->cpu_ptr + sa_bo->soffset;
}
}


extern int radeon_sa_bo_manager_init(struct radeon_device *rdev,
extern int radeon_sa_bo_manager_init(struct radeon_device *rdev,
+7 −6
Original line number Original line Diff line number Diff line
@@ -152,11 +152,11 @@ int radeon_sa_bo_new(struct radeon_device *rdev,
	offset = 0;
	offset = 0;
	list_for_each_entry(tmp, &sa_manager->sa_bo, list) {
	list_for_each_entry(tmp, &sa_manager->sa_bo, list) {
		/* room before this object ? */
		/* room before this object ? */
		if (offset < tmp->offset && (tmp->offset - offset) >= size) {
		if (offset < tmp->soffset && (tmp->soffset - offset) >= size) {
			head = tmp->list.prev;
			head = tmp->list.prev;
			goto out;
			goto out;
		}
		}
		offset = tmp->offset + tmp->size;
		offset = tmp->eoffset;
		wasted = offset % align;
		wasted = offset % align;
		if (wasted) {
		if (wasted) {
			wasted = align - wasted;
			wasted = align - wasted;
@@ -166,7 +166,7 @@ int radeon_sa_bo_new(struct radeon_device *rdev,
	/* room at the end ? */
	/* room at the end ? */
	head = sa_manager->sa_bo.prev;
	head = sa_manager->sa_bo.prev;
	tmp = list_entry(head, struct radeon_sa_bo, list);
	tmp = list_entry(head, struct radeon_sa_bo, list);
	offset = tmp->offset + tmp->size;
	offset = tmp->eoffset;
	wasted = offset % align;
	wasted = offset % align;
	if (wasted) {
	if (wasted) {
		wasted = align - wasted;
		wasted = align - wasted;
@@ -180,8 +180,8 @@ int radeon_sa_bo_new(struct radeon_device *rdev,


out:
out:
	sa_bo->manager = sa_manager;
	sa_bo->manager = sa_manager;
	sa_bo->offset = offset;
	sa_bo->soffset = offset;
	sa_bo->size = size;
	sa_bo->eoffset = offset + size;
	list_add(&sa_bo->list, head);
	list_add(&sa_bo->list, head);
	spin_unlock(&sa_manager->lock);
	spin_unlock(&sa_manager->lock);
	return 0;
	return 0;
@@ -202,7 +202,8 @@ void radeon_sa_bo_dump_debug_info(struct radeon_sa_manager *sa_manager,


	spin_lock(&sa_manager->lock);
	spin_lock(&sa_manager->lock);
	list_for_each_entry(i, &sa_manager->sa_bo, list) {
	list_for_each_entry(i, &sa_manager->sa_bo, list) {
		seq_printf(m, "offset %08d: size %4d\n", i->offset, i->size);
		seq_printf(m, "[%08x %08x] size %4d [%p]\n",
			   i->soffset, i->eoffset, i->eoffset - i->soffset, i);
	}
	}
	spin_unlock(&sa_manager->lock);
	spin_unlock(&sa_manager->lock);
}
}