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

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
...@@ -396,8 +396,8 @@ struct radeon_sa_bo; ...@@ -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;
}; };
/* /*
......
...@@ -477,7 +477,7 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev, ...@@ -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, ...@@ -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:
......
...@@ -149,12 +149,12 @@ extern struct radeon_bo_va *radeon_bo_va(struct radeon_bo *rbo, ...@@ -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,
......
...@@ -152,11 +152,11 @@ int radeon_sa_bo_new(struct radeon_device *rdev, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment